nginx+keepalived 实现高可用
上一篇写了nginx的配置,nginx确实能帮咱们分配到多个应用中,但是仍然有一个问题,当我其中一个机器down了,比如意外关机了,那么仍然是访问不了了,必须用户手动切换地址才可以访问,所以需要配置高可用,当其中一个nginx意外down了,则自动切换为另外一台nginx上面,即自动主备切换
此时就需要用到 keepalived
具体想了解keepalived的原理以及作用,请参考官网:https://www.keepalived.org/index.html
下面进行keepalived的安装和配置,配合nginx实现高可用
1、安装keepalived
系统为:centos7
直接进行在线安装:
yum install keepalived
离线安装参考:https://www.cnblogs.com/hanpengblog/p/11330706.html
2、配置keepalived
安装完成后,配置文件为:/etc/keepalived
vim keepalived.conf
以下是我配置的所有内容:
主节点:
1 #配置文件 2 ! Configuration File for keepalived 3 4 global_defs { 5 #从服务器最改一下这个 6 router_id node1 #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息 7 } 8 #监控服务.NGINX mysql等 9 vrrp_script chk_nginx { 10 script "/etc/keepalived/health_check.sh" 11 #每2s检查一次 12 interval 2 13 #每次检查-20 14 weight -20 15 } 16 vrrp_instance VI_1 { 17 ##主从设置 MASTER/BACKUP 18 state MASTER 19 #网卡名称 20 interface enp0s8 21 #同一个集群下这个 router_id是一样的 22 virtual_router_id 51 23 #本机的ip,需要修改 24 mcast_src_ip 192.168.0.109 25 #优先级,从节点 配置,需要小于主节点 26 priority 100 27 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 28 advert_int 1 29 #认证的密码 30 authentication { 31 auth_type PASS 32 #设定授权密码,密码相同的为一个集群 33 auth_pass root 34 } 35 #触发的脚本 36 track_script { 37 chk_nginx #检测脚本,上面配置的 38 } 39 #虚拟ip地址 40 virtual_ipaddress { 41 192.168.0.120 42 } 43 }
备节点:
1 #配置文件 2 ! Configuration File for keepalived 3 4 global_defs { 5 #从服务器最改一下这个 6 router_id node2 #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息 7 } 8 #监控服务.NGINX mysql等 9 vrrp_script chk_nginx { 10 script "/etc/keepalived/health_check.sh" 11 #每2s检查一次 12 interval 2 13 #每次检查-20 14 weight -20 15 } 16 vrrp_instance VI_1 { 17 ##主从设置 MASTER/BACKUP 18 state BACKUP 19 #网卡名称 20 interface enp0s8 21 #同一个集群下这个 router_id是一样的 22 virtual_router_id 51 23 #本机的ip,需要修改 24 mcast_src_ip 192.168.0.109 25 #优先级,从节点 配置,需要小于主节点 26 priority 99 27 #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒 28 advert_int 1 29 #认证的密码 30 authentication { 31 auth_type PASS 32 #设定授权密码,密码相同的为一个集群 33 auth_pass root 34 } 35 #触发的脚本 36 track_script { 37 chk_nginx #检测脚本,上面配置的 38 } 39 #虚拟ip地址 40 virtual_ipaddress { 41 192.168.0.120 42 } 43 }
说明:
上面的内容基本已经写了注释,主备又那些需要注意的呢
1、备节点的 priority 的值不要大于主节点的值
2、router_id、auth_pass 这两个值要相同
3、virtual_ipaddress 虚拟地址,这个地址就是将来真正要访问的地址,也要配置相同,可以配置多个虚拟地址
4、需要配置一个检测脚本,本篇中的health_check.sh脚本内容如下:
1 #!/bin/bash 2 count=$(ps aux | grep -v grep | grep nginx | wc -l) 3 if [ $count -gt 0 ] 4 then 5 exit 0 6 else 7 exit 1 8 fi
给health_check.sh设置可执行权限 chmod 777 health_check.sh
5、在interface属性配置的机器的网卡,查看网卡信息(ip a),此时我配置的interface的值为 enp0s8
3、启动服务并验证
systemctl start keepalived.service
#停止服务 systemctl stop keepalived.service
#重启服务 systemctl restart keepalived.service
查看日志:
journalctl -xe
查看虚拟地址是否启动成功
ip a
查看倒数第5行,虚拟的地址已经启动成功了,此时,在浏览器中访问就不要在用nginx的地址了,而应该用虚拟地址192.168.0.120,如下图:
四个应用均可以访问,此时,我将主机(109)的nginx停掉 nginx -s stop
此时继续刷新页面,仍然是可以访问所有应用
此时将主机(109)启动,然后把备机(111)的nginx停止,仍然能访问所有应用
安装完成。
本篇参考的文章:https://blog.csdn.net/yelllowcong/article/details/78764780
上一篇nginx配置地址:https://www.cnblogs.com/hanpengblog/p/11330447.html