—–nginx+Keepalived高可用方案
1> 什么是高可用
高可用是指通过专门的架构设计,减少整个系统的故障的时间,保持其提供服务的高度可用性.
–在将nginx作为负载均衡服务器使用时,upstream机制能够检测出后端服务器是否可用,如果其中一台服务器宕机,nginx能够自动转移到后端正常的服务器中,以保持系统持续可用.
–衡量一个集群的高可用性在于没有单点故障,即其中任何一台服务器宕机都不会造成整个服务中断.
–若一个集群的前端只有一台nginx反向代理负载均衡服务器,一旦该服务器发生故障,就会造成整个集群的服务中断.
–为了解决这个问题,可以利用keepalived部署备用服务器,实现故障转移.
Keepalived内置了VRRP(Virtual Router Redundancv Protocol, 虚拟路由冗余协议)功能,
VRRP用于解决静态路由出现的单点故障问题,
它通过ip多播的方式通信,当发现主路由故障时,
通过选举策略将备用路由更换为主路由,从而继续提供服务.
–Keepalived利用VRRP实现了将提供对外访问的IP地址(Virtual IP),
自动在:主服务器(Master)和备用服务器(Backup)之间切换.
正常情况下Master使用Virtual IP提供对外访问,当Master故障时,
其他正在监控Master的Backer会通过优先级(priority)机制,
竞争接管Virtual IP继续对外提供服务,
其他落选的Backup会继续监控当前使用的Virtual IP服务器.
–高可用实验环境的搭建思路
角色 | RIP(Real IP) | VIP(Virtual IP) | 说明
Master 192.168.158.131 192.168.158.20 nginx+Keepalived
Backup 192.168.158.132 192.168.158.20 nginx+Keepalived
- 192.168.158.133 - 后端服务器1
- 192.168.158.134 - 后端服务器2
–安装和配置Keepalived服务
1> 部署主服务器
–安装nginx
–安装keepalived
下载
编译安装
tar -zxvf keepalived-1.2.24.tar.gz
cd keepalived-1.2.24
./configure
make && make install && cd ..
添加到系统服务,配置开机启动
cd /usr/local/etc/rc.d/init.d
cp keepalived /etc/init.d/keepalived
chmod +x /etc/init.d/keepalived
chkconfig keepalived on
链接配置文件
cd /usr/local/etc/sysconfig
ln -s `pwd`/keepalived /etc/sysconfig/keepalived
链接程序文件
cd /usr/local/sbin
ln -s `pwd`/keepalived /usr/sbin/keepalived
–配置主服务器的keepalived
启动keepalived前需要创建一个配置文件,
keepalived将会根据配置文件中的配置进行工作
执行如下命令可以查看keepalived的配置文件模板,该文件中提供了一些参考配置:
less /usr/local/etc/keepalived/keepalived.conf
在keepalived服务脚本中,默认加载的配置文件路径为”/etc/keepalived/keepalived.conf”
目前该文件并不存在,需要手动创建
mkdir /etc/keepalived
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 21
mcast_src_ip 192.168.158.131
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
192.168.158.20
}
}
启动查看
service keepalived start
ps aux | grep keepalived
ip a | grep 192.168.158.20
2>部署备用服务器
克隆主服务器,修改keepalived配置文件
vrrp_instance VI_1 {
state BACKUP
priority 90
......
}
Master和Backup服务器中的keepalived通过VRRP的112端口通信,
如端口无法访问这会同时抢占Virtual IP地址
–配置防火墙规则
#备用服务器配置允许主服务器访问
iptables -I INPUT -s192.168.158.131 -p112 -jACCEPT
service iptables save
#主服务器配置允许备用服务器访问
iptables -I INPUT -s192.168.158.132 -p112 -jACCEPT
service iptables save
——使用keepalived监控nginx服务
1>实现思路
使用keepalived除了可以监控其他服务器的keepalived是否正常,
也可以监控本机中某个服务是否正常
下面将实现利用keepalived监控nginx进程是否正常工作,
如果nginx出现问题,则尝试重新启动nginx.如果重启nginx后仍然无法工作,
则停止本机的keepalived服务,从而使其他备用服务器自动接管Virtual IP.
2> 自动监控nginx
修改keepalived配置文件
vrrp_script chk_nginx { #配置用于检测nginx运行状态的脚本
script "/chk_nginx.sh" #用于检测的脚本文件路径
interval 2 #每2秒执行一次脚本
weight -20 #当检测失败时,权重发生的变化
}
vrrp_instance VI_1 { #为VI_1添加监控脚本
......
track_script {
chk_nginx
}
}
创建监控脚本
vim /chk_nginx.sh
#! /bin/bash
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
service nginx start
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
service keepalived stop
fi
fi
chmod +x /chk_nginx.sh
service keepalived reload
测试nginx是否重启
service nginx stop
ps -C nginx --no-header
–如果重启不了,是否切换到备用服务器
–#因为手动测试有延迟,写成脚本执行
cd /usr/local/nginx/sbin
vi test.sh
#! /bin/bash
service nginx stop
chmod -x nginx
chmod +x test.sh
./test.sh
–最近发现这个不错 https://blog.csdn.net/xyang81/article/details/52556886