美文网首页
Keepalived实现IP地址主备模式转换

Keepalived实现IP地址主备模式转换

作者: 不知岁月惜 | 来源:发表于2017-10-31 08:03 被阅读0次
    Keepalived使用的vrrp协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP);Keepalived的目的是模拟路由器的高可用,一般Keepalived是实现前端高可用,常用的前端高可用的组合有,就是我们常见的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。总结一下,Keepalived中实现轻量级的高可用,一般用于前端高可用,且不需要共享存储,一般常用于两个节点的高可用。
    提到高可用我们再来把Heartbeat、Corosync、Keepalived这三个集群组件互相比较一下.
    Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。
    在路由器上配上静态路由就会产生单点故障,那该怎么办呢?VRRP就应用而生了,VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器.
    VRRP工作原理, 在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台的物理的机器并不能同时工作,而是由一台称为MASTER的负责路由工作,其它的都是BACKUP,MASTER并非一成不变,VRRP让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER拥有一些特权,比如,拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。
    VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址。所以,在一个虚拟路由 器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对客户端来说,这种主从的切换是透明的。
    在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP通告信息(VRRPAdvertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到通告信息), 多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。由于安全性考虑,VRRP包使用了加密协议进行加密
    :为什么要用keepalived+lvs
    lvs是一个在四层上实现后端realserver的负载均衡的集群,lvs遗留下两个问题,一个是lvs的单点故障;第二个是lvs不能检测后端realserver的健康状态检查。
    解决lvs的单点故障就用到了高可用集群:
    
    1.可以是heartbeat+ldirectord这种重量级的;
    
    2.可以是keepalived+lvs这种轻量级的解决方案。
    
    解决lvs不能检测后端realserver的健康状态也后很多种方法:
    
    1.可以在lvs上写脚本ping后端realserver的ip地址,ping几次发现ip地址ping不通则在ipvs规则里面删除,
    当后端服务器可以ping了,则把后端realserver添加到ipvs规则里面。
    
    2.可以在lvs上写脚本请求后端realserver的测试几次网页文件,查看状态码是否为200,不是则在ipvs规则里面清楚,
    当测试网页返回的状态吗是200之后,则把后端realserver添加到ipvs规则里面
    
    以上两种方法都是依赖于脚本,keepalived的出现解决了不依赖于脚本,也可以对后端realserver的健康状态检查,keepalived的配置文件里面可以自行
    生成ipvs的规则,并且自行检测后端realserver的状态,当后端realserver不能提供服务了,keepalived会自行将其在ipvs规则里面删除,
    当后端realserver可以提供服务了,又自行的在ipvs规则里面添加。
    

    实现主从模式IP地主转换

    [root@node1 ~]#sentos7 172.18.70.40 主
    [root@node2 ~]#sentos7 172.18.70.50 备
    互相名字解析便于控制
    [root@node1 ~]#vim /etc/hosts
    172.18.70.50 node2
    [root@node2 ~]#vim /etc/hosts
    172.18.70.40 node1
    
    修改同步时间,node1,node2
    [root@node1 ~]#ntpdate 172.18.0.1    先同步     
    [root@node1 ~]#vim /etc/chrony.conf     后修改配置,配置文件是在时间出不多的情况下同步
    # Use public servers from the pool.ntp.org project.
    # Please consider joining the pool (http://www.pool.ntp.org/join.html).
    server 172.18.0.1 iburst        网络ip同步时间
    server 0.centos.pool.ntp.org iburst
    server 1.centos.pool.ntp.org iburst
    server 2.centos.pool.ntp.org iburst
    server 3.centos.pool.ntp.org iburst
    
    [root@node1 ~]#systemctl is-enabled chronyd    查询是否开机启动时间
    [root@node1 ~]#systemctl enable chronyd   开机启动
    
    免密码登录 ,安装包,备份配置文件,生成随机口令
    [root@node1 ~/.ssh]#ssh-keygen  免密码登录   
    [root@node1 ~]#cd .ssh  
    [root@node1 ~/.ssh]#ssh-copy-id -i id_rsa.pub  node2:  第一次要输入口令
    [root@node2 ~]#ssh-keygen
    [root@node2 ~/.ssh]#ssh-copy-id node1:
    
    [root@node1 ~]#yum install ipvsadm keepalived      安装包
    [root@node2 ~]#yum install ipvsadm keepalived 
    
    [root@node1 /etc/keepalived]#cp keepalived.conf{,.bak}   备份
    [root@node1 ~]#openssl rand -hex 4       随机口令
    dd2edd1d
    
    修改node1 keepalived配置(全局配置段和主机配置段)
    [root@node1 /etc/keepalived]#vim keepalived.conf
    global_defs {
       notification_email {
        root@localhost             邮箱
         }
       notification_email_from node1@localhost     发件邮箱
       smtp_server 172.18.0.1      邮件发送地址
       smtp_connect_timeout 30  超时时长
       router_id node1    主机名
       vrrp_mcast_group4 224.100.100.100   多播地址  
    }
    
    vrrp_instance VI_1 {        vrrp实例     多个实例需要再复制
        state MASTER     主
        interface ens33           网卡
        virtual_router_id 88     集群组
        priority 100       优先级 
        advert_int 1      发送间隔
        authentication {
            auth_type PASS
            auth_pass dd2edd1d     随机口令
        }
        virtual_ipaddress {
            172.18.70.100/16 dev ens33     vip地址     
        }
    }
    
    修改node2 keepalived配置(全局配置段和备机配置段)
    [root@node2 /etc/keepalived]#vim keepalived.conf 
    
    ! Configuration File for keepalived
    
    global_defs {
       notification_email {
        root@localhost
         failover@firewall.loc
         sysadmin@firewall.loc
       }
       notification_email_from node1@localhost
       smtp_server 127.0.0.1
       smtp_connect_timeout 30
       router_id node2       主机2
       vrrp_mcast_group4 224.100.100.100
    }
    
    vrrp_instance VI_1 {
        state BACKUP        备
        interface ens33
        virtual_router_id 88     
        priority 90      优先级要比主低
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass dd2edd1d
        }
        virtual_ipaddress {
            172.18.70.100/16 dev ens33   
    
    [root@node1 /etc/keepalived]#systemctl restart keepalived.service 启动服务 发通告100
    [root@node1 ~]#ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:67:33:0e brd ff:ff:ff:ff:ff:ff
        inet 172.18.70.40/16 brd 172.18.255.255 scope global ens33     启动服务后vip地址自动绑定在主机器node1ip上
           valid_lft forever preferred_lft forever
        inet 172.18.70.100/16 scope global secondary ens33
           valid_lft forever preferred_lft forever
        inet6 fe80::20c:29ff:fe67:330e/64 scope link 
           valid_lft forever preferred_lft forever
    
    [root@node1 /etc/keepalived]#tcpdump -i ens33 -nn host 224.100.100.100 抓包 可以看到node1在发广播,88di虚拟器的地址,100优先级
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
    21:40:59.250327 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
    21:41:00.260083 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
    21:41:01.261505 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
    21:41:02.263420 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
    21:41:03.264706 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
    
    [root@node2 /etc/keepalived]#systemctl restart keepalived.service node2开启服务 没有发通告90
    [root@node1 /etc/keepalived]#systemctl stop keepalived node1关闭服务 在查看抓包状态
    [root@node1 /etc/keepalived]#tcpdump -i ens33 -nn host 224.100.100.100 可以看到node1机器中断为0后node2机器马上接管服务
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
    22:06:18.805795 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
    22:06:19.806961 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 100, authtype simple, intvl 1s, length 20
    22:06:20.767973 IP 172.18.70.40 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 0, authtype simple, intvl 1s, length 20
    22:06:21.419400 IP 172.18.70.50 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 90, authtype simple, intvl 1s, length 20
    22:06:22.421297 IP 172.18.70.50 > 224.100.100.100: VRRPv2, Advertisement, vrid 88, prio 90, authtype simple, intvl 1s, length 20
     224.100.100.100:    多播模式
    
    [root@node2 /etc/keepalived]#ip a MULTICAS多播模式
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:50:56:36:e6:7c brd ff:ff:ff:ff:ff:ff
        inet 172.18.70.50/16 brd 172.18.255.255 scope global ens33
           valid_lft forever preferred_lft forever
        inet 172.18.70.100/16 scope global secondary ens33       node1关闭服务后VIP地址自动转到了node2机器上面
           valid_lft forever preferred_lft forever
        inet6 fe80::250:56ff:fe36:e67c/64 scope link
    
    已经实现IP的准备模式转换

    相关文章

      网友评论

          本文标题:Keepalived实现IP地址主备模式转换

          本文链接:https://www.haomeiwen.com/subject/gkmmpxtx.html