keepalived 主备使用

本篇主要介绍一下 keepalived 的基本的 主备使用

keepalived备机出现vip keepalive主备_java

1.概述

什么是 keepalived呢,它是一个集群管理中 保证集群高可用的软件,防止单点故障,keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路冗余协议

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

通俗点说就是: keepalived中master节点会发送 ARP广播到 keepalived 的 backup中,如果vrrp没收到包则认为 master宕机,重新选举master ,并且把vip给漂移到新的master机器上,实现了高可用

2.准备工作

准备2台机器 , 把111定义为 keepalived 的 MASTER 节点

ip

keepalived

172.16.225.111

MASTER

172.16.225.110

BACKUP

3.安装keepalived

我这里简单点直接使用 yum 安装, 也可以通过二进制包安装

分别在2台机器上都要安装 keepalived

yum -y install keepalived

安装完成后 有 /etc/keepalived/keepalived.conf 默认配置文件如下:

! Configuration File for keepalived

global_defs {
   # 通知 发邮件的 
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
#VRRP 实例定义块
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}
#虚拟服务器定义块
virtual_server 192.168.200.100 443 {
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.201.100 443 {
        weight 1
        SSL_GET {
            url {
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}
....
  • global_defs 定义全局配置 ,如 邮件配置
  • VRRP 实例定义块: 主要配置
  • 虚拟服务器定义块: LVS 的配置 本篇不涉及

4.配置 2台 机器的keepalived

4.1 配置 MASTER 机器

把111机器的 keepalived.conf 文件修改如下

! Configuration File for keepalived

global_defs {
   router_id LB111
}

vrrp_instance VI_1 {
    # 定义为master
    state MASTER 
    # 网卡 
    interface ens160
    #这个一定要 和 110 一样 规定为一组路由器中的机器
    virtual_router_id 51
    # 优先级 
    priority 100 
    # vrrp组之间的心跳包频率 默认1s
    advert_int 1
    # 组的认证信息 可能有多个路由器组,为了不让把1组的vip漂移到2组的机器上
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟出来的 ip 地址
    virtual_ipaddress {
        172.16.225.200
    }
}
4.2 配置 BACKUP 机器
! Configuration File for keepalived

global_defs {
   router_id LB111
}

vrrp_instance VI_1 {
    # 指定 BACKUP 备用机
    state BACKUP
    interface ens160
    # 虚拟router id 一组的机器要一致
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
       172.16.225.200
    }
}

5.启动 keepalived

分别在2台机器上直接启动

#启动keepalived
systemctl start keepalived 

#查看状态
systemctl status keepalived

可能启动不成功: IPVS: Can't initialize ipvs: Protocol not available

[root@middle keepalived]# tail -f  /var/log/messages
Dec  8 06:23:39 middle systemd: Started LVS and VRRP High Availability Monitor.
Dec  8 06:23:39 middle Keepalived_vrrp[17171]: VRRP_Instance(VI_1) removing protocol VIPs.
Dec  8 06:23:39 middle Keepalived_vrrp[17171]: Using LinkWatch kernel netlink reflector...
Dec  8 06:23:39 middle Keepalived_vrrp[17171]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Dec  8 06:23:39 middle Keepalived_healthcheckers[17170]: `IPVS: Can't initialize ipvs: Protocol not available`
Dec  8 06:23:39 middle Keepalived_healthcheckers[17170]: Stopped
Dec  8 06:23:39 middle Keepalived[17169]: Keepalived_healthcheckers exited with permanent error FATAL. Terminating
Dec  8 06:23:39 middle Keepalived[17169]: Stopping
Dec  8 06:23:40 middle Keepalived_vrrp[17171]: Stopped
Dec  8 06:23:44 middle Keepalived[17169]: Stopped Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2

需要安装 ipvsadm

yum -y install ipvsadm

再次启动

keepalived备机出现vip keepalive主备_springboot_02

查看VIP 已经在 111 master节点的机器上了 并且在 ens160这个网卡上

keepalived备机出现vip keepalive主备_spring_03

6. 模拟 宕机MASTER

当 master机器如果出现了故障 比如断点 或者 关机等等.. 那么 master机器上的 keepalived 肯定不存在了

keepalived备机出现vip keepalive主备_springboot_04

查看 BACKUP 机器上的 ip 可以发现 vip 已经漂移到这个机器上了

keepalived备机出现vip keepalive主备_高可用_05

在ping 的同时 模拟宕机 可以看到中间短暂的超时 后面立即恢复了

keepalived备机出现vip keepalive主备_springboot_06

总结

本篇主要介绍了keepalived 的基本的主备使用方式, 不过主备方式有缺点 它的备用服务器一直不工作 有点资源浪费, 可以改成 双主备模式 有机会再说

keepalived 可以结合 check检查脚本 来检测如 nginx redis mysql 等等 实现这些服务的高可用方式