Nginx高可用
准备工作:
两条虚拟机。安装好Nginx
什么是高可用?
在生产环境上很多时候是以Nginx
做反向代理对外提供服务,但是一天Nginx难免遇见故障,如:服务器宕机。当Nginx
宕机那么所有对外提供的接口都将导致无法访问。
虽然我们无法保证服务器百分之百可用,但是也得想办法避免这种悲剧,今天我们使用keepalived
来实现Nginx
的高可用。
双机热备方案
这种方案是国内企业中最为普遍的一种高可用方案,双机热备其实就是指一台服务器在提供服务,另一台为某服务的备用状态,当一台服务器不可用另外一台就会顶替上去。
keepalived是什么?
Keepalived软件主要通过VRRP协议实现高可用功能的。VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题,它能够保证当个别节点宕机时,整个网络可以不间断地运行。keepalived除了能够管理LVS软件外,还可以作为其他服务(Nginx,Haproxy、MySQL等)的高可用解决方案软件。
故障转移机制
Keepalived
高可用服务之间的故障切换转移,是通过VRRP
来实现的。
在 Keepalived
服务正常工作时,主 Master
节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup
节点自己还活着,当主 Master
节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master
节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
实现过程:
安装keepalived
yum install keepalived -y
安装成功后,在 /etc下面有目录keepalived, 有文件keepalived.conf
修改 /etc/keepalived/keepalived.conf 配置文件:! Configuration File for keepalived
global_defs {
router_id NodeA #路由器标识,最好写主机名,用于标识或IP
}
vrrp_script chk_nginx {
#配置检查方式,chk_nginx为自定义名称
script "/usr/local/src/nginx_check.sh" # 检查的脚本位置
interval 2 # 监测的时间间隔
weight 20 #检测权重,此值需要大于MASTER的priority减去BACKUP的priority
}
vrrp_instance VI_1 {
state MASTER #主节点为:MASTER,备节点为:BACKUP
interface eth0 # 网卡名字 可以通过 ifconfig查看当前主机的网卡
virtual_router_id 51 # 主备机的virtual_router_id 必须相同
priority 100 # 主备机取不同的优先级,主机较大(100),备份机小(90)
advert_int 1
authentication {
#此为认证方式,MASTER和BACKUP统一
auth_type PASS
auth_pass 1314
}
track_script {
#调用上面的检查脚本
chk_nginx
}
virtual_ipaddress {
#设定虚拟VIP地址
192.168.17.50
}
}
在/usr/local/src 添加检测脚本nginx_check.sh文件
#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
脚本授权: chmod 775 nginx_check.sh
说明:脚本必须通过授权,不然没权限访问啊
把两台服务器上 nginx 和 keepalived 启动
启动 keepalived:systemctl start keepalived.service
5、最终测试 (1)在浏览器地址栏输入 虚拟 ip 地址 192.168.17.50