| 文档名称 | Zabbix双机房集群部署方案 |
|---|---|
| 版本编号 | V1.0 |
| 日期 | 修改章节 | 文档类型 | 修改类型 | 修改人 |
|---|---|---|---|---|
| 2021/06/09 | 安装部署 | C | 余亮亮 | |
- 修改类型分为 C - CREATED M - MODIFIED D - DELETED
1、部署架构
Zabbix部署方式有三种,分别为“从源码包安装”、“从二进制包安装”、“从容器安装”,本文档采用源码部署的方式。部署基于分布式的前后端分离架构。
1.1、环境准备
1.1.1、硬件环境
参考配置,可根据实际情况调整。
| 角色 | CPU | 内存 | 硬盘 | 节点数量 | 部署描述 |
|---|---|---|---|---|---|
| Zabbix-Server | 12Core | 64G | 100G | 2 | 钦州主节点,临港备节点 |
| Zabbix-Proxy | 8Core | 24G | 100G | N | |
| Zabbix-Web+Nginx | 4Core | 8G | 100G | 2 | 钦州主节点,临港备节点 |
| Zabbix-DB |
1.1.2、软件环境
| 软件 | 版本 |
|---|---|
| 操作系统 | CentOS Linux release 7.9.2009 (Core) |
| Zabbix-Server | zabbix-5.0.3 |
| Zabbix-Agent | zabbix_agent-5.0.3 |
| Nginx | nginx-1.16.1 |
| PHP | php-7.2.24 |
| 数据库 | MySQL 5.7.33 |
1.1.3、操作系统初始化配置
- 关闭防火墙
systemctl stop firewalldsystemctl disable firewalld
- 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久setenfore 0 # 临时
1.2、部署架构图

注:
- Zabbix Web部署Nginx和zabbix静态资源。
- 钦州和临港
zabbix.conf.php文件中ZBX_SERVER地址指向各自机房的Zabbix Server地址。 - Zabbix Server启动后被动模式即会工作,因此同时只可启动一个机房的Zabbix Server。
- 主从切换时,停止主机房Zabbix Server,切换Nginx配置文件及
zabbix.conf.php文件中ZBX_SERVER地址,启动从机房Zabbix Server,完成Zabbix Server主从切换。
1.3、获取安装包
1.3.1、Zabbix Server/Proxy下载
$ wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.12.tar.gz
1.3.2、Zabbix Agents下载
$ wget https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.12/zabbix_agent-5.0.12-linux-3.0-amd64-static.tar.gz
1.3.3、PHP下载
$ wget https://www.php.net/distributions/php-7.4.20.tar.gz
1.3.4、Nginx下载
$ wget http://nginx.org/download/nginx-1.16.1.tar.gz
1.4、软件安装规范
软件安装遵循两个准则:
- 权限最小化
- 结构规范化
本环境按照以下规范统一安装:
- 启动用户:
- Zabbix Server、Zabbix Proxy、Zabbix Agent、PHP均使用app用户启动
- Nginx默认端口为80,1024以下的端口需使用超级管理员启动,本文档使用8080端口app用户启动,如使用80端口,可使用root用户启动。
- 目录结构
- 安装包路径:$HOME/software
- Zabbix Server安装路径:$HOME/zabbix_server
- PHP安装路径:$HOME/php
- Zabbix Proxy安装路径:$HOME/zabbix_proxy
- Zabbix Agent安装路径:$HOME/zabbix_agent
- Nginx安装路径:$HOME/nginx
- Zabbix日志路径:$HOME/logs/zabbixlogs
- PHP日志路径:$HOME/logs/phplogs
- Nginx日志路径:$HOME/logs/nginxlogs
2、数据库主从环境部署
数据库采用MHA集群部署,具体文档参考“MySQL5.7_MHA集群部署手册”
3、从源码包安装PHP
3.1、安装依赖环境
$ yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel libxml2 libxml-devel curl-devel mysql-devel libxml2-devel net-snmp-devel libevent-devel libcurl-devel unixODBC-devel jpeglib-devel libpng libpng-devel freetype-devel libicu-devel openldap-devel openldap libjpeg libjpeg-devel libssh2-devel sqlite-devel oniguruma-devel
3.2、配置php环境
$ cp -frp /usr/lib64/libldap* /usr/lib$ cd /data/app/software && tar zxvf php-7.2.30.tar.gz$ cd /data/app/software/php-7.2.30$ ./configure --prefix=/data/app/php \--with-config-file-path=/data/app/php/etc \--enable-fpm \--with-fpm-user=app \--with-fpm-group=app \--enable-mysqlnd \--with-mysqli=mysqlnd \--with-pdo-mysql=mysqlnd \--enable-mysqlnd-compression-support \--with-iconv-dir \--with-freetype-dir \--with-jpeg-dir \--with-png-dir \--with-zlib \--with-libxml-dir \--enable-xml \--disable-rpath \--enable-bcmath \--enable-shmop \--enable-sysvsem \--enable-inline-optimization \--with-curl \--enable-mbregex \--enable-mbstring \--enable-intl \--with-libmbfl \--enable-ftp \--with-gd \--with-openssl \--with-mhash \--enable-pcntl \--enable-sockets \--with-xmlrpc \--enable-zip \--enable-soap \--with-gettext \--disable-fileinfo \--enable-opcache \--with-pear \--enable-maintainer-zts \--with-ldap=shared \--without-gdbm
3.3、编译安装
$ make$ make install
3.4、修改php-fpm.conf
$ cp /data/app/app/php/etc/php-fpm.conf.default /data/app/app/php/etc/php-fpm.conf[global]daemonize = yes# 修改日志配置pid = /data/app/app/logs/phplogs/php-fpm.piderror_log = /data/app/app/logs/phplogs/php-fpm.loginclude=/data/app/app/php/etc/php-fpm.d/*.conf
3.5、修改php.ini
$ cp /data/app/app/software/php-7.2.30/php.ini-production /data/app/app/php/etc/php.ini
# 修改以下参数
sed -i 's/post_max_size = 8M/post_max_size = 32M/g' php.ini
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/g' php.ini
sed -i 's/;date.timezone =/date.timezone =Asia\/Shanghai/g' php.ini
sed -i 's/max_execution_time = 30/max_execution_time = 600/g' php.ini
sed -i 's/max_input_time = 60/max_input_time = 600/g' php.ini
sed -i 's/memory_limit = 128M/memory_limit = 256M/g' php.ini
sed -i 's/;extension=ldap/extension=ldap/g' php.ini
3.6、增加zabbix的php配置
$ cd /data/app/app/php/etc/php-fpm.d
$ cat > zabbix.conf1 << EOF
[zabbix]
user = app
group = app
listen = /data/app/app/php/var/run/php-zabbix.sock
;listen.acl_users = app,nginx
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
php_value[session.save_handler] = files
php_value[session.save_path] = /data/app/app/php/var/run/session/
php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000
php_value[date.timezone] = Asia/Shanghai
EOF
3.7、添加PHP启停脚本
vim /data/app/app/php/sbin/php_tools.sh
#!/usr/bin/env bash
# @Time : 2021/06/16
# @File : php_tools.sh
# create by Larry Yu <larry@yull.cc>
# description: PHP Server
RETVAL=0
prog="PHP Server"
PHP_BIN="/data/app/app/php/sbin/php-fpm"
if [ ! -x ${PHP_BIN} ];then
echo "${PHP_BIN} not installed!"
exit 3
fi
start() {
echo "Starting ${prog}"
${PHP_BIN}
RETVAL=$?
[ $RETVAL -eq 0 ] && echo "${prog} start success."
}
stop() {
echo "Stoping ${prog}"
/bin/pkill -9 php-fpm
RETVAL=$?
[ $RETVAL -eq 0 ] && echo "${prog} stop success."
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload|restart)
stop
sleep 3
start
;;
*)
echo "Usage: $0 {start|stop|reload|restart}"
exit 1
esac
exit $RETVAL
# 启动服务
sh php_tools.sh start
# 停止服务
sh php_tools.sh stop
# 重启服务
sh php_tools.sh restart | sh php_tools.sh reload
4、从源码包安装Zabbix Server
4.1、编译安装Server
# 编译参数默认按照官网推荐
$ tar -xvf zabbix-5.0.12.tar.gz
$ cd zabbix-5.0.12
$ ./configure --prefix=/data/app/app/zabbix_server --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
$ make && make install
4.2、配置Zabbix Server数据库
# 建库、建用户
# mysql -uroot -p
mysql> create database dbzabbix5 character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> create user zabbix50@'%' identified by 'Zabbix@50';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on dbzabbix5.* to 'zabbix50'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
Bye
# 导入数据库表和基础数据
$ cd /data/app/app/software/zabbix-5.0.12/database/mysql
$ mysql -uzabbix50 -pZabbix@50 dbzabbix5 < schema.sql
$ mysql -uzabbix50 -pZabbix@50 dbzabbix5 < images.sql
$ mysql -uzabbix50 -pZabbix@50 dbzabbix5 < data.sql
4.3、配置Zabbix Server
4.3.1、Zabbix Server配置文件优化
vim /data/app/app/zabbix_server/etc/zabbix_server.conf
# 修改以下配置
LogFile=/data/app/app/logs/zabbixlogs/zabbix_server.log
LogFileSize=0
PidFile=/data/app/app/zabbix_server/run/zabbix_server.pid
SocketDir=/data/app/app/zabbix_server/run
DBHost=10.11.32.24
DBName=dbzabbix5
DBUser=zabbix50
DBPassword=Zabbix@50
DBPort=3306
CacheSize=256M # 存储主机、监控项、触发器数据的共享内存大小.
HistoryIndexCacheSize=10M # 可以根据监控项数量*1000/1024/1024来计算
SNMPTrapperFile=/data/app/app/logs/zabbixlogs/snmptrap.log
Timeout=4
AlertScriptsPath=/data/app/app/zabbix_server/zbx_script/
ExternalScripts=/data/app/app/zabbix_server/externalscripts
FpingLocation=/usr/sbin/fping
SNMPTrapperFile=/tmp/zabbix_traps.tmp
StartSNMPTrapper=1
ListenIP=0.0.0.0
Timeout=10
FpingLocation=/usr/sbin/fping
Include=/data/app/app/zabbix_server/etc/zabbix_server.conf.d/*.conf
4.3.3、修改数据库最大连接数
# 因zabbix server启动进程较多,mysql默认最大连接数151,因此需修改
mysql> show variables like "max_connections";
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 151 |
+-----------------+-------+
1 row in set (0.00 sec)
mysql> set GLOBAL max_connections=1000;
Query OK, 0 rows affected (0.00 sec)
4.3.4、增加Zabbix Server启停脚本
# 停止脚本
vim /data/app/app/zabbix/sbin/zabbix_tools.sh
#!/usr/bin/env bash
# @Time : 2021/06/16
# @File : zabbix_tools.sh
# create by Larry Yu <larry@yull.cc>
# description: Zabbix Monitoring Agent
RETVAL=0
prog="Zabbix Server"
ZABBIX_BIN="/data/app/app/zabbix_server/sbin/zabbix_server"
if [ ! -x ${ZABBIX_BIN} ];then
echo "${ZABBIX_BIN} not installed!"
exit 3
fi
start() {
echo "Starting ${prog}"
${ZABBIX_BIN} -c /data/app/app/zabbix_server/etc/zabbix_server.conf
RETVAL=$?
[ $RETVAL -eq 0 ] && echo "${prog} start success."
}
stop() {
echo -n "Stoping ${prog}"
ps -ef| grep zabbix_server |grep -Ev "grep|zabbix_tools" |awk {'print $2'} |xargs kill -9
RETVAL=$?
[ $RETVAL -eq 0 ] && echo "${prog} stop success."
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload|restart)
stop
sleep 3
start
;;
*)
echo "Usage: $0 {start|stop|reload|restart}"
exit 1
esac
exit $RETVAL
# 启动服务
sh zabbix_tools.sh start
# 停止服务
sh zabbix_tools.sh stop
# 重启服务
sh zabbix_tools.sh restart | sh zabbix_tools.sh reload
5、Nginx安装及Zabbix Web配置
5.1、从源码包安装nginx
$ tar -xvf nginx-1.16.1.tar.gz
$ ./configure --user=app --group=app --prefix=/data/app/app/nginx --with-http_ssl_module --with-http_stub_status_module --with-stream --with-http_gzip_static_module --with-http_sub_module
$ make && make install
5.2、导入Zabbix Web静态资源
cp -r /data/app/app/software/zabbix-5.0.12/ui/* /data/app/app/nginx/html/
5.3、修改Nginx配置
# nginx.conf调整
cat > /data/app/app/nginx/conf/nginx.conf <<EOF
worker_processes auto;
events {
use epoll;
worker_connections 65535;
multi_accept on;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr $remote_port $host $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$upstream_response_time" "$upstream_addr" "$upstream_status" "$request_time"';
sendfile on;
server_tokens off;
keepalive_timeout 65;
gzip on;
server_names_hash_bucket_size 64;
client_header_buffer_size 16k;
large_client_header_buffers 16 32k;
client_header_timeout 15;
client_body_timeout 60;
send_timeout 15;
reset_timedout_connection on;
client_body_buffer_size 128k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
include vhost.d/*.conf;
}
EOF
# 增加zabbix.conf配置
mkdir vhost.d
cat > zabbix.conf << EOF
server {
server_name 10.11.32.37;
listen 8080;
access_log /data/app/app/logs/nginxlogs/zabbix.access.log main;
error_log /data/app/app/logs/nginxlogs/zabbix.error.log;
root html;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass unix:/data/app/app/php/var/run/php-zabbix.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
5.4、启停Nginx
# 启动
/data/app/app/nginx/sbin/nginx
# 重载
/data/app/app/nginx/sbin/nginx -s reload
# 停止Nginx
/data/app/app/nginx/sbin/nginx -s stop
5.5、配置Zabbix Web
浏览器访问http://ZABBIXWEB_IP:8080/zabbix,点击Next直至完成。即可登录Zabbix,默认用户名密码为:Admin/zabbix
5.5.1、登录后提示Server未启动

解决方案:
vim /data/app/app/nginx/html/conf/zabbix.conf.php
修改ZBX_SERVER为zabbix server ip:
$ZBX_SERVER = '10.11.32.37';
5.5.2、最新数据图标中文乱码

解决方案:从window中复制字体,并上传至服务器修改字体
cd /data/app/app/nginx/html/assets/fonts
mv DejaVuSans.ttf DejaVuSans.ttf.bak
ln -s graphfont.ttf DejaVuSans.ttf
6、从源码包安装Zabbix Proxy
Zabbix Server及Zabbix Proxy都必须要数据库,且不可是同一个数据库,因Zabbix Proxy仅作为数据临时存储,因此Zabbix Proxy和数据库部署在同一台服务器。
6.1、Zabbix Proxy数据库安装
$ yum -y install mariadb mariadb-server
$ systemctl start mariadb
$ systemctl enable mariadb
$ mysql_secure_installation # 初始化配置
Enter current password for root (enter for none):<–初次运行直接回车
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
Remove anonymous users? [Y/n] <– 是否删除匿名用户
Disallow root login remotely? [Y/n] <–是否禁止root远程登录
Remove test database and access to it? [Y/n] <– 是否删除test数据库
Reload privilege tables now? [Y/n] <– 是否重新加载权限表
6.2、配置数据库字符集
vi /etc/my.cnf
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
vi /etc/my.cnf.d/client.cnf
[client]
default-character-set=utf8
vi /etc/my.cnf.d/mysql-clients.cnf
[mysql]
default-character-set=utf8
# 配置后重启mariadb
systemctl restart mariadb
6.3、创建数据库用户
mysql> create database zabbix character set utf8;
Query OK, 1 row affected (0.22 sec)
mysql> grant all privileges on zabbix.* to zabbix@'%' identified by 'zabbix';
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
6.4、proxy依赖环境安装
yum install -y net-snmp-devel libssh2-devel libevent-devel
6.5、编译安装Zabbix Proxy
cd zabbix-5.0.12/
./configure --prefix=/data/app/app/zabbix_proxy --enable-proxy --with-net-snmp --with-mysql --with-ssh2 --enable-agent
make && make insatll
6.6、修改zabbix_proxy.conf
Server=10.11.32.37
Hostname=10.11.20.117
LogFile=/data/app/app/logs/zabbixlogs/zabbix_proxy.log
PidFile=data/app/app/logs/zabbixlogs/zabbix_proxy.pid
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=Zabbix@50
DBPort=3306
6.7、zabbix proxy启停脚本
#!/usr/bin/env bash
# @Time : 2021/06/16
# @File : zabbix_tools.sh
# create by Larry Yu <larry@yull.cc>
# description: Zabbix Monitoring Proxy
RETVAL=0
prog="Zabbix Proxy"
ZABBIX_BIN="/data/app/app/zabbix_proxy/sbin/zabbix_proxy"
if [ ! -x ${ZABBIX_BIN} ];then
echo "${ZABBIX_BIN} not installed!"
exit 3
fi
start() {
echo "Starting ${prog}"
${ZABBIX_BIN} -c /data/app/app/zabbix_proxy/etc/zabbix_proxy.conf
RETVAL=$?
[ $RETVAL -eq 0 ] && echo "${prog} start success."
}
stop() {
echo "Stoping ${prog}"
ps -ef| grep zabbix_proxy |grep -Ev "grep|zabbix_tools" |awk {'print $2'} |xargs kill -9
RETVAL=$?
[ $RETVAL -eq 0 ] && echo "${prog} stop success."
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload|restart)
stop
sleep 3
start
;;
*)
echo "Usage: $0 {start|stop|reload|restart}"
exit 1
esac
exit $RETVAL
# 启动服务
sh zabbix_tools.sh start
# 停止服务
sh zabbix_tools.sh stop
# 重启服务
sh zabbix_tools.sh restart | sh zabbix_tools.sh reload
7、从源码包安装Zabbix Agent
7.1、前置检查
# 查看内核版本
$ uname -r
3.10.0-327.el7.x86_64
# 下载对应安装包
$ wget https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.12/zabbix_agent-5.0.12-linux-3.0-amd64-static.tar.gz # Ceonts
$ https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.10/zabbix_agent-5.0.12-windows-amd64.zip # windows
7.2、安装Zabbix Agent
# 创建zabbix agent目录
$ mkdir /data/app/app/zabbix_agent
# 解压zabbix agent
$ tar -xvf zabbix_agent-5.0.12-linux-3.0-amd64-static.tar.gz -d /data/app/app/zabbix_agent
7.3、修改配置文件
$ cat > zabbix_agentd.conf << EOF
PidFile=/data/app/app/zabbix_agent/run/zabbix_agentd.pid
LogFile=/data/app/app/logs/zabbixlogs/zabbix_agentd.log
Server=10.11.32.37
ServerActive=10.11.32.37
Hostname=10.11.32.37
EOF
7.4、启停服务
vim /data/app/app/zabbix_agent/sbin/zabbix_tools.sh
#!/usr/bin/env bash
# @Time : 2021/06/16
# @File : zabbix_agent.py
# create by Larry Yu <larry@yull.cc>
# description: Zabbix Monitoring Agent
RETVAL=0
prog="Zabbix Agent"
ZABBIX_BIN="/data/app/app/zabbix_agent/sbin/zabbix_agentd"
if [ ! -x ${ZABBIX_BIN} ];then
echo "${ZABBIX_BIN} not installed!"
exit 5
fi
start() {
echo "Starting ${prog}"
${ZABBIX_BIN} -c /data/app/app/zabbix_agent/conf/zabbix_agentd.conf
RETVAL=$?
[ $RETVAL -eq 0 ] && echo "${prog} start success."
}
stop() {
echo -n "Stoping ${prog}"
ps -ef| grep zabbix_agent |grep -Ev "grep|zabbix_tools" |awk {'print $2'} |xargs kill -9
RETVAL=$?
[ $RETVAL -eq 0 ] && echo "${prog} stop success."
}
case "$1" in
start)
start
;;
stop)
stop
;;
reload|restart)
stop
sleep 3
start
;;
*)
echo "Usage: $0 {start|stop|reload|restart}"
exit 1
esac
exit $RETVAL
# 启动服务
sh zabbix_tools.sh start
# 停止服务
sh zabbix_tools.sh stop
# 重启服务
sh zabbix_tools.sh restart | sh zabbix_tools.sh reload
7.5、批量Agent部署
批量部署Agent通过Python脚本解析Excel的方式进行,支持批量源码安装Zabbix Agent。
7.5.1、依赖包安装
需要Python 3以上版本,建议Python 3.7.
pip3 install xlrd
pip3 install pyzabbix
pip3 install paramiko
7.5.2、脚本使用说明
在Excel表格中生成待安装信息
主机组允许为空,为空将默认添加到Linux Servers主机组
代理IP允许为空,为空默认不关联Zabbix Proxy
模板允许为空,为空管理关联到Template OS Linux by Zabbix agent模板 | 主机可见名 | IP | 主机组 | 代理IP | 模板 | 是否启用 | | —- | —- | —- | —- | —- | —- | | zabbix-test-10.11.12.11 | 10.11.12.11 | Linux servers | | Template OS Linux by Zabbix agent | 0 | | zabbix-test-10.11.12.12 | 10.11.12.12 | Linux servers | | Template OS Linux by Zabbix agent | 1 |脚本结构
# tree autoAddZabbix/ autoAddZabbix/ ├── addZabbix.py # 主程序 ├── config │ ├── agent_setting.conf # 脚本配置文件 │ └── zabbix_agentd.conf # zabbix agent配置文件 ├── package │ └── zabbix_agent-5.0.12.tar.gz # 源码包 ├── README.md # 说明文档 ├── utils │ └── ssh_remote.py # ssh远程模块 └── zabbix-ip.20210616.xlsx # 模板文件脚本使用方式
部署时,如果客户端已经安装,会提示是否重新安装,安装后会自动启动zabbix-agent
python3 addZabbix.py zabbix-ip.20210616.xlsx
