day46 高可用(keepalived)

高可用的基本概述
vrrp的原理
高可用核心概念总结
keepalived高可用安装与配置
keepalived高可用抢占式与非抢占式
keepalived高可用与nginx集成
keepalived高可用脑裂与故障解决


一、高可用的基本概述

1.什么是高可用
两台机器启动着相同的业务,当有一台机器宕机,另一台机器能够快速的接管,对于访问的用户是无感知的。
2.为什么要设计高可用
减少系统不能提供服务的时间
3.keepalived是如何实现高可用的
通过使用vrrp(虚拟路由冗余协议)协议实现

二、vrrp的原理

vrrp原理
VRRP将局域网内的一组路由器划分在一起,称为一个备份组。备份组由一个Master路由器和多个Backup路由器组成,功能上相当于一台虚拟路由器。
VRRP备份组具有以下特点:
• 虚拟路由器具有IP地址,称为虚拟IP地址。局域网内的主机仅需要知道这个虚拟路由器的IP地址,并将其设置为缺省路由的下一跳地址。
• 网络内的主机通过这个虚拟路由器与外部网络进行通信。
• 备份组内的路由器根据优先级,选举出Master路由器,承担网关功能。其他路由器作为Backup路由器,当Master路由器发生故障时,取代Master继续履行网关职责,从而保证网络内的主机不间断地与外部网络进行通信。

典型组网分析:主备方式

day46 高可用(keepalived)_第1张图片
vrrp原理

2.高可用keepalived使用场景
通常公司的业务系统要求保证24小时不宕机,这种情况下就需要实现高可用,当一台出现宕机的情况,另一台能立刻的顶上去。
day46 高可用(keepalived)_第2张图片
keepalived使用场景

三、高可用核心概念总结

  • 两台高可用服务器中,谁的优先级高,谁就是主节点,另一个就是备份节点
  • 如果主节点*(Master)故障,备份节点(Backup)自动接管
  • Master和Backup同时出现问题,就会出先脑裂现象

四、keepalived高可用安装与配置

1.安装(10.0.0.5/10.0.0.6都安装)
yum install keepalived -y
2.配置(mater/backup)
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf 
global_defs {     
    router_id lb01   
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}
    virtual_ipaddress {
        10.0.0.3
    }
}

[root@lb02 ~]# cat /etc/keepalived/keepalived.conf global_defs {
    router_id lb02
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}
3)启动
[root@lb01 ~]# systemctl start keepalived
[root@lb01 ~]# systemctl enable keepalived
4)验证
[root@lb01 ~]# ip addr|grep 10.0.0.3

效果:


day46 高可用(keepalived)_第3张图片
image.png

day46 高可用(keepalived)_第4张图片
抓包

五、keepalived高可用抢占式与非抢占式

  • master故障---->backup顶上---->master恢复---->backup 抢占式
  • master故障---->backup顶上---->master恢复---->backup继续工作 非抢占式
  • 步骤
    ① 两个节点的state都必须配置为backup
    ② 两个节点都在vrrp instance中添加nopreempt
    ③ 其中一个优先级必须高于另一个优先级


    day46 高可用(keepalived)_第5张图片
    image.png

    day46 高可用(keepalived)_第6张图片
    非抢占式

四、keepalived高可用与nginx集成

步骤:

1.编写脚本
[root@lb01 ~]# mkdir /scripts
[root@lb01 ~]# vim /scripts/check_web.sh
#!/usr/bin/bash
nginx_port=$(netstat -lntp|grep :80|wc -l)
if [ $nginx_port -ne 1 ];then
    
    systemctl start nginx &>/dev/null
    rc=$?
    sleep 3
    if [ $rc -ne 0 ];then
        systemctl stop  keepalived 
    fi
fi
[root@lb01 ~]# chmod +x /scripts/check_web.sh 
2.keepalived调用该脚本
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
global_defs {     
    router_id lb01   
}
#定义脚本名称,以及脚本所在的路径
vrrp_script check_web {
   script "/scripts/check_web.sh"
   interval 5
}
vrrp_instance VI_1 {
    state MASTER
    #nopreempt
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
}
    virtual_ipaddress {
        10.0.0.3
    }
    #调用脚本名称
    track_script {
        check_web
    }
}

如果nginx宕机,会导致用户请求失败,但是keepalived并不会进行切换。
1.判断nginx进程是否存在 ps aux
2.判断nginx的端口是否存在 netstat -lntp |grep:80|wc -l
3.通过curl来模拟访问,判断访问结果是否都OK curl -H Host:url.oldxu.com http://10.0.0.3.

六、keepalived高可用脑裂与故障解决**

​脑裂(split-brain),指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
对于无状态服务的HA,脑裂不会产生影响;但对于有状态的服务(如MySQL)的HA,必须要严格防止脑裂。(需要注意的是,在生产环境下的系统不能按照无状态服务HA的一套去配置有状态服务)
如何实现脑裂现象:
主节点master:10.0.0.3
备节点backup:10.0.0. 3

1.在备节点上编写检测脚本,测试如果能ping通主并且备节点还有VIP的话则认为产生了脑列
[root@lb02 conf.d]# cat /scripts/check_spilt.sh 
vip=10.0.0.3
master_ip=10.0.0.5

ping -c2 $master_ip &>/dev/null
if [ $? -eq 0 ];then
    ip_check=$(ip addr | grep "$vip" | wc -l)
    if [ $ip_check -eq 1 ];then
        echo "脑列"
        systemctl stop keepalived
    fi
fi

[root@lb02 conf.d]# cat /etc/keepalived/keepalived.conf 
global_defs {
    router_id lb02
}
vrrp_script check_spilt {
   script "/scripts/check_spilt.sh"
   interval 3
}
vrrp_instance VI_1 {
    state BACKUP
    nopreempt
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
    track_script {
    check_spilt
    }
}
同时开启两台的fierwalld
day46 高可用(keepalived)_第7张图片
脑裂

可参考:https://www.jianshu.com/p/4b46586e79aa

你可能感兴趣的:(day46 高可用(keepalived))