环境说明
系统信息 | 主机名 | IP |
---|---|---|
rhel8 | zabbix | 192.168.236.136 |
rhel8 | MASTER | 192.168.236.131 |
rhel8 | SLAVE | 192.168.236.135 |
keepalived安装
配置主keepalived
//关闭防火墙与SELINUX
[root@MASTER ~]# systemctl stop firewalld
[root@MASTER ~]# systemctl disable firewalld
[root@MASTER ~]# setenforce 0
[root@MASTER ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
//配置网络源
[root@MASTER ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
[root@MASTER ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@MASTER ~]# sed -i 's/\$releasever/8/g' /etc/yum.repos.d/CentOS-Base.repo
[root@MASTER ~]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@MASTER ~]# sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@MASTER ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
//安装keepalived
[root@MASTER ~]# yum -y install keepalived
在主备机上分别安装httpd
在master上安装httpd
[root@MASTER ~]# yum -y install httpd
[root@MASTER ~]# echo "web1" > /var/www/html/index.html
[root@MASTER ~]# systemctl start httpd
[root@MASTER ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
[root@MASTER ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
在slave上安装httpd
[root@SLAVE ~]# yum -y install httpd
[root@SLAVE ~]# echo "web2" > /var/www/html/index.html
[root@SLAVE ~]# systemctl start httpd
[root@SLAVE ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
[root@SLAVE ~]# systemctl enable --now httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
在备服务器上安装keepalived
//关闭防火墙与SELINUX
[root@SLAVE ~]# systemctl stop firewalld
[root@SLAVE ~]# systemctl disable firewalld
[root@SLAVE ~]# setenforce 0
[root@SLAVE ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
//配置网络源
[root@SLAVE ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
[root@SLAVE ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@SLAVE ~]# sed -i 's/\$releasever/8/g' /etc/yum.repos.d/CentOS-Base.repo
[root@SLAVE ~]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@SLAVE ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
keepalived监控httpd负载均衡机
keepalived通过脚本来监控httpd负载均衡机的状态
在master上编写脚本
[root@MASTER ~]# mkdir /scripts
[root@MASTER scripts]# vi check_n.sh
#!/bin/bash
httpd_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhttpd\b'|wc -l)
if [ $httpd_status -lt 1 ];then
systemctl stop keepalived
fi
[root@MASTER scripts]# chmod +x check_n.sh
[root@MASTER scripts]# vi notify.sh
#!/bin/bash
VIP=$2
sendmail (){
subject="${VIP}'s server keepalived state is translate"
content="`date +'%F %T'`: `hostname`'s state change to master"
echo $content | mail -s "$subject" 3091530433@qq.com
}
case "$1" in
master)
httpd_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhttpd\b'|wc -l)
if [ $httpd_status -lt 1 ];then
systemctl start httpd
fi
sendmail
;;
backup)
httpd_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhttpd\b'|wc -l)
if [ $httpd_status -gt 0 ];then
systemctl stop httpd
fi
;;
*)
echo "Usage:$0 master|backup VIP"
;;
esac
[root@MASTER scripts]# chmod +x notify.sh
在slave上编写脚本
[root@localhost ~]# mkdir /scripts
[root@localhost ~]# cd /scripts/
[root@SLAVE scripts]# vim notify.sh
#!/bin/bash
VIP=$2
sendmail (){
}
case "$1" in
master)
httpd_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhttpd\b'|wc -l)
if [ $httpd_status -lt 1 ];then
systemctl start httpd
fi
sendmail
;;
backup)
httpd_status=$(ps -ef|grep -Ev "grep|$0"|grep '\bhttpd\b'|wc -l)
if [ $httpd_status -gt 0 ];then
systemctl stop httpd
fi
;;
*)
echo "Usage:$0 master|backup VIP"
;;
esac
[root@SLAVE scripts]# chmod +x notify.sh
配置keepalived加入监控脚本的配置
配置主keepalived
[root@MASTER scripts]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb01
}
vrrp_script http_check {
script "/scripts/check_n.sh"
interval 1
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123123
}
virtual_ipaddress {
192.168.236.250
}
notify_master "/scripts/notify.sh master 192.168.236.250"
notify_backup "/scripts/notify.sh backup 192.168.236.250"
}
virtual_server 192.168.236.250 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.236.135 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.236.131 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
配置备keepalived
backup无需检测httpd是否正常,当升级为MASTER时启动httpd,当降级为BACKUP时关闭
[root@SLAVE ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id lb02
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 123123
}
virtual_ipaddress {
192.168.236.250
}
notify_master "/scripts/notify.sh master 192.168.236.250"
notify_backup "/scripts/notify.sh backup 192.168.236.250"
}
virtual_server 192.168.236.250 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.236.131 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.236.135 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
在master关闭httpd keepalived
[root@MASTER ~]# systemctl stop httpd keepalived
[root@MASTER ~]# ss -antl
State Recv-Q Send-Q
LISTEN 0 128
LISTEN 0 128
[root@MASTER ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:54:83:50 brd ff:ff:ff:ff:ff:ff
inet 192.168.236.131/24 brd 192.168.236.255 scope global dynamic noprefixroute ens160
valid_lft 984sec preferred_lft 984sec
inet 192.168.236.250/32 scope global ens160
valid_lft forever preferred_lft forever
inet6 fe80::a19f:e276:27fd:d19/64 scope link noprefixroute
valid_lft forever preferred_lft forever
//在slave查看
[root@SLAVE ~]# ss -antl
State Recv-Q Send-Q
LISTEN 0 128
LISTEN 0 128
LISTEN 0 128
[root@SLAVE ~]#
[root@SLAVE ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:6e:47:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.236.135/24 brd 192.168.236.255 scope global dynamic noprefixroute ens160
valid_lft 963sec preferred_lft 963sec
inet6 fe80::8340:128f:869c:a4db/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@SLAVE ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
//在SLAVE配置脚本
[root@SLAVE ~]# cd /scripts/
[root@SLAVE scripts]# vi check_keepalived.sh
if [ `ip a show ens33 |grep 192.168.236.250|wc -l` -ne 0 ]
then
echo "1"
else
echo "0"
fi
[root@SLAVE ~]# tar xf zabbix-5.2.0.tar.gz
[root@SLAVE ~]# cd zabbix-5.2.0
[root@SLAVE zabbix-5.2.0]# yum -y install gcc gcc-c++ pcre-devel
[root@SLAVE zabbix-5.2.0]# useradd -r -M -s /sbin/nologin zabbix
[root@SLAVE zabbix-5.2.0]# make install
[root@SLAVE ~]# cd /usr/local/etc/
[root@SLAVE etc]# pwd
/usr/local/etc
[root@SLAVE etc]# vi zabbix_agentd.conf
zabbix页面部署
配置主机组
添加主机
添加触发器
添加媒介
在master关闭keepalived服务,看是否能触发
[root@localhost ~]# systemctl stop keepalived