zabbix3.0服务迁移
zabbix服务器快到期了,把服务迁移到其他服务器,整理下迁移过程
环境说明:
系统:CentOS 7.2.1511
yum安装的nginx:1.12
yum安装的php71w-fpm
因为系统上已经存在nginx和php,所以zabbix我用编译安装,因为yum安装的时候依赖关系里有httpd和php,我的zabbix是用nginx服务,所以直接用编译安装,避免安装依赖,在编译zabbix之前需要安装几个依赖:
创建用户,编译安装
创建用户和组
groupadd --system zabbix
useradd --system -g zabbix -d /usr/local/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
编译安装
wget https://cdn.zabbix.com/zabbix/sources/stable/3.0/zabbix-3.0.31.tar.gz
tar xf zabbix-*.tar.gz
cd zabbix-*
./configure \
--prefix=/usr/local/zabbix \
--enable-server \
--enable-agent \
--with-mysql \
--enable-ipv6 \
--with-libcurl \
--with-libxml2
编译的时候提示 configure: error: MySQL library not found
,需要安装mysql-deve包,centos7上是mariadb-devel,为了避免yum安装的时候安装依赖包,可以直接把rpm包下载到本地,然后忽略依赖强制安装:
yum install --downloadonly --downloaddir=/tmp/ mariadb-devel
cd /tmp
rpm -ivh mariadb-devel-5.5.65-1.el7.x86_64.rpm --nodeps --force
还有其他几个依赖 yum install libxml2-devel curl-devel
编译完成后安装:
make && make install
拷贝脚本:
cp misc/init.d/fedora/core5/zabbix_* /etc/init.d/
编辑server和agent脚本
sed -i s#local/sbin#local/zabbix/sbin#g /etc/init.d/zabbix_server
sed -i s#local/sbin#local/zabbix/sbin#g /etc/init.d/zabbix_agentd
添加开机启动:
chkconfig --add zabbix_agentd
chkconfig --add zabbix_server
chkconfig zabbix_server on
chkconfig zabbix_agentd on
从zabbix源码包拷贝网站
rsync -avuP frontends/php/ /usr/share/zabbix/
创建数据库并导入
create database zabbix default charset utf8;
grant all on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';
grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'zabbix';
flush privileges;
数据库导入
mysql -uzabbix -pzabbix zabbix < database/mysql/schema.sql
mysql -uzabbix -pzabbix zabbix < database/mysql/images.sql
mysql -uzabbix -pzabbix zabbix < database/mysql/data.sql
配置zabbix_server.conf
cd /usr/local/zabbix/etc
vim zabbix_server.conf
LogFile=/tmp/zabbix_server.log
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
Timeout=4
LogSlowQueries=3000
AlertScriptsPath=/usr/local/zabbix/share/zabbix/alertscripts
DBSocket=/var/lib/mysql/mysql.sock #默认是/tmp/mysql.sock
修改php配置文件
cp /etc/php.ini{,.bak}
vim /etc/php.ini
max_execution_time = 300
max_input_time = 300
post_max_size = 16M
date.timezone = Asia/Shanghai
保存配置,重启php-fpm: systemctl restart php-fpm
配置php-fpm
cd /etc/php-fpm.d/
vim zabbix.conf
[zabbix]
listen = /tmp/php-cgi-71.sock
listen.backlog = 8192
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = static
pm.status_path = /phpfpm_71_status
pm.max_children = 5
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 20
request_terminate_timeout = 100
保存后重启php-fpm。
添加zabbix的nginx配置文件
cd /etc/nginx/conf.d/
cat zabbix.conf
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/1_z.jiankong.com_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/2_z.jiankong.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
server_name z.jiankong.com;
root /usr/share/zabbix;
index index.php;
location = /favicon.ico {
log_not_found off;
}
location / {
try_files $uri $uri/ =404;
}
location /assets {
access_log off;
expires 10d;
}
location ~ /\.ht {
deny all;
}
location ~ /(api\/|conf[^\.]|include|locale) {
deny all;
return 404;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/tmp/php-cgi-71.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param DOCUMENT_ROOT /usr/share/zabbix;
fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
保存后检查配置并重新加载nginx配置,nginx-t && nginx -s reload
启动zabbix
/etc/init.d/zabbix_server start
/etc/init.d/zabbix_agentd start
访问站点,按步骤安装
https://z.jiankong.com/
提示我没有bcmath和ladp扩展,可以先通过rpm -qa|grep php找到安装的是什么版本的php,然后通过yum search php 查询并安装对应的扩展,查到后确认服务器上用的webtatic源,php版本是7.1,安装扩展:
yum install php71w-bcmath php71w-ldap
我安装后打开zabbix网页提示还是没有bcmath扩展,一番折腾后发现是因为安装扩展之后重启php-fpm有问题,yum install php71w-bcmath安装扩展的时候升级了php,从php7.1.6升级到7.1.33,升级后重启了,但是系统里还保留着升级前的php7.1.6在运行,就是升级的时候php文件已经被替换成最新版了,但是系统里运行的php因为没有正确关闭所以还一直运行这php7.1.6,因为已经升级了所以要运行升级后的版本才能正常加载扩展,杀掉进程后重新启动php-fpm,恢复。
继续在浏览器zabbix域名,按步骤配置即可,结束后确认没问题了就可以导入准备好的数据库了。导入完成后数据就恢复了。
接下来就是把新服务器IP添加到agent的配置文件里,然后重启agent,注意防火墙需要开。
后记
实际安装的时候碰到很多问题,因为要迁移的服务器上已经有了php和nginx,所以没办法像新买的服务器那样可以从头开始弄,编译过程会碰到很多依赖缺失的情况,比如缺失了Mysql library,需要安装mysql-devel,但是安装mysql-devel会有依赖关系,会装一些不会用到的,为了避免这个问题,就直接把包下载后强制安装,不安装依赖。还会碰到一些奇葩的问题,比如yum安装php扩展的时候把php版本也一起升级了,升级后打开zabbix配置页面发现还是提示缺少扩展,phpinfo里也不显示这个扩展,最后发现是因为php没有重启成功,用的一直是升级前的php(ps auxf|grep php里面会在php成后面加一段(deleted)表示文件已经删除,但是因为进程启动后加载到内存了,所以程序还在跑,但是文件已经没了,因为升级到最新版了),需要kill掉进程在重新开启php。