但是使用这样的一个双机主备是存在一些问题的, 就是需要采购两台云服务器, 价格比较贵, 如果主节点从来不发生故障的话, 所有的流量其实一致都是在主节点上的, 备用机,永远都用不上. 存在资源浪费的情况
为了解决双机主备存在的问题, 推出了双主热备
虚拟出两个虚拟IP, 两台Nginx互相为主备关系, 达成双主热备的架构
我是用的依旧是
主: 192.168.247.136
备: 192.168.247.137
虚拟IP: 140,141
140虚拟IP 主=136, 备=137
141虚拟IP 主=137, 备=136
! Configuration File for keepalived
global_defs {
# 路由ID, 当前安装Keepalived节点主机的标识符, 全局唯一
router_id keep_136
}
# 检测Nginx的进程
vrrp_script check_nginx_alive {
# 检测脚本
script "/etc/keepalived/check_nginx_alive_or_not.sh"
# 每2秒运行一次
interval 2
# 如果脚本运行成功, 则升级权重+10, 如果配置为-10, 那么脚本运行失败权重-10
weight 10
}
# 计算机的节点
vrrp_instance VI_1 {
# 节点状态, MASTER代表主节点 BACKUP代表备用节点
state MASTER
# 使用ens33网卡
interface ens33
# 虚拟路由ID, 保持MASTER和BACKUP一致
virtual_router_id 51
# 优先级/权重 100 谁的优先级高, 在MASTER宕机后, 谁就能成为MASTER
priority 100
# 主备之间的心跳周期 1秒
advert_int 1
# 认证授权, 防止非法节点的进入
authentication {
auth_type PASS
auth_pass 1111
}
# 追踪Nginx脚本
track_script {
check_nginx_alive
}
# 虚拟IP
virtual_ipaddress {
192.168.247.140
}
}
vrrp_instance VI_2 {
state BACKUP
interface ens33
virtual_router_id 52
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.247.141
}
}
! Configuration File for keepalived
global_defs {
# 主节点宕机后通知的邮箱
# notification_email {
# acassen@firewall.loc
# failover@firewall.loc
# sysadmin@firewall.loc
# }
# notification_email_from Alexandre.Cassen@firewall.loc
# smtp_server 192.168.200.1
# smtp_connect_timeout 30
# 路由ID, 当前安装Keepalived节点主机的标识符, 全局唯一
router_id keep_137
# vrrp_skip_check_adv_addr
# vrrp_strict
# vrrp_garp_interval 0
# vrrp_gna_interval 0
}
# 计算机的节点
vrrp_instance VI_1 {
# 节点状态, MASTER代表主节点 BACKUP代表备用节点
state BACKUP
# 使用ens33网卡
interface ens33
# 虚拟路由ID, 保持MASTER和BACKUP一致
virtual_router_id 51
# 优先级/权重 100 谁的优先级高, 在MASTER宕机后, 谁就能成为MASTER
priority 80
# 主备之间的心跳周期 1秒
advert_int 1
# 认证授权, 防止非法节点的进入
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟IP
virtual_ipaddress {
192.168.247.140
# 192.168.200.17
# 192.168.200.18
}
}
vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.247.141
}
}
如果是正式环境部署的话, 记得在137上加上nginx自动拉起脚本
136和137都重启
systemctl restart keepalived.service
136绑定了140
137绑定了141
访问140
140ok
访问141
141ok
手动停止136的Keepalived, 模拟故障
140自动切换为141, ok
启动140的Keepalived
自动切换回master, ok
手动停止137的Keepalived,模拟故障
141自动切换为140, ok
启动141的Keepalived
自动切回141, ok
成功完成双主热备架构