1. 测试环境—高可用
两台nginx服务器,主:192.168.1.196,备:192.168.1.197
两台tomcat服务器:192.168.1.194 和 192.168.1.195
vip:192.168.1.198
nginx + keepalived实现HA部署图预览效果,如下图所示:
图1-nginx + keepalived实现HA部署
分别在nginx主服务器和nginx备服务器上部署keepalived软件,通过配置keepalived来模拟之前我们所说的三种状态:
正常状态,client通过vip发出请求时,由nginx主服务器提供服务,把请求转发到后台的tomcat服务器。
故障状态,当nginx主服务器宕机了,client通过vip发出请求时,由nginx备服务器提供服务,把请求转发到后台的tomcat服务器。
当nginx主服务器恢复时,nginx备服务器让出位置,由nginx主服务器继续提供服务。
2. 配置nginx主服务器
进入/etc/keepalived目录下,修改配置文件:
nginx主服务器具体配置如下:
! Configuration File for keepalived
#全局配置
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
XXX@XXX.com
}
notification_email_from XXX@XXX.com #指定发件人
#smtp_server XXX.smtp.com #指定smtp服务器地址
#smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_instance VI_1 {
state MASTER #标示状态为MASTER 备份机为BACKUP
interface eth4 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 100 #MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置认证
auth_type PASS #主从服务器验证方式
auth_pass 8888
}
virtual_ipaddress { #设置vip
192.168.1.198 #可以多个虚拟IP,换行即可
}
}
关于每个配置的详细介绍在前面2篇中已经说过,这里就不在赘述。
启动nginx主服务器的keepalived和nginx
./nginx
service keepalived start
tail -f /var/log/messages #通过查看日志来判断keepalived是否启动成功
MASTER STATE:主服务器状态
protocol VIPs::设置一个vip协议
Sending gratuitous ARPs on eth4:把192.168.1.198设置到eth4接口上
Netlink reflector reports IP 192.168.1.198 added:表示vip 192.168.1.198已经添加
3. 配置nginx备服务器
修改备nginx下/etc/keepalived/keepalived.conf文件
注意:配置在设置nginx备服务器时state设置为BACKUP,priority的值要比MASTER低,virtual_router_id和master的值一致
! Configuration File for keepalived
#全局配置
global_defs {
notification_email { #指定keepalived在发生切换时需要发送email到的对象,一行一个
XXX@XXX.com
}
notification_email_from XXX@XXX.com #指定发件人
#smtp_server XXX.smtp.com #指定smtp服务器地址
#smtp_connect_timeout 30 #指定smtp连接超时时间
router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_instance VI_1 {
state BACKUP #标示备份机状态为BACKUP
interface eth5 #设置实例绑定的网卡
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 99 #MASTER权重要高于BACKUP 比如BACKUP为99
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #设置认证
auth_type PASS #主从服务器验证方式
auth_pass 8888
}
virtual_ipaddress { #设置vip
192.168.1.198 #可以多个虚拟IP,换行即可
}
}
启动nginx备服务器的keepalived和nginx
./nginx
service keepalived start
tail -f /var/log/messages 通过查看日志来判断keepalived是否启动成功
到这里,基本上nginx主服务器和nginx备服务器已经配置完毕了。
4. 测试—初始状态
通过ip add show eth4命令查看nginx主服务器的eth4网卡,发现VIP 192.168.1.198已经绑定到了eth4网卡上。
查看nginx备服务器的eth5设置,vip没有绑定在nginx备服务器的eth5上。
然后大家可以打开浏览器测试一下,看是否可以访问,这里,我就不测试了。
5. 主服务器宕机
将nginx主服务器上的keepalived和nginx停止(相当于模拟服务器宕机),当通过命令service keepalived stop命令停止keepalived。
当keepalived停止时,我们通过命令tail -f /var/log/messages查看nginx服务器的keepalived日志打印了以下信息:
VRRP_Instance(VI_1) removing protocol VIPs.:VRRP实例删除了协议
Netlink reflector reports IP 192.168.1.198 removed:同时把vip 192.168.1.198删除掉了
Stopping Keepalived v1.2.13 (03/19,2015):表示keepalived已经停止了
注意这里模拟的是停止 keepalived进程没有模拟宕机,因此还需要通过将nginx停止掉。
我们再通过tail -f /var/log/message命令查看nginx备机上keeaplived的日志
VRRP_Instance(VI_1) Transition to MASTER STATE:nginx备机的状态切换成master状态了
setting protocol VIPs.:添加了VIPs协议
Netlink reflector reports IP 192.168.1.198 added:表示VIP 192.168.1.198已经被添加了
通过ip add show eth5命令查看发现nginx备机上的eth5网卡上已经绑定了VIP 192.168.1.198,此时已经发生了IP漂移 。
此时我们再访问192.168.1.198时,发现nginx备机同样可以实现把请求转发到了tomcat1和tomcat2服务器,说明keepalived确实可以实现HA高可用。
到此,主服务器宕机状态的测试已经结束。
6. nginx主服务器恢复
现在我们将nginx主服务器的nginx和keepalived启动,注意:一定要将nginx和keepalived都启动。
./nginx
service keepalived start
然后可以通过ps -aux | grep nginx命令查看nginx启动状态,这里不再演示了。
nginx主服务器上运行的keepalived软件日志打印了信息:
VRRP_Instance(VI_1) Entering BACKUP STATE::nginx服务器的状态设置为了backup状态。
通过ip add show eth4查看nginx主机的eth4接口上也没有绑定VIP 192.168.1.198,即没有发生ip漂移。
这里肯定有很多小伙伴很奇怪,为什么nginx主机恢复了,状态却不是master,反而是backup呢,也没绑定vip呢?
这是因为keepalived软件为了减少不必要的切换,默认开启了nopreempt属性。表示不抢占,也就是允许一个priority较低的backup竞选为master,因此nginx主机恢复了状态却成了backup的原因。需要说明的是nopreempt属性是可以手动设置为抢占或不抢占的。如果设置nopreempt为抢占的话,则nginx主机恢复时会切换回master,同时绑定VIP,即ip漂移回来。
还有一个原因就是,如果主备机的防火墙没关闭的话,那么也不会发生主备切换,因此在做实验之前,一定要先检查防火墙是否关闭。