24-Nginx高可用(基于Keepalived实现双主热备)
双机主备存在的问题
但是使用这样的一个双机主备是存在一些问题的, 就是需要采购两台云服务器, 价格比较贵, 如果主节点从来不发生故障的话, 所有的流量其实一致都是在主节点上的, 备用机,永远都用不上. 存在资源浪费的情况
为了解决双机主备存在的问题, 推出了双主热备
双主热备
虚拟出两个虚拟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自动拉起脚本
重启Keepalived并进行测试
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
成功完成双主热备架构