一、实验介绍
1、 本实验将通过 Keepalived 来实现 Nginx 的 HA 集群,当集群中的主服务器发生故障后,业务自动切换到备用主机上。
2、实验组网介绍:本实验由三台虚拟机(这里131.19为MASTER 131.20为BACKUP)组成, Nginx1 和 Nginx2 可以和上实验复用,其上运行 Nginx 服务,并通过 Keepalived 虚拟出一台主机供客户端访问。 Nginx1 和 Nginx2 之间通过192.168.131.100 进行心跳监控,并通过浮动 IP 192.168.131.10 对外提供服务,如果其中一台主机出现故障或 Nginx 进程出现故障,业务自动切换到另外一台主机上,具体拓扑如下

二、实验步骤
1、安装keepalived和nginx(在Nginx1和Nginx2上)
# 安装keepalived
yum install keepalived -y
# 安装nginx
yum install nginx
2、开启nginx并关闭防火墙、设置标志(两个Nginx都要)
echo "web `hostname -I`" > /usr/share/nginx/html/index.html
systemctl start nginx
systemctl stop firewalld
echo "web `hostname -I`" > /usr/share/nginx/html/index.html
该命令的主要功能是将包含主机名和 IP 地址(`hostname -I`" )的特定文本内容写入到 Nginx 服务器的默认网页文件 index.html
中。这样为了方便,当访问该 Nginx 服务器时,就能在浏览器里看到包含主机名和 IP 地址的页面。
3、配置keepalived
#对于MSTER-Ningx1
[root@openeuler ~]# cd /etc/keepalived/
[root@openeuler keepalived]# cp keepalived.conf{,.bak} #拷贝keepalived.onf
[root@openeuler keepalived]# vim keepalived.conf
global_defs {
routder_id LVS_Master
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.131.100
}
}
[root@openeuler keepalived]# scp keepalived.conf 192.168.131.20:$PWD #直接将131.19上的keepalived.conf拷贝到131.20上
#BACKUP-Nginx2(131.20)上的配置
[root@openeuler ~]# vim /etc/keepalived/keepalived.conf
global_defs {
routder_id LVS_Backup
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.131.100
}
}
4、启动keepalived(131.19和131.20上)
systemctl start keepalived.service
5、测试在131.10上
正常测试:
当关闭131.19的keepalived--------systemctl stop keepalived.service

三、相关问题
keepalived 的高可用 nginx
q1:没有对nginx 应用做健康检查 ?
期望应用异常时,VIP自动漂移。(可以在日至上看出--tail -f /var/log/messages)
解决方法::编写脚本解决脚本持续监测应用,一旦异常并重后失败,
1、直接在脚本上修改
#对于MSTER-Ningx1(131.19)
[root@openeuler ~]# cd /etc/keepalived/
[root@openeuler keepalived]# vim keepalived.conf
global_defs {
routder_id LVS_Master
}
vrrp_script chk_ngx {
script "killall -0 nginx"
interval 1
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_ngx
}
virtual_ipaddress {
192.168.131.100
}
}
#BACKUP-Nginx2(131.20)上的配置
[root@openeuler ~]# vim /etc/keepalived/keepalived.conf
global_defs {
routder_id LVS_Backup
}
vrrp_script chk_ngx {
script "killall -0 nginx"
interval 1
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_ngx
}
virtual_ipaddress {
192.168.131.100
}
}
2、重启keepalived
3、在MSATER上killall nginx 出现异常,可以看日志VIP自动飘逸
这时在131.10上测试