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。