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)开发检测程序通过监控软件检测脑裂