主机 | IP | 主机环境 |
---|---|---|
zabbix-server01(主) | 192.168.169.140 | keepalived: v1.3.5 sshpass: 1.06 zabbix server: 4.0.41 |
zabbix-server02(备) | 192.168.169.141 | keepalived: v1.3.5 sshpass: 1.06 zabbix server: 4.0.41 |
zabbix-agent | 192.168.169.142 | zabbix agent: 4.0.11 mysql: 5.5.68-MariaDB |
192.168.169.200 | keepalived 虚拟IP |
测试说明:
1)本次试验目的通过 keepalived 实现 zabbix server 的高可用
2)在一台 server down 机后通过 keepalived 将我们的另外一台 server 启动并持续提供服务,或者通过 keepalived 监测本机 server 是否 down 机,如果 down 机则将 server 启动
3)使用虚拟 IP 访问我们的 zabbix web 页面,在一台 server down 机时,因为我们是通过虚拟 IP 访问的,所以也不会停止访问
4)本次试验将数据库单独配置在一台机器上,两个 server 公用一个数据库,本次试验不涉及数据库的高可用及优化
# 从清华的开源镜像下载
wget https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm --no-check-certificate
rpm -ivh zabbix-release-4.0-2.el7.noarch.rpm
# rpm 参数解释:
# i 安装软件包
# v 显示附加信息
# h 安装时输出哈希标记(``#'')
# 修改配置文件
sed -i 's#http://repo.zabbix.com#https://mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
sed -i 's#gpgcheck=1#gpgcheck=0#g' /etc/yum.repos.d/zabbix.repo
# 或者使用 vim 修改
vim /etc/yum.repos.d/zabbix.repo
# 在文件中修改下载地址
:%s#http://repo.zabbix.com#https://mirrors.tuna.tsinghua.edu.cn/zabbix#g
# 修改校验
:%s#gpgcheck=1#gpgcheck=0#g
[zabbix]
name=Zabbix Official Repository - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
[zabbix-debuginfo]
name=Zabbix Official Repository debuginfo - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/$basearch/debuginfo/
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
gpgcheck=0
[zabbix-non-supported]
name=Zabbix Official Repository non-supported - $basearch
baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
gpgcheck=0
# 安装 zabbix server
yum install zabbix-server-mysql zabbix-web-mysql -y
yum install mariadb-server -y
# 启动数据库并设置开机自启
systemctl start mariadb.service
systemctl enable mariadb.service
# 对数据库进行简单的优化初始化
[root@zabbix ~]# mysql_secure_installation
# 创建 zabbix 数据库
[root@zabbix ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
# 创建 zabbix 数据库
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
# 数据库授权(本地访问)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by '123456';
Query OK, 0 rows affected (0.00 sec)
# 数据库授权(远程访问,本次试验 server 访问 mysql 就是远程访问)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@'192.168.169.%' identified by '123456';
# 说明:同时需要授权本地访问和远程访问
# 1)授权本地访问(zabbix@localhost)是因为授权 (zabbix@'%') 或者 ip 段(例:zabbix@'192.168.169.%'),都不包括 localhost,所以如果不授权本地权限,则不能在本地登陆
# 2)授权远程访问是因为本次试验 server 和 mysql 是分开的机器
# 导入数据,将 server 中 /usr/share/doc/zabbix-server-mysql*/ 目录下的 create.sql.gz 文件复制到 mysql 机器上,然后导入数据
scp [email protected]:/usr/share/doc/zabbix-server-mysql*/create.sql.gz ./
zcat create.sql.gz | mysql -uzabbix -p123456 zabbix
# 确认数据是否导入成功
mysql zabbix -e 'show tables;'
# 注意:在修改 server 配置文件时,server01 和 server02 是一样的
sed -i.bak 's/# SourceIP=/SourceIP=192.168.169.200/' /etc/zabbix/zabbix_server.conf
sed -i 's/# DBHost=localhost/DBHost=192.168.169.142/' /etc/zabbix/zabbix_server.conf
sed -i 's/# DBPassword=/DBPassword=123456/' /etc/zabbix/zabbix_server.conf
# 或者使用 vim 修改
vim /etc/zabbix/zabbix_server.conf
SourceIP=192.168.169.200 # 多IP地址情况下(本次试验配置了一个虚拟ip,所以server上会有两个ip地址),与其他服务器通信使用的源IP地址,即外部访问地址。这里就是本次配置的虚拟 IP
DBHost=192.168.169.142
DBName=zabbix
DBUser=zabbix
DBPassword=123456
# 注意,启动 server 时只需要启动 server01,因为他们公用一个数据库,肯定不能同时往数据库写数据,所以不能同时启动。
systemctl start zabbix-server
systemctl enable zabbix-server
sed -i.bak 's@# php_value date.timezone Europe/Riga@php_value date.timezone Asia/Shanghai@' /etc/httpd/conf.d/zabbix.conf
或者使用 vim 修改
vim /etc/httpd/conf.d/zabbix.conf
# 将文件中的时区修改为上海
Asia/Shanghai
# 启动 httpd
systemctl start httpd
systemctl enable httpd
yum install -y sshpass
# 可能需要先安装EPEL后再安装sshpass yum install epel-release
# 分别在 server01 和 server02 上安装 keepalived
yum -y install keepalived
# 修改 Keepalived 配置文件,将原本的 keepalived.conf 文件备份,新建 keepalived.conf 文件加入如下内容
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
# 注意:这个是 master(主机) 的配置文件
! Configuration File for keepalived # 这一行为注释
global_defs {
router_id server01 # router_id 机器标识,通常使用 hostname,相对具有唯一性,和备机区分开,不能使用同一个标识
}
vrrp_script chk_zabbix { # 定义一个检测脚本,在global_defs之外配置
script "/etc/keepalived/check_zabbix.sh" # 自己写的监测脚本
interval 2 # 每2s监测一次
weight 10 # 该参数用于指定当监测失效时,该设备的优先级会减少的值,该值为负表示减少
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_instance VI_1 { # 定义一个vrrp_install实例,名称为VI_1
state MASTER # 表示该实例的角色状态,有MASTER和BACKUP两种主备状态
interface ens33 # 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1
virtual_router_id 51 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
priority 150 # priority表示实例优先级,数字越大,优先级越高。master 的优先级必须大于 backup
advert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒
authentication { # 权限认证配置
auth_type PASS # 主要有 PASS 和 AH 两种
auth_pass 1111 # 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
}
virtual_ipaddress {
192.168.169.200 # 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
}
track_script { # 调用自定义的脚本
chk_zabbix
}
notify_master /etc/keepalived/to_master.sh # 指定当切换到 master 时,执行的脚本,即切换到 master 时要将 backup 的 server 关掉
}
# 该脚本作用为当主备发生切换或者回切时始终保持有虚ip的机器有zabbix服务而另一台无zabbix服务,保证对外提供服务的只有一台机器。
vim /etc/keepalived/to_master.sh
#!/bin/bash
sshpass -p 0 ssh -o StrictHostKeyChecking=no [email protected] "systemctl stop zabbix-server.service"
systemctl start zabbix-server.service
# 修改脚本执行权限
chmod u+x /etc/keepalived/to_master.sh
#! /bin/bash
# 当 zabbix server 服务 down 掉之后,通过 keepalived 检查,确认没有服务重新启动 zabbix server
zabbix_server=`ps -C zabbix_server --no-header | wc -l`
if [ $zabbix_server -gt 0 ];then
exit 1
else
systemctl start zabbix-server.service
fi
# 修改脚本执行权限
chmod u+x /etc/keepalived/check_zabbix.sh
# 注意:这个是 master(备机) 的配置文件
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived # 这一行为注释
global_defs {
router_id server02 # router_id 机器标识,通常使用 hostname,相对具有唯一性,和主机区分开,不能使用同一个标识
}
vrrp_script chk_zabbix { # 定义一个检测脚本,在global_defs之外配置
script "/etc/keepalived/check_zabbix.sh" # 自己写的监测脚本
interval 2 # 每2s监测一次
weight 10 # 该参数用于指定当监测失效时,该设备的优先级会减少的值,该值为负表示减少
fall 2 # 尝试两次都成功才成功
rise 2 # 尝试两次都失败才失败
}
vrrp_instance VI_1 { # 定义一个vrrp_install实例,名称为VI_1
state BACKUP # 表示该实例的角色状态,有MASTER和BACKUP两种主备状态
interface ens33 # 对外提供服务的网络接口,注意修改为自己的网卡名称,如 ens33,eth0,eth1
virtual_router_id 51 # 虚拟路由ID标识,主备服务器配置中相同实例的ID必须一致
priority 149 # priority表示实例优先级,数字越大,优先级越高。master 的优先级必须大于 backup
advert_int 1 # 设定 master 与 backup 负载均衡器之间同步检查的时间间隔,默认是秒
authentication { # 权限认证配置
auth_type PASS # 主要有 PASS 和 AH 两种
auth_pass 1111 # 验证密码,同一个 vrrp_instance 下 MASTER 和 BACKUP 密码必须相同
}
virtual_ipaddress {
192.168.169.200 # 虚拟IP地址;可以配置多个IP,每个IP占一行。注意,这里的IP就是在工作中访问 zabbix server 需要和域名绑定的ip
}
track_script { # 调用自定义的脚本
chk_zabbix
}
notify_master /etc/keepalived/to_backup.sh # 指定当切换到 backup 时,执行的脚本,切换到 backup 时将 master 的 server 关掉
}
vim /etc/keepalived/to_backup.sh
#!/bin/bash
sshpass -p 0 ssh -o StrictHostKeyChecking=no [email protected] "systemctl stop zabbix-server.service"
systemctl start zabbix-server.service
# 修改脚本执行权限
chmod u+x /etc/keepalived/to_backup.sh
#! /bin/bash
# 当 zabbix server 服务 down 掉之后,通过 keepalived 检查,确认没有服务重新启动 zabbix server
zabbix_server=`ps -C zabbix_server --no-header | wc -l`
if [ $zabbix_server -gt 0 ];then
exit 1
else
systemctl start zabbix-server.service
fi
# 修改脚本执行权限
chmod u+x /etc/keepalived/check_zabbix.sh
# 启动 keepalived
systemctl start keepalived.service
systemctl enable keepalived.service
# server01 查看虚拟 IP 地址
ip a
# server02 查看虚拟 IP 地址,此时 server01 是 master 所以 VIP 在 server01上
ip a
192.168.169.200/zabbix
# 测试过程中有个问题不太明白,在第一次通过 keepalived 切换 server 服务器时还会重新在 web 页面进行如下的配置,这里有些不明白。
这里注意填写数据库信息
# 清华源地址下载,可以自行选择不同版本
wget https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.11-1.el7.x86_64.rpm --no-check-certificate
rpm -ivh zabbix-agent-4.0.11-1.el7.x86_64.rpm
# 修改 zabbix_agent.conf 文件
Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server
sed -i.bak 's/^Server=127.0.0.1/Server=192.168.169.200/' /etc/zabbix/zabbix_agentd.conf
sed -i 's/^ServerActive=127.0.0.1/ServerActive=192.168.169.200/' /etc/zabbix/zabbix_agentd.conf
sed -i 's/^Hostname=Zabbix server/Hostname=192.168.169.142/' /etc/zabbix/zabbix_agentd.conf
# 或者使用 vim
vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.169.200
ServerActive=192.168.169.200
Hostname=192.168.169.142 # 配置成本机 IP 具有标示性
# 启动 agent
systemctl start zabbix-agent.service
systemctl enable zabbix-agent.service
在 server 中安装 agent 后修改配置文件同上,但是在 web 页面中要将主机页面的“接口”地址改为 server 的 IP 地址。因为它默认是 127.0.0.1 这样它就找不到数据
1)将 master 上的 keepalived.service 关闭,这时 VIP(虚拟ip) 就会到 backup 上面,server01 的 zabbix server 服务就会被关闭,server02 上的 zabbix server 启动继续提供服务,这里就是模拟 server01 服务器 down 机后 zabbix server 服务和 keepalived 关闭。
a.分别检查 server01 server02 上的服务状态
b.关闭 keepalived
c.再次检查 server01 上的服务状态
d.检查 server02 上的服务状态
2)server01 上的 keepalived 服务起来之后,因为它是 master 所以 VIP 又会回到 server01 机器上来,这样 server01 的 zabbix server 服务就会启动,server02 的 zabbix server 就会关闭
3)如果只是 server01 上的 zabbix server down 机,则会通过 keepalived 检查 server 是否存活,如没有 server 服务,就自动将服务启动