Keepalived + Nginx 实现高可用(双主热备) Web 负载均衡 安装测试笔记

时间:2022-12-19 10:37:41

Keepalived + Nginx 实现高可用(双主热备) Web 负载均衡 安装测试笔记

安装keepalived和nginx就不重复了,主要是keepalived的配置

主keepalived.conf 配置如下

! Configuration File for keepalived

global_defs {
router_id k-proxy
}

vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight 2
}
vrrp_instance VI_1 { #keepalived在同一virtual_router_id中priority(0-255)最大的会成为master,也就是接管VIP,当priority最大的主机发生故障后次priority将会接管
state MASTER #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器。注意这里的state指定instance(Initial)的初始状态,就是说在配置好后,这台服务器的初始状态就是这里指定的,但这里指定的不算,还是得要通过竞选通过优先级来确定。如果这里设置为MASTER,但如若他的优先级不及另外一台,那么这台在发送通告时,会发送自己的优先级,另外一台发现优先级不如自己的高,那么他会就回抢占为MASTER
interface eth0 #指定HA监测网络的接口。实例绑定的网卡,因为在配置虚拟IP的时候必须是在已有的网卡上添加的
mcast_src_ip 192.168.2.102 # 发送多播数据包时的源IP地址,这里注意了,这里实际上就是在哪个地址上发送VRRP通告,这个非常重要,一定要选择稳定的网卡端口来发送,这里相当于heartbeat的心跳端口,如果没有设置那么就用默认的绑定的网卡的IP,也就是interface指定的IP地址
virtual_router_id 51 #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
priority 150 #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
advert_int 1 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置验证类型和密码。主从必须一样
auth_type PASS #设置vrrp验证类型,主要有PASS和AH两种
auth_pass 1111 #设置vrrp验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
}
virtual_ipaddress { #VRRP HA 虚拟地址 如果有多个VIP,继续换行填写
192.168.2.150
}

track_script { #执行监控的服务。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!
chk_nginx #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
mcast_src_ip 192.168.2.103
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.151
}

track_script { #执行监控的服务。注意这个设置不能紧挨着写在vrrp_script配置块的后面(实验中碰过的坑),否则nginx监控失效!!
chk_nginx #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
}
}


备keepalived.conf 配置如下

! Configuration File for keepalived

global_defs {
router_id k-proxy
}

vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight 2
}

vrrp_instance VI_1 {
state BACKUP #标示状态为MASTER 备份机为BACKUP
interface eth0 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
mcast_src_ip 192.168.2.103
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}

track_script {
chk_nginx
}

virtual_ipaddress {
192.168.2.150
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 52
mcast_src_ip 192.168.2.102
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.2.151
}

track_script {
check_nginx #监控脚本
}
}


检查脚本配置如下/etc/keepalived/nginx_check.sh

# 如果进程中没有nginx,先进行重启nginx如果2秒后还是没起来则将keepalived进程kill掉 防止keeplived进程还在影响vip
#!/bin/bash
A=`ps -C nginx –no-header |wc -l` ## 查看是否有 nginx进程 把值赋给变量A
if [ $A -eq 0 ];then ## 如果没有进程值得为 零
/usr/local/nginx/sbin/nginx ##启动nginx
sleep 2 ##休眠2秒
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then ## 如果没有进程值得为 零
killall keepalived ## 则结束 keepalived 进程
fi
fi

 


启动两个机器
# service keepalived start
# ip a

Keepalived + Nginx 实现高可用(双主热备) Web 负载均衡 安装测试笔记

 

 

发现 192.168.2.102 有一个vip 192.168.2.150
192.168.2.103 有一个vip 192.168.2.151
如果关掉一台nginx 比如102上的nginx关闭了,会发现另150会漂移到 103机上去了 反之一样

Keepalived + Nginx 实现高可用(双主热备) Web 负载均衡 安装测试笔记