• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
2022
博客园    首页    新随笔    联系   管理    订阅  订阅

keepalived高可用 -03

keepalived高可用

一、keepalived 脑裂 (增大服务器压力)

# 由于某些原因,导致两台keepalived高可用服务器在指定时间内,无法检测到对方的心跳,各自取得资源及服务的所有权,而此时的两台高可用服务器又都还活着。

备用节点如何知道主节点是否down机?

备用节点一直在PING挂载在主节点的VIP.主节点的VIP会给备用节点会回复PONG,证明主节点并没有宕机。如果主节点没有回复,则备用节点则会启动自己的VIP。
1.脑裂的故障
1.网线松动,网络故障
2.服务器硬件故障
3.服务器之间开启了防火墙
#脑裂的产生,对于用户端的浏览器,并没有任何影响,影响的是我们后端的服务器,假如keepalived,开启了日志,我们的后端的服务器会产生双倍的日志,占用我们服务器的硬盘空间。
2.脑裂模拟-------(傻子才模拟)
1、开启防火墙
`开启了防火墙,lb01和lb02之间的 keepalived 大家都互相PING不通。所以主节点以及备用节点。都开启了VIP以及VMAC
[root@lb01 ~]# systemctl start firewalld.service 
[root@lb01 ~]# ip addr | grep 10.10.0.102
    inet 10.10.0.102/32 scope global eth0
    
[root@lb02 ~]# systemctl start firewalld
[root@lb02 ~]# ip addr | grep 10.10.0.102
    inet 10.10.0.102/32 scope global eth0
    
2、开启防火墙,单独添加端口开启

`因为开启了firewalld防火墙,默认拒绝所有连接,要开启80端口
[root@lb01 ~]# firewall-cmd --add-service=http
success
[root@lb02 ~]# firewall-cmd --add-service=http
success

`因为开启了firewalld防火墙,默认拒绝所有连接,我们用的是HTTPS,还要开启443端口,要开启80端口
[root@lb01 ~]# firewall-cmd --add-service=https
success
[root@lb02 ~]# firewall-cmd --add-service=https
success

#访问页面没有任何问题  
  10.10.0.102
  
3、关闭防火墙
[root@lb02 ~]# systemctl stop firewalld.service 
[root@lb02 ~]# ip addr | grep 10.10.0.102.0.0.3

[root@lb01 ~]# systemctl stop firewalld.service
[root@lb01 ~]# ip addr | grep 10.10.0.102.0.0.3
 inet 10.10.0.102/32 scope global eth0     #lb01优先级高
3.脑裂解决的办法
#如果发生脑裂,则随机kill杀掉一台即可
#在备上编写检测脚本, 测试如果能ping通主并且备节点还有VIP的话则认为产生了脑裂,
` 因为是大家互PING,所以主节点以及备用节点,都需要编写并执行此脚本。
[root@lb01 ~]# cat check_keepalive.sh 
#!/bin/sh
vip=10.10.0.102
lb02_ip=172.16.1.6
while true;do
    ssh $lb01_ip 'ip addr | grep 10.10.0.102' &>/dev/null
    if [ $? -eq 0 -a `ip add|grep "$vip"|wc -l` -eq 1 ];then
        echo "ha is split brain.warning."
    else
        echo "ha is ok"
    fi
sleep 3
done

[root@lb02 ~]# vim check_keepalive.sh 
#!/bin/sh
vip=10.10.0.102
lb01_ip=172.16.1.5
while true;do
    # ping -c 2 $1b01—ip & /dev/null
     ssh $lb01_ip 'ip addr | grep 10.10.0.102' &>/dev/null            
    if [ $? -eq 0 -a `ip add|grep "$vip"|wc -l` -eq 1 ];then
        echo "ha is split brain.warning."
    else
        echo "ha is ok"
    fi
sleep 3
done

## 免密
[root@lb01 ~]# ssh-keygen  #一路回车
[root@lb01 ~]# ssh-copy-id 172.16.1.6
[root@lb01 ~]# ssh 172.16.1.6 'ip addr | grep 10.10.0.102'

[root@lb02 ~]# ssh-keygen    #一路回车
[root@lb01 ~]# ssh-copy-id 172.16.1.5
[root@lb02 ~]# ssh 172.16.1.5 'ip addr | grep 10.10.0.102'
    inet 10.10.0.102/32 scope global eth0

posted @ 2021-04-10 13:53  博客之记  阅读(51)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3