Zabbix篇- zabbix-server+keepalived+rsync+inotify高可用架构与部署

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服务高可用测试完成。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是Kubernetes部署Zabbix Server的详细步骤和YAML文件: 1. 创建PV和PVC 在Kubernetes上部署Zabbix Server,需要使用持久卷(PV)和持久卷声明(PVC)来存储数据。下面是一个示例PVC YAML文件: ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: zabbix-db-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` 使用kubectl命令创建PVC: ``` kubectl apply -f zabbix-db-pvc.yaml ``` 2. 创建ConfigMap Zabbix Server需要使用一些配置文件,可以将这些文件打包为一个ConfigMap。下面是一个示例ConfigMap YAML文件: ``` apiVersion: v1 kind: ConfigMap metadata: name: zabbix-server-config data: zabbix_server.conf: | DBHost=zabbix-db DBName=zabbix DBUser=zabbix DBPassword=zabbix AlertScriptsPath=/usr/lib/zabbix/alertscripts ExternalScripts=/usr/lib/zabbix/externalscripts ``` 使用kubectl命令创建ConfigMap: ``` kubectl apply -f zabbix-server-configmap.yaml ``` 3. 创建Deployment和Service 下面是一个示例Deployment YAML文件: ``` apiVersion: apps/v1 kind: Deployment metadata: name: zabbix-server spec: replicas: 1 selector: matchLabels: app: zabbix-server template: metadata: labels: app: zabbix-server spec: containers: - name: zabbix-server image: zabbix/zabbix-server-mysql:latest volumeMounts: - name: zabbix-db-data mountPath: /var/lib/mysql - name: zabbix-server-config mountPath: /etc/zabbix/zabbix_server.conf subPath: zabbix_server.conf env: - name: MYSQL_DATABASE value: zabbix - name: MYSQL_USER value: zabbix - name: MYSQL_PASSWORD value: zabbix - name: MYSQL_HOST value: zabbix-db - name: MYSQL_PORT value: "3306" ports: - containerPort: 10051 volumes: - name: zabbix-db-data persistentVolumeClaim: claimName: zabbix-db-pvc - name: zabbix-server-config configMap: name: zabbix-server-config ``` 使用kubectl命令创建Deployment: ``` kubectl apply -f zabbix-server-deployment.yaml ``` 下面是一个示例Service YAML文件: ``` apiVersion: v1 kind: Service metadata: name: zabbix-server spec: selector: app: zabbix-server ports: - name: zabbix port: 10051 protocol: TCP targetPort: 10051 ``` 使用kubectl命令创建Service: ``` kubectl apply -f zabbix-server-service.yaml ``` 这样,Zabbix Server就成功部署到了Kubernetes上。可以使用kubectl命令查看Deployment和Service状态: ``` kubectl get deployments kubectl get services ``` 如果一切正常,应该能够看到Zabbix Server的Deployment和Service都处于“运行中”状态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值