Keepalived高可用

Keepalived高可用

高可用介绍

    1.什么是高可用
    2.高可用使用什么方式实现
        硬件
        软件  keepalived
    3.keepalived如何实现高可用?
        通过vrrp协议实现的高可用. 虚拟路由冗余协议    
            VMAC和VIP实现高可用技术方案      地址漂移
    4.keepalived核心概念
    1.如何确定谁是主节点谁是备节点。(投票选举?优先级?)
    2.如果Master故障,Backup自动接管,那Master恢复后会夺权吗?(抢占式、非抢占式)
    3.如果两台服务器都认为自己是Master会出现什么问题?(脑裂)

keepalived 服务安装配置

1.keepalived安装

    [root@lb01 ~]# yum install keepalived -y
    [root@lb02 ~]# yum install keepalived -y

2.keepalived主配置

        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
        }
    }

3.keepalived备份配置文件

    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
        }
    }

4.keepalived启动

    [root@lb01 ~]# systemctl start keepalived
    [root@lb01 ~]# systemctl enable keepalived

5.主配置文件和备配置文件的区别

    Keepalived配置区别  Master配置    Backup节配置
    route_id(唯一标识)      lb01    lb02
    state(角色状态)         MASTER  BACKUP
    priority(优先级)       150     100

测试

        1.测试IP地址是否会自动漂移  systemctl stop keepalived
        2.测试漂移之后,检查windows的arp缓存表   arp -a
        3.使用wireshark抓包分析

抢占式(默认)和非抢占式

    1、两个节点的state都必须配置为BACKUP(官方建议)
    2、两个节点都在vrrp_instance中添加nopreempt参数
    3、其中一个节点的优先级必须要高于另外一个节点的优先级。
    PS: 两台服务器都角色状态启用nopreempt后,必须修改角色状态统一为BACKUP,唯一的区分就是优先级。

配置步骤

        1.修改state 为backup
        2.增加nopreempt

如何将keepalived与nginx负载均衡结合

        强调: keepalived只做地址漂移,keepalived与nginx没有任何关系.
        user --> blog.oldboy.com  --> 10.0.0.3 --->lb01  -->80 --->nginx
    
        1.先让10.0.0.6 能够正常的访问到对应的业务  scp
        2.修改windows Host解析,指向到10.0.0.6
        3.接入keepalived技术,修改windows Host解析  10.0.0.3
        4.测试一台出现故障,另一台是否能自动接管,并且正常访问

如何使用keepalived (生产)

        1.需要有硬件服务器,在云上不需要keepalived,阿里云自带高可用.
        2.申请虚拟IP,是内网的,公网能不能申请

keepalived检测脑裂

检测脑裂脚本

vip=10.0.0.3
master_ip=10.0.0.5
while true;do

    #1.通过ping命令测试主是否是通
    ping -c 2 -W 3 $master_ip &>/dev/null
    
    #2.ping的通master的ip,同时本地还存在一个vip地址
    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 5
done

nginx故障问题解决

1.尝试拉起nginx

2.如果拉不起nginx,则把keepalived杀死

脚本文件

[root@lb01 ~]# cat /scripts/check_web.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

配置keepalived支持脚本

1.给脚本增加执行权限

[root@lb01 conf.d]# chmod +x /scripts/check_web.sh

2.修改keepalived配置文件

[root@lb01 conf.d]# 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 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_web
    }
}

keepalived高可用总结

1.高可用目的
    减少系统故障时间
2.高可用通常使用keepalived来实现
3.keepalived底层借助的是vrrp虚拟路由冗余协议
4.vrrp诞生\vrrp解决了什么问题
    1.用户手动修改IP   (人员过多的情况,  pass)
    2.将backup机器的地址改为master的IP
        1.arp缓存表的问题:
            1.清理所有用户的arp缓存表,让其重新广播   那master恢复了怎么办?
    3.vrrp解决这样问题?
        新增一个vip  ->vmac(对应的是真实服务器的mac地址)
            1.用户只需要链接vip,无需在关心底层有多少机器
            2.当master故障,backup顶上时,会通知客户端更新vip对应的vmac

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