准备工作
192.168.0.108
192.168.0.109
yum install -y nginx
yum install -y keepalived
测试流程
1)修改主服务器(192.168.0.108)的keepalived配置文件
# 全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.0.108
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# 相关脚本配置
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh"
interval 2 # 检测脚本执行的间隔
weight 2 # 权重。当脚本的条件成立,把当前的权重加2;如果值为负数(-20),就减少20。通过修改weight来改变主从服务器
}
# 虚拟IP的配置
vrrp_instance VI_1 {
state MASTER # 主MATER
interface enp5s0 # 网卡 通过ifconfig查看
virtual_router_id 51 # 主从机的virtual_router_id必须相同
priority 100 # 主从机取不同的优先级,主机值较大,备份机值较小
advert_int 1 # 心跳时间间隔,用于检测主机或服务器是否还活着,默认1秒。表示每隔多长时间发生一个心跳
authentication { # 权限校验方式
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 通过它就可以完成keepalived的配置
192.168.0.188 # 对外虚拟ip
}
}
2)修改备服务器(192.168.0.109)的keepalived配置文件
# 全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.0.109
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# 相关脚本配置
vrrp_script chk_http_port{
script "/usr/local/src/nginx_check.sh"
interval 2 #检测脚本执行的间隔
weight 2 #权重。当脚本的条件成立,把当前的权重加2;如果值为负数(-20),就减少20。通过修改weight来改变主从服务器
}
# 虚拟IP的配置
vrrp_instance VI_1 {
state BACKUP # 从BACKUP
interface ens33 # 网卡 通过ifconfig查看
virtual_router_id 51 # 主从机的virtual_router_id必须相同
priority 99 # 主从机取不同的优先级,主机值较大,备份机值较小
advert_int 1 # 心跳时间间隔,用于检测主机或服务器是否还活着,默认1秒。表示每隔多长时间发生一个心跳
authentication { # 权限校验方式
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 通过它就可以完成keepalived的配置
192.168.0.188 # 对外虚拟ip
}
}
3)编写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
4)在两台服务器启动nginx和keepalived
nginx -s stop
nginx
systemctl start keepalived.service
遇到的问题1:
[root@192 keepalived]
Job for keepalived.service failed. See "systemctl status keepalived.service" and "journalctl -xe" for details.
[root@192 keepalived]
[root@192 keepalived]
[root@192 keepalived]
root 1403 0.0 0.1 123012 1400 ? Ss 05:41 0:00 /usr/sbin/keepalived -D
root 1404 0.0 0.2 123012 2640 ? S 05:41 0:00 /usr/sbin/keepalived -D
root 1405 0.0 0.2 125136 2412 ? S 05:41 0:00 /usr/sbin/keepalived -D
root 1416 0.0 0.0 112828 988 pts/0 R+ 05:42 0:00 grep --color=auto keepalived
5)web网页访问nginx(ip地址为虚拟网卡的ip—192.168.0.188)
6)停掉主服务器(192.168.0.108)的nginx和keepalived
systemctl stop keepalived.service
nginx -s stop
7)继续访问nginx
仍然可以访问成功,说明此时原本的备用服务器成为了主服务器,使得用户可以正常访问nginx。
查看备用服务器(192.168.0.109)的网卡:
[root@192 keepalived]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:9f:1f:da brd ff:ff:ff:ff:ff:ff
inet 192.168.0.104/24 brd 192.168.0.255 scope global noprefixroute dynamic ens33
valid_lft 4755sec preferred_lft 4755sec
inet 192.168.0.188/32 scope global ens33 -------------------> 已经绑定了虚拟网卡
valid_lft forever preferred_lft forever
inet 192.168.0.109/24 brd 192.168.0.255 scope global secondary noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::3827:c675:a38b:d2ac/64 scope link noprefixroute
valid_lft forever preferred_lft forever
至此,nginx高可用的测试完成
nginx高可用原理图
nginx有主备服务器,对外绑定相同的虚拟ip(例如本例中的192.168.0.188)。
当主服务器发生故障后,通过keepalived检测并实现主备切换,此时备服务器绑定虚拟ip,保证请求正常响应,这一过程完全是自动完成的。
相关概念
VRRP协议
VRRP全称 Virtual Router Redundancy Protocol,即”虚拟路由冗余协议“。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(VIP - Virtual IP,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。
KeepAlived
KeepAlived是实现VRRP备份路由的高可靠性运行件。基于KeepAlived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接。
KeepAlived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,KeepAlived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后KeepAlived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
KeepAlived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有Heartbeat 、Corosync、Pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如LVS、Haproxy、Nginx)一起工作来达到集群的高可用。
部分参考:
https://blog.csdn.net/chuanchengdabing/article/details/119727185
|