1 引言
目前刚刚接触zabbix监控,不知道对于生产环境是否需要将server配置成高可用架构。但是理论上来说,为了避免单点故障还是需要配置高可用的。因而借用大佬的文章搭建一次试试,将遇到的问题记录成本篇笔记。大佬的原文链接如下:
http://blog.itpub.net/31544156/viewspace-2286615/
- 架构如下:
说明:
主备机通过inotify+rsync实现文件同步,通过mysql主主复制实现数据同步,同一时刻只有一台服务器能对外提供zabbix服务,keepalived用来监控Zabbix Server进程和MySQL进程,以在主机进程崩溃的情况下切换到备机,web端登陆虚ip访问,被监控主机通过配置虚ip来完成监控。
2 基础环境安装
- 1.安装准备
操作系统为CentOS 7.5.1804;
zabbix为zabbix-server-mysql-3.4.15-1.el7.x86_64;
mysql为mysql-community-server-5.7.24-1.el7.x86_64;
inotify为inotify-tools-3.14-8.el7.x86_64;
rsync为rsync-3.1.2-4.el7.x86_64;
expect为expect-5.45-14.el7_1.x86_64;
keepalived为keepalived-1.3.5-6.el7.x86_64;
- 注意事项
1)主机为node3,ip为172.21.74.231;备机为node4,ip为172.21.74.223。
2)测试时需要保证DNS解析正常——可以在各个节点写好hosts文件
3)在exp.sh中的password是node3/node4操作系统的root密码
4)该架构的稳定性和性能还需要进一步测试。稳定性测试关注MySql的数据同步问题。
- 2.zabbix安装
- 2.1. 安装源码库配置部署包
这个部署包包含了yum配置文件:
[root@node3 ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
- 2.2. 安装 Zabbix-server 部署包
[root@node3 ~]# yum -y install zabbix-server-mysql zabbix-web-mysql
- 2.3. 安装 MySQL 数据库
2.3.1 下载并安装 MySQL 官方的 Yum Repository
[root@node3 ~]# rpm -ivh https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
2.3.2 查看当前可用的 Mysql 安装源
[root@node3 ~]# yum repolist enabled | grep “mysql.-community.”
mysql-connectors-community/x86_64 MySQL Connectors Community 74
mysql-tools-community/x86_64 MySQL Tools Community 74
mysql57-community/x86_64 MySQL 5.7 Community Server 307
2.3.3 安装 MySQL 数据库
[root@node3 ~]# yum -y install mysql-community-server
2.3.4 启动 mysql 服务并设置开机启动
[root@node3 ~]# systemctl start mysqld.service
[root@node3 ~]# systemctl enable mysqld.service
2.3.5 登陆 mysql
安装好后,会在my.cnf文件中自动生成一个密码
[root@node3 cache]# cat /var/log/mysqld.log | grep password
2018-12-21T02:20:00.716114Z 1 [Note] A temporary password is generated for root@localhost: LivE-h8YEq9e
[root@node3 ~]# mysql -uroot -p
输入密码 “ )> LivE-h8YEq9e ”
2.3.6 修改密码规则(默认密码规则太复杂不容易记忆)
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.01 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
2.3.7 重置密码(登录数据库后需首先重置密码才能进行后续操作)
mysql> alter user ‘root’@‘localhost’ identified by ‘Root$1036’;
Query OK, 0 rows affected, 1 warning (0.00 sec)
2.3.8 创建数据库和 zabbix 用户并授权
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by ‘zabbix’;
Query OK, 0 rows affected, 1 warning (0.00 sec)
2.3.9 导入初始架构( Schema )和数据
#cd /usr/share/doc/zabbix-server-mysql-3.4.15/
#zcat create.sql.gz | mysql -uzabbix -pzabbix -D zabbix
mysql: [Warning] Using a password on the command line interface can be insecure.
执行过程中会有一个关于密码的告警,忽略。
查看执行结果:
mysql> select count(*) tables,table_schema from information_schema.tables where table_schema = ‘zabbix’;
一共有140张表
- 2.4. 启动 Zabbix Server 进程
2.4.1 在 zabbix_server.conf 中编辑数据库配置
修改SourceIP
[root@node3 zabbix]# sed -i ‘s/^ *# SourceIP=./SourceIP=172.21.74.234/g’ /etc/zabbix/zabbix_server.conf
注释DBHost:
[root@node3 zabbix]# sed -i ‘s/^ *# DBHost=./DBHost=localhost/g’ /etc/zabbix/zabbix_server.conf
修改zabbix密码:
[root@node3 zabbix]# sed -i ‘s/^ *# DBPassword=./DBPassword=zabbix/g’ /etc/zabbix/zabbix_server.conf
2.4.2 修改 zabbix 安装目录属主和权限
[root@node3 zabbix]# chown -R zabbix:zabbix /etc/zabbix/
[root@node3 zabbix]# chmod -R 755 /etc/zabbix/
2.4.3 启动 zabbix-server 服务,并设置开机自启
[root@node3 ~]# systemctl restart zabbix-server
[root@node3 ~]# systemctl enable zabbix-server
注意为了防止开机启动时主备都存在 zabbix 服务,要阻止备端的 zabbix 开机启动:
[root@node4 ~]# systemctl disable zabbix-server
- 2.5. 编辑 Zabbix 前端的 PHP 配置
2.5.1 设置时区为 Asia/Shanghai :
[root@node3 ~]# sed -i.bak ‘s/^ *# *php_value date.timezone Europe/Riga/php_value date.timezone Asia/Shanghai/g’ /etc/httpd/conf.d/zabbix.conf
2.5.2 启动 apache 服务,并设置开机自启
[root@node3 conf.d]# systemctl restart httpd
[root@node3 conf.d]# systemctl enable httpd
- 2.6. 登陆 zabbix
访问地址: http://localhost/zabbix
下一步:
下一步:
输入密码 “ zabbix ” ,下一步:
name填写为 ‘ node3 ’ ,host和port默认,下一步:
信息汇总确认,下一步:
下载配置文件并另存为 ‘ /etc/zabbix/web/zabbix.conf.php ’ ,注意属主为zabbix:zabbix,权限为755:
[root@node3 ~]# cd /etc/zabbix/web/
[root@node3 web]# ll
total 8
-rwxr-xr-x 1 zabbix zabbix 1036 Nov 12 18:50 maintenance.inc.php
-rwxr-xr-x 1 zabbix zabbix 420 Dec 21 11:01 zabbix.conf.php
[root@node3 web]# more zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = 'localhost';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = 'zabbix';
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';
$ZBX_SERVER = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'node3';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
单击 ‘ Finish ’ 跳转:
配置完成,登陆web主页:
初始用户名密码为’Admin/zabbix’
node3完成zabbix安装,node4按同样步骤安装即可。
- 3.安装expect
expect用来远程登录主机并发送执行命令。
主备机安装expect工具
[root@node3 keepalived]# yum -y install expect
[root@node4 keepalived]# yum -y install expect
- 4.Keepalived安装
- 4.1.keepalived 安装
分别在主备机执行如下操作:
[root@node3 ~]# yum -y install keepalived
- 4.2.keepalived 配置
主机配置如下:
[root@node3 ~]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lvs-nginx01 #router_id 机器标识,通常为 hostname ,但不一定非得是 hostname 。故障发生时,邮件通知会用到。
}
vrrp_script chk_zabbix {
script “/etc/keepalived/check.sh zabbix_server”
interval 2
weight 30
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_script chk_mysql {
script “/etc/keepalived/check.sh mysqld”
interval 2
weight 20
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_instance VI_1 { #vrrp 实例定义部分
state MASTER # 设置 lvs 的状态, MASTER 和 BACKUP 两种,必须大写
interface ens33 # 设置对外服务的接口
virtual_router_id 100 # 设置虚拟路由标示,这个标示是一个数字,同一个 vrrp 实例使用唯一标示
priority 100 # 定义优先级,数字越大优先级越高,在一个 vrrp——instance 下, master 的优先级必须大于 backup
advert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,单位是秒
authentication { # 设置验证类型和密码
auth_type PASS # 主要有 PASS 和 AH 两种
auth_pass 1111 # 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
}
virtual_ipaddress { # 设置虚拟 ip 地址,可以设置多个,每行一个
172.21.74.234
}
track_script {
chk_zabbix
}
track_script {
chk_mysql
}
notify_master “/etc/keepalived/zabbix.sh” # 指定当切换到 master 时,执行的脚本
notify_backup “systemctl stop zabbix-server” # 指定当切换到 backup 时,执行的脚本
}
备机配置如下:
[root@node4 ~]# more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lvs-nginx01 #router_id 机器标识,通常为 hostname ,但不一定非得是 hostname 。故障发生时,邮件通知会用到。
}
vrrp_script chk_zabbix {
script “/etc/keepalived/check.sh zabbix_server”
interval 2
weight 5
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_script chk_mysql {
script “/etc/keepalived/check.sh mysqld”
interval 2
weight 45
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_instance VI_1 { #vrrp 实例定义部分
state BACKUP # 设置 lvs 的状态, MASTER 和 BACKUP 两种,必须大写
interface ens33 # 设置对外服务的接口
virtual_router_id 100 # 设置虚拟路由标示,这个标示是一个数字,同一个 vrrp 实例使用唯一标示
priority 90 # 定义优先级,数字越大优先级越高,在一个 vrrp——instance 下, master 的优先级必须大于 backup
advert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,单位是秒
authentication { # 设置验证类型和密码
auth_type PASS # 主要有 PASS 和 AH 两种
auth_pass 1111 # 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
}
virtual_ipaddress { # 设置虚拟 ip 地址,可以设置多个,每行一个
172.21.74.234
}
track_script {
chk_zabbix
}
track_script {
chk_mysql
}
notify_master “/etc/keepalived/zabbix.sh” # 指定当切换到 master 时,执行的脚本
notify_backup “systemctl stop zabbix-server” # 指定当切换到 backup 时,执行的脚本
}
注意主备中chk_zabbix和chk_mysql的weight值。该设置目的是保证主机的zabbix或者mysql服务异常时keepalived能正常发生切换,并且当主机的zabbix和mysql服务重新正常启动时keepalived能够回切。
vrrp_script中的脚本(主备机相同):
[root@node3 keepalived]# more check.sh
#! /bin/bash
zabbix_server=`ps -C zabbix_server --no-header | wc -l`
mysqld=`ps -C mysqld --no-header | wc -l`
case $1 in
zabbix_server)
if [ $zabbix_server -gt 0 ];then
exit 0
else
exit 1
fi
;;
mysqld)
if [ $mysqld -gt 0 ];then
exit 0
else
exit 1
fi
;;
esac
该脚本为判断zabbix和mysql服务的状态。
notify_master和notify_backup执行的脚本(主备机除了ip不同外,其他相同):
[root@node3 keepalived]# more zabbix.sh
#! /bin/bash
systemctl start zabbix-server
/etc/keepalived/exp.sh 172.21.74.223
[root@node4 keepalived]# more zabbix.sh
#! /bin/bash
systemctl start zabbix-server
/etc/keepalived/exp.sh 172.21.74.231
该脚本作用为当主备发生切换或者回切时始终保持有虚ip的机器有zabbix服务而另一台无zabbix服务,保证对外提供服务的只有一台机器。(若两台服务器都提供zabbix服务则每一次事件都会触发两次告警)
主备机上exp.sh脚本:
[root@node3 web]# more /etc/keepalived/exp.sh
#!/usr/bin/expect -f
set ip [lindex $argv 0 ]
set timeout 10
spawn ssh root@$ip
expect {
"*yes/no" { send "yes\r"; exp_continue}
"*password:" { send "Root\$1036\r";exp_continue }
}
expect "#*"
send "systemctl stop zabbix-server\r"
send "exit\r"
expect eof
该脚本作用为当master keepalived崩溃导致主备切换时,notify_backup脚本不会执行,此时造成主备机器同时有zabbix服务。因此当slave切换为master时,拉起zabbix-server服务,同时远程到备机kill掉zabbix进程。
- 4.3. 主备机分别重启 keepalived 服务并加入启动服务
[root@node3 ~]# systemctl restart keepalived
[root@node3 ~]# systemctl enable keepalived
[root@node4 ~]# systemctl restart keepalived
[root@node4 ~]# systemctl enable keepalived
至此完成zabbix-server、keepalived安装,通过虚拟IP访问 http://172.21.74.234/zabbix/
3 文件及数据同步
- 1.mysql数据库同步
- 1.1. 编辑配置文件 /etc/my.cnf
node3:
[root@node3 ~]# more /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id=1 # 保证每个服务器不一样
log-bin=mysql-bin # 开启 bin 日志
auto-increment-increment = 2 # 步进值 auto_imcrement 。一般有 n 台主 MySQL 就填 n
auto-increment-offset = 1 # 起始值。一般填第 n 台主 MySQL 。此时为第一台主 MySQL
binlog_format = mixed # 设置 binlog 格式为 mixed
sync_binlog=1 # 事务特性每 1 次事务提交
binlog-do-db=zabbix # 同步的据库名
binlog-ignore-db=mysql # 不同步数据库名
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
replicate-do-db=zabbix # 需要复制的数据库
replicate-ignore-db=mysql # 不需要复制的数据库
replicate-ignore-db=sys
replicate-ignore-db=performance_schema
replicate-ignore-db=information_schema
node4:
[root@node4 ~]# more /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id=2 # 保证每个服务器不一样
log-bin=mysql-bin # 开启 bin 日志
auto-increment-increment = 2 # 步进值 auto_imcrement 。一般有 n 台主 MySQL 就填 n
auto-increment-offset = 2 # 起始值。一般填第 n 台主 MySQL 。此时为第一台主 MySQL
binlog_format = mixed # 设置 binlog 格式为 mixed
sync_binlog=1 # 事务特性每 1 次事务提交
binlog-do-db=zabbix # 同步的据库名
binlog-ignore-db=mysql # 不同步数据库名
binlog-ignore-db=sys
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
replicate-do-db=zabbix # 需要复制的数据库
replicate-ignore-db=mysql # 不需要复制的数据库
replicate-ignore-db=sys
replicate-ignore-db=performance_schema
replicate-ignore-db=information_schema
分别重启mysql服务:
[root@node3 ~]# systemctl restart mysqld
[root@node4 ~]# systemctl restart mysqld
- 1.2. 新建备份用户
node3上新建备机可以登录的MySQL用户 ‘ zabbix223 ’ :
mysql> GRANT REPLICATION SLAVE ON . TO ‘zabbix223’@‘172.21.74.223’ IDENTIFIED BY ‘zabbix223’;
mysql> FLUSH PRIVILEGES;
node4上新建主机可以登录的MySQL用户 ‘ zabbix231 ’ :
mysql> GRANT REPLICATION SLAVE ON . TO ‘zabbix231’@‘172.21.74.231’ IDENTIFIED BY ‘zabbix231’;
mysql> FLUSH PRIVILEGES;
- 1.3. 查看二进制日志名和位置
mysql> show master status;
node3:
node4:
- 1.4. 启动同步
1.4.1 主从同步
构建node3到node4的主从同步
1)以下操作都在node4上执行:
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘172.21.74.231’,
-> MASTER_USER=‘zabbix223’,
-> MASTER_PASSWORD=‘zabbix223’,
-> MASTER_LOG_FILE=‘mysql-bin.000001’,
-> MASTER_LOG_POS=616;
Query OK, 0 rows affected, 2 warnings (0.38 sec)
2)开启复制:
mysql> START SLAVE;
3)查看主从复制是否配置成功:
mysql> SHOW SLAVE STATUS\G
Slave_IO_Running: YES和Slave_SQL_Running状态都为 ‘ Yes ’ ,复制状态正常。
1.4.2 主主同步
再做一次node4到node3的主从同步即完成了主主同步
以下操作都在node3上执行:
mysql> CHANGE MASTER TO
-> MASTER_HOST=‘172.21.74.223’,
-> MASTER_USER=‘zabbix231’,
-> MASTER_PASSWORD=‘zabbix231’,
-> MASTER_LOG_FILE=‘mysql-bin.000001’,
-> MASTER_LOG_POS=37438;
Query OK, 0 rows affected, 2 warnings (0.46 sec)
开启复制:
mysql> START SLAVE;
查看主从复制是否配置成功:
mysql> SHOW SLAVE STATUS\G
Slave_IO_Running: YES和Slave_SQL_Running状态都为 ‘ Yes ’ ,复制状态正常。
主主复制配置完成。
- 2.文件同步
由于zabbix-server两台主机配置文件需实时同步,所以采用inotify工具对同步数据目录信息的监控,结合rsync完成对数据信息的实时同步。
- 2.1.Rsync 安装
2.1.1.rsync 安装
node3和node4上执行:
[root@node3 ~]# yum -y install rsync
[root@node4 ~]# yum -y install rsync
2.1.2.rsync 配置
node3配置如下:
[root@node3 ~]# cd /etc && ll|grep rsync
注意pwd文件的权限为600
[root@node3 ~]# more /etc/rsyncd.conf
uid=root
gid=root
max connections=100
use chroot=true
log file=/var/log/rsyncd.log
motd file = /etc/rsyncd.motd
transfer logging = true
hosts allow= 172.21.74.223
[zabbix]
path=/etc/zabbix/
exclude = web
comment = etc zabbix
read only = no
list = yes
auth users = root
secrets file=/etc/rsyncd.pwd
[web1]
path=/etc/httpd/conf/
comment = httpd conf
read only = no
list = yes
auth users = root
secrets file=/etc/rsyncd.pwd
[web2]
path=/etc/httpd/conf.d/
comment = httpd conf.d
read only = no
list = yes
auth users = root
secrets file=/etc/rsyncd.pwd
node4配置如下:
rsyncd.conf文件与主机相同,只是 ‘ hosts allow= 172.21.74.231 ’
同步的文件为/etc/zabbix/(不包括web)、/etc/httpd/conf/和/etc/httpd/conf.d/,可根据实际情况增减。
2.1.3. 启动 rsync
主备机上同时运行:
[root@node3 ~]# nohup rsync --daemon --config=/etc/rsyncd.conf &
[root@node4 ~]# nohup rsync --daemon --config=/etc/rsyncd.conf &
2.1.4. 参数说明
uid=root # 服务器端传输文件时,要发哪个用户和用户组来执行
gid=root # 服务器端传输文件时,要发哪个用户和用户组来执行
max connections=100 # 客户端最多连接数
use chroot=true # 用 chroot ,在传输文件之前,服务器守护程序在将 chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在 rsync 服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容
log file=/var/log/rsyncd.log #rsync 服务器的日志
motd file=/etc/rsyncd.motd # 定义 motd file 路径, rsyncd.motd 内容是定义服务器信息的,用户登录时会看到这个信息
transfer logging = true # 传输文件日志
hosts allow= 172.21.74.223 # 允许的 ip 地址
[zabbix] # 模块名
path=/etc/zabbix/ # 同步的目录
exclude = web # 同步目录中去除的目录,即 web 不同步
comment = etc zabbix # 注释,注释内容可自己定义,起提示作用
read only = no # 只读选择,如为 yes 则不让客户端上传文件到服务器上
list = yes # 服务器上提供同步数据的目录是否显示
auth users = root # 认证用户是 root
secrets file=/etc/rsyncd.pwd # 密码文件保存路径,注意此文件的密码要与 223 上的 rsyncd.pwd2 文件中密码相同
注意:配置文件里不能有注释信息
2.1.5. 开机自启动
主备机分别执行:
[root@node3 ~]# sed -i ‘KaTeX parse error: Expected 'EOF', got '#' at position 78: … [root@node4 ~]#̲ sed -i 'a rsync --daemon --config=/etc/rsyncd.conf’ /etc/rc.d/rc.local
- 2.2.inotify
2.2.1.inotify 安装
主备机同时执行:
添加eprl源:
[root@node3 /]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
安装inotify:
[root@node3 /]# yum -y install inotify-tools
2.2.2. 编写监控同步脚本
[root@node3 ~]# more /root/scripts/inotify.sh
#!/bin/bash
ZabbixPath=/etc/zabbix/
WebPath=/etc/httpd/conf/
WebPath2=/etc/httpd/conf.d/
Server=172.21.74.223
/usr/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M’ --format ‘%T %w%f%e’ -e close_write,delete,create,attrib,move $WebPath $WebPath2 $ZabbixPath |
while read line
do
if [[ $line =~ $ZabbixPath ]];then
rsync -vzrtopg --progress --delete Z a b b i x P a t h r o o t @ ZabbixPath root@ ZabbixPathroot@Server::zabbix --password-file=/etc/rsyncd.pwd2
elif [[ $line =~ $WebPath2 ]];then
rsync -vzrtopg --progress --delete W e b P a t h 2 r o o t @ WebPath2 root@ WebPath2root@Server::web2 --password-file=/etc/rsyncd.pwd2
elif [[ $line =~ $WebPath ]];then
rsync -vzrtopg --progress --delete W e b P a t h r o o t @ WebPath root@ WebPathroot@Server::web1 --password-file=/etc/rsyncd.pwd2
else
echo $line >> /var/log/inotify.log
fi
done
该脚本首先是用inotify分别监控 ‘ $WebPath $WebPath2 $ZabbixPath ’ 三个文件的状态,若有变化则分别触发对应的rsync同步。备机配置同主机,只是 ‘ Server ’ 项为231。
注意Path后的路径有 ‘ / ’ 。
2.2.3. 参数说明
-m, –monitor # 始终保持事件监听
-r, –recursive # 递归监控目录数据信息变化
-q, –quiet # 输出信息少(只打印事件信息)
–timefmt # 指定时间输出格式
–format # 打印使用指定的输出类似格式字符串,即实际监控输出内容
-e # 指定监听指定的事件,如果省略,表示所有事件都进行监听
close_write # 文件或目录关闭,在写入模式打开之后关闭的
delete # 文件或目录被删除在监控目录中
create # 文件或目录创建在监控目录中
attrib # 文件或目录属性改变
move # 文件或目录不管移动到或是移出监控目录都触发事件
2.2.4. 主备机分别启动监控同步脚本
[root@node3 ~]# nohup sh /root/scripts/inotify.sh &
[root@node4 ~]# nohup sh /root/scripts/inotify.sh &
4 高可用测试
- 1.文件及数据同步测试
- 1.1. 文件同步测试
主机上执行新建目录操作:
[root@node3 ~]# cd /etc/httpd/conf && mkdir dropme1 && cd /etc/httpd/conf.d/ && mkdir dropme2 && cd /etc/zabbix/ && mkdir dropme3
查看备机对应文件:
发现自动生成了dropme1、dropme2、dropme3
在备机上删除新建的drop文件,在主机上查找相应文件,发现文件被删除:
[root@node4 /]# find /* -name dropme* |xargs rm -rf {}
[root@node3 ~]# find /* -name dropme*
文件同步测试成功
- 1.2. 数据库同步测试
登陆主机web控制台,新增主机,查看备机是否同步。
查看备机是否同步:
同样的如果在备机上删除监控主机的话主机也会对应的自动删除。
数据同步测试完成。
- 2.高可用测试
- 2.1. 测试前配置
2.1.1. 服务端配置
修改服务端配置,将主备机 ‘ SourceIP ’ 项修改为虚ip:
[root@node3 ~]# sed -i ‘s/^ *# SourceIP=./SourceIP=172.21.74.234/g’ /etc/zabbix/zabbix_server.conf
[root@node4 ~]# sed -i ‘s/^ *# SourceIP=./SourceIP=172.21.74.234/g’ /etc/zabbix/zabbix_server.conf
该操作主备机都执行
2.1.2. 客户端配置
修改客户端配置,将 ‘ Server ’ 项也修改为虚ip:
[root@zabbix-agent ~]# sed -i ‘s/^ *# Server=./Server=172.21.74.234/g’ /etc/zabbix/zabbix_agentd.conf
zabbix-server端启用SourceIP,被监控的主机Server参数也配置为虚ip而不是实际地址。
高可用测试
正常状态下主机有zabbix、mysql、inotify、rsync、keepalived五个服务,备机只有mysql、inotify、rsync、keepalived四个服务,这也是高可用的初始状态。
- 2.2.mysql 异常测试
停止主机mysql服务,模拟异常
[root@node3 ~]# systemctl stop mysqld
[root@node3 keepalived]# ps -C mysqld --no-header | wc -l
查看主机日志/var/log/message:
发现发生切换,检查zabbix进程:
[root@node3 keepalived]# ps -C zabbix_server --no-header | wc -l
发现主机zabbix进程被kill,查看备机状态:
虚ip已经漂移至备机,并且启动了zabbix服务,web访问:
访问正常.
回切测试:
重拉主机的zabbix和mysql进程,查看是否回切
发现虚ip回切且zabbix和mysql服务正常,查看备机zabbix状态:
[root@node4 ~]# ps -C zabbix_server --no-header | wc -l
此时备机zabbix服务挂起。mysql高可用测试完成
- 2.3.zabbix 异常测试
停止主机zabbix服务,模拟异常
[root@node3 keepalived]# systemctl stop zabbix-server
[root@node3 keepalived]# ps -C zabbix_server --no-header | wc -l
查看主机日志/var/log/message:
发现发生切换,查看备机状态和zabbix进程:
主备切换完成,回切:
启动主机zabbix服务:
[root@node3 keepalived]# systemctl start zabbix-server
查看主机日志:
发现完成回切, zabbix服务高可用测试完成。