1.用keepalived管理nginx服务
7-1和7-2配置
#安装nginx
systemctl stop firewalld
setenforce 0
yum install epel-release.noarch -y
yum install -y nginx
systemctl start nginxvim /etc/nginx/nginx.confupstream web {server 192.168.91.102;server 192.168.91.103;}location / {proxy_pass http://web;}scp /etc/nginx/nginx.conf 192.168.91.101:/etc/nginx/nginx.confsystemctl stop firewalld
setenforce 0
yum install epel-release.noarch -y
yum install -y nginx
systemctl start nginx#7-1和7-2安装keepalived
yum install keepalived -y7-1
vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1 # 修改邮箱地址smtp_connect_timeout 30 router_id LVS01 # 修改名称vrrp_skip_check_adv_addr #vrrp_strict #关闭严格模式vrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_script check_down {script "/etc/keepalived/ng.sh" interval 1weight -30fall 3rise 2timeout 2
}vrrp_script check_down {script "/etc/keepalived/ng.sh" #指明脚本的位置 interval 1 #每隔1s 执行一次检测weight -30 #如果 脚本执行失败自动减少优先级30fall 3 # 3次不成功才标注为失败 rise 2 #nginx 重新起来后检测两次成功 才真的成功 timeout 2 #超时时间 2s
}vrrp_instance VI_1 {state MASTERinterface ens33 #修改网卡的名称virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.91.188 #修改vip }track_script {check_down}}vim /etc/keepalived/ng.sh
killall -0 nginx
chmod +x /etc/keepalived/ng.sh
scp /etc/keepalived/keepalived.conf 192.168.91.101://etc/keepalived/7-2 上操作
从节点做修改 192.168.91.101/etc/keepalived/keepalived.confglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS01 vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0vrrp_gna_interval 0
}
实验效果
使用tcpdump命令抓包可以看到ip地址来源与主的那台keeplived管理nginx的服务器
当主的那台nginx服务下线后不会影响7-3和7-4继续提供web服务
可以通过抓包看到看到当keepalived判断主的nginx停止服务了以后,将服务转交给了从的nginx
用keepalived管理haproxy提供web服务
#在haproxy的配置文件中配置代理真实服务器
listen ky26_port_80bind 192.168.91.100:80mode httplog global server rs1 192.168.10.20:80 checkserver rs2 192.168.10.1:80 check#需要开启优化使haproxy可以监听虚拟ip
sysctl -a |grep bind
#net.ipv4.ip_nonlocal_bind = 1vim /etc/sysctl.confnet.ipv4.ip_nonlocal_bind = 1sysctl -p#修改脚本检测
vim /etc/keepalived/ng.sh
killall -0 haproxy
#tcpdump -i ens33 -nn port 80
keepalived脑裂现象
什么是脑裂?
在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。
由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果。共享资源被瓜分、两边“服务”都起不来了或者两边“服务”都起来了,但同时读写“共享存储”,导致数据损坏
都有哪些原因导致脑裂?
1.高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
2.因心跳线坏了(包括断了,老化)。
3.因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
4.因心跳线间连接的设备故障(网卡及交换机)高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
5.高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
6.其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
如何解决keepalived脑裂问题?
在实际生产环境中,我们从以下方面防止脑裂:
1.同时使用串行电缆和以太网电缆连接、同时使用两条心跳线路,这样一条线路断了,另外一条还是好的,依然能传送心跳消息
2.当检查脑裂时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith、fence)相当于备节点接收不到心跳消息,通过单独的线路发送关机命令关闭主节点的电源
3.做好对脑裂的监控报警解决常见方案:
(1)如果开启防火墙,一定要让心跳消息通过,一般通过允许IP段的形式解决
(2)可以拉一条以太网网线或者串口线作为主被节点心跳线路的冗余
(3)开发检测程序通过监控软件检测脑裂