1.两台业务系统启动着相同的服务,如果有一台故障,另一台自动接管,我们将国称之为高可用。
2.系统可用率算法例:
1个9:(1-90%)*365=36.5天 —-> 表示该系统1年时间里最多可能的业务中断时间是36.5天
2个9:(1-99%)*365=3.65天 —-> 表示该系统1年时间里最多可能的业务中断时间是3.65天
保证系统可实时不间断的使用。
软件:keepalive
keepalive是通过vrrp(虚拟路由冗余协议)实现高可用。
VRRP协议原理
通常业务系统需要保证7X24小时不down机。比如公司内部OA系统,每天公司人员都需要使用,则不允许down机。作为业务系统来说随时随地地都要求可用。
场景及原理说明
1.安装
yum install -y keepalive
2.配置[root@lb01 ~]#
**lb01配置**: cat /etc/keepalived/keepalived.conf global_defs { router_id lb01 #标识信息 } vrrp_instance VI_1 { state MASTER priority 150 #优先级 interface eth0 #绑定的网卡 virtual_router_id 50 #同一个虚拟的路由 advert_int 1 #心跳的间隔时间 authentication { auth_type PASS #两个主机之间的密语 auth_pass 1111 #心跳密码 } virtual_ipaddress { 10.0.0.3 #虚拟IP地址(可以绑定多个虚拟IP地址) } } **lb02配置**: #lb02配置如下 global_defs { router_id lb02 } vrrp_instance VI_1 { state BACKUP priority 100 interface eth0 virtual_router_id 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 #虚拟IP地址 } }
3.启动
systemctl start keepalive
4.测试:keepalive高可用地址漂移
(1)keepalive提供一个VIP(虚拟IP)和vmac(虚拟Mac地址)
虚拟IP地址
(2)抓包测试
抓包测试
(1)默认配置为抢占式:
master挂掉,backup上台,master重新启动则讲IP抢占过去。
(2)非抢占式配置:
两台均为backup,在优先级上做区分,如master挂掉,backup上台,则backup变成master,master变为backup。
a.两个节点的state均为backup(官方建议)
b.两个节点都在vrrp_instance中添加nopreempt
c.其中一个节点的优先级要高于另外一个节点
两台服务器角色都启用了nopreempt后,必须修改角色状态统一为backup,唯一的区别就是优先级不同。
#Master vrrp_instance VI_1 { state BACKUP priority 150 nopreempt } #Backup vrrp_instance VI_1 { state BACKUP priority 100 nopreempt }
keepalive高可用故障脑裂
由于某些原因,导致两台keepalive高可用服务器在指定时间内,无法检测到对方的心跳消息,各自取得资源及服务的所有权,而此时的两台高可用服务器又都还活着。
a.服务器网线松动等网络故障
b.服务器硬件故障发生损坏现象而奔溃
c.主备服务器都开启了firewalld防火墙
解决方法:
# 脚本如下 [root@lb01 ~]# cat /server/scripts/check_www.sh #!/bin/sh nginxpid=$(ps -C nginx --no-header|wc -l) #1.判断Nginx是否存活,如果不存活则尝试启动Nginx if [ $nginxpid -eq 0 ];then systemctl start nginx sleep 3 #2.等待3秒后再次获取一次Nginx状态 nginxpid=$(ps -C nginx --no-header|wc -l) #3.再次进行判断, 如Nginx还不存活则停止Keepalived,让地址进行漂移,并退出脚本 if [ $nginxpid -eq 0 ];then systemctl stop keepalived fi fi [root@lb01 ~]# chmod +x /server/scripts/check_www.sh
配置keepalived使用
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01 } #定义脚本所在的位置,以及执行时间 vrrp_script check_www { script "/server/scripts/check_www.sh" interval 5 } vrrp_instance VI_1 { state BACKUP priority 150 nopreempt interface eth0 virtual_router_id 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 } #调用脚本 track_script { check_www } }
###编写lb01服务器keepalived配置文件 [root@lb01 ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { router_id lb01 } vrrp_instance shuai { state MASTER interface eth0 virtual_router_id 51 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 } } vrrp_instance ashuai { state BACKUP interface eth0 virtual_router_id 52 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.4/24 } } ###编写lb02服务器keepalived配置文件 ! Configuration File for keepalived global_defs { router_id lb02 } vrrp_instance shuai { state BACKUP interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3/24 } } vrrp_instance ashuai { state MASTER interface eth0 virtual_router_id 52 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.4/24 } }
1.修改nginx负载均衡文件
upstream oldboy { server 10.0.0.7:80; server 10.0.0.8:80; server 10.0.0.9:80; } server { listen 10.0.0.3:80; server_name www.oldboy.com; location / { proxy_pass http://oldboy; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_next_upstream error timeout http_404 http_502 http_403; } } server { listen 10.0.0.4:80; server_name bbs.oldboy.com; location / { proxy_pass http://oldboy; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; } }
2.修改内核文件
异常问题: 01. 如何设置监听网卡上没有的地址 解决: 需要修改内核信息 echo ‘net.ipv4.ip_nonlocal_bind = 1‘ >>/etc/sysctl.conf sysctl -p
3.重启nginx负载均衡服务
systemctl restart nginx
原文:https://www.cnblogs.com/zhangfushuai/p/14803058.html