1 、Keepalived 概述
    keepalived 是一个类似于 layer3, 4 & 5 交换机制的软件,也就是我们平时说的第 3 层、第 4 层
    和第 5 层交换。 Keepalived 的作用是检测 web 服务器的状态,如果有一台 web 服务器死机,或工
    作出现故障,Keepalived 将检测到,并将有故障的 web 服务器从系统中剔除,当 web 服务器工作正
    常后 Keepalived 自动将 web 服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需
    要人工做的只是修复故障的 web 服务器。
    OSI七层
    企业微信截图_16529315406377.png
    OSI 七层相关协议
    企业微信截图_1652931554237.png
    2、Keepalived 工作原理
    Layer3,4&5 工作在 IP/TCP 协议栈的 IP 层, TCP 层,及应用层,。
    Layer3: Keepalived 使用 Layer3 的方式工作式时, Keepalived 会定期向服务器群中的服务器
    发送一个 ICMP 的数据包(既我们平时用的 Ping 程序) , 如果发现某台服务的 IP 地址没有激活,
    Keepalived 便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非
    法关机。 Layer3 的方式是以服务器的 IP 地址是否有效作为服务器工作正常与否的标准。
    Layer4: 主要以 TCP 端口的状态来决定服务器工作正常与否。如 web server 的服务端口一般是
    80,如果 Keepalived 检测到 80 端口没有启动,则 Keepalived 将把这台服务器从服务器群中删除。
    Layer5: Layer5 就是工作在具体的应用层了,比 Layer3,Layer4 要复杂一点,在网络上占用的带
    宽也要大一些。 Keepalived 将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相
    符,则 Keepalived 将把服务器从服务器群中剔除。
    3、 Keepalived 的作用与构建
    1.管理 VIP,VIP 会在 LVS 之间漂移
    2.监控 LVS 分发器
    运行在主分发的 Keepalived 会以组播的形式向网络中宣告自己,即主分发器还活着,备用节点能收
    到。当备用节点,在一个时间单位中收不到组播,备用节点会认为主 LVS 挂了,开始接手主分发器工作,
    把 VIP 配给自己。

    使用 Keepalived 构建 LVS-DR 模式的高可用集群,实验环境如下:

    名称 IP地址 网关 作用 备注
    hf120 DIP : 192.168.1.120/24
    VIP : 192.168.1.111
    192.168.1.1 主LVS

    | | hf121 | DIP : 192.168.1.121/24
    VIP : 192.168.1.111 | 192.168.1.1 | 副LVS |

    | | hf122 | 192.168.1.122/24 | 192.168.1.1 | RS1 web1 |

    | | hf123 | 192.168.1.123/24 | 192.168.1.1 | RS2 web2 |

    |

    网络拓扑:
    企业微信截图_16529315735387.png

    4、hf-120安装ipvsadm
    yum install ipvsadm -y

    5: hf-120安装keepalved
    wget http://www.keepalived.org/software/keepalived-1.2.16.tar.gz
    tar -xvf keepalived-1.2.16.tar.gz
    cd keepalived-1.2.16/
    #解决依赖
    yum -y install gcc openssl-devel libnfnetlink-devel
    ./configure —prefix=/usr/local/keepalived
    make && make install
    6:建立启动脚本
    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    #不知道脚本位置,搜索 chkconfig 字段的文件可以找到!
    grep “chkconfig” /usr/local/keepalived/etc/ -R
    chmod +x /etc/init.d/keepalived
    ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
    mkdir /etc/keepalived
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    vim /etc/sysconfig/keepalived
    改:14 KEEPALIVED_OPTIONS=”-D”
    为:14 KEEPALIVED_OPTIONS=”-D -f /etc/keepalived/keepalived.conf
    *
    KEEPALIVED_OPTIONS=”-D -f /etc/keepalived/keepalived.conf”


    #修改指定 keepalived 要加载的配置文件,设置正确的服务启动参数
    7:
    配置 Keepalived+LVS-DR 模式
    在这种模式下,虚拟 IP 在某时刻只能属于某一个节点,另一个节点作为备用节点存在。当主节点不
    可用时,备用节点接管虚拟 IP,提供正常服务。
    配置参数:
    节点 hf-120(主节点);
    节点 hf-121(备用节点) ; 虚拟 IP 192.168.1.111
    对外提供服务的 IP。 要求默认情况下由节点 hf-120 提供服务,当节点 hf-120 不可用时,由
    节点 hf-121提供服务(即虚拟 IP 漂移至节点 hf-121)**

    主节点 hf-121配置:
    cp /etc/keepalived/keepalived.conf{,.bak}
    cat keepalived.conf
    ! Configuration File for keepalived
    global_defs {
    notification_email {
    root@localhost
    }
    notification_email_from root@localhost
    smtp_server localhost
    smtp_connect_timeout 30
    router_id hf-120
    }
    vrrp_instance apache {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    192.168.1.111
    }
    }
    virtual_server 192.168.1.111 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    real_server 192.168.1.122 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    real_server 192.168.1.123 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    }
    systemctl restart keepalived
    systemctl enable keepalived

    ipvsadm -L -n
    企业微信截图_16529315986038.png**

    备用节点hf-121的配置
    编译安装,如同 hf-120 安装一样的步骤。(两台主机上的 keepalived 建议使用同一种安装方法
    进行安装,以方便后期维护)
    cat keepalived.conf
    ! Configuration File for keepalived
    global_defs {
    notification_email {
    root@localhost
    }
    notification_email_from root@localhost
    smtp_server localhost
    smtp_connect_timeout 30
    router_id hf-121
    }
    vrrp_instance apache {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    192.168.1.111
    }
    }
    virtual_server 192.168.1.111 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP
    real_server 192.168.1.122 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    real_server 192.168.1.123 80 {
    weight 1
    TCP_CHECK {
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
    }
    }
    }

    启动
    systemctl restart keepalived
    systemctl enable keepalived

    配置RS1
    vim /etc/init.d/lvsrsdr
    #写一个配置 RS 的脚本
    cat /etc/init.d/lvsrsdr
    #!/bin/bash
    #description:start relserver
    VIP=192.168.1.111
    source /etc/init.d/functions #加载环境变量(可以加载所有的环境变量)
    case $1 in
    start)
    echo ‘start LVS of Realserver DR’
    /sbin/ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255 up
    /sbin/route add -host $VIP dev lo:1
    echo ‘1’ > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo ‘2’ > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo ‘1’ > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo ‘2’ > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    stop)
    /sbin/ifconfig lo:1 down
    echo ‘Close LVS of Realserver DR’
    echo ‘0’ > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo ‘0’ > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo ‘0’ > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo ‘0’ > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
    *)
    echo “Usage:$0 (start|stop)”
    exit 1
    esac

    chmod +x /etc/init.d/lvsrsdr
    /etc/init.d/lvsrsdr start
    echo “/etc/init.d/lvsrsdr start” >> /etc/rc.local
    ifconfig -a
    企业微信截图_16529316122270.png

    yum install -y httpd
    echo 192.168.1.122 > /var/www/html/index.html
    systemctl restart httpd

    配置RS2(hf-123)
    从hf-122上拷贝脚本
    scp /etc/init.d/lvsrsdr root@192.168.1.65:/etc/init.d/
    再就到RS2(hf-123)执行
    chmod +x /etc/init.d/lvsrsdr
    /etc/init.d/lvsrsdr start
    echo “/etc/init.d/lvsrsdr start “ >> /etc/rc.local
    ifconfig -a
    企业微信截图_1652931629492.png

    yum install -y httpd
    echo 192.168.1.65 > /var/www/html/index.html
    systemctl restart httpd

    测试:
    http://192.168.1.111
    #一直显示 192.168.1.64 的内容,等待 50s 之后,查看
    50s 之前图
    企业微信截图_1652931652283.png
    50s之后图
    企业微信截图_16529316676207.png

    测试主备切换,首选在主上 hf-120上查看状态
    企业微信截图_16529316797202.png

    在hf-120 上停掉 keepalived, 模拟故障,在查看 hf-121
    **[root@hf-120 ~]# systemctl stop keepalived


    [root@hf-121 keepalived]# ipvsadm -L -n
    企业微信截图_16529316967352.png
    [root@hf-121 keepalived]# ip addr **
    企业微信截图_16529317113584.png

    从日志看:
    [root@hf121 keepalived]# tailf /var/log/messages
    企业微信截图_16529317265904.png

    当重启了主上的 keepalived,自动从备分发器转到主分发器上。因为备的优先级低。
    [root@hf-120 ~]# systemctl restart keepalived
    测试 RS 容错,停掉 hf-123 的 httpd 之后 hf-120 查看
    [root@hf-123 ~]# systemctl stop httpd
    [root@hf-120 keepalived]# ipvsadm -L -n
    企业微信截图_16529317657594.png

    打开主 LVS 的日志(/var/log/message),看到滚动从 LVS 中移除 192.168.1.65。
    [root@hf-120 ~]# tail /var/log/messages
    企业微信截图_16529317751759.png
    使用 ipvsadm -Ln 可以看到刚才关闭的那台机器的 IP 不在列表中了。
    当 keepalived 主从优先级一样时,当主恢复后,还是要回切资源的。第一次建立主从关系时,需要 10s 左右的认证时间。