2017 10-30 keepalived应用

作者: 楠人帮 | 来源:发表于2017-10-30 21:56 被阅读0次

    一.keepalived介绍

    1.keepalived的功能

    实现集群服务的高可用性(HA),在实际工作中当lvs调度器发生故障时需要这种机制实现工作的高可用性,就是说当一个调度器出现故障时,可以由另一个服务器继续接管继续工作。

    2.常用的高可用集群的实现方案

    vrrp:Virtual Router Redundancy Protocol——虚拟路由冗余协议

    3.常见的keepalived配置术语

    虚拟路由器:Virtual Router
    虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
    物理路由器:
    master:主设备
    backup:备用设备
    priority:优先级
    VIP:Virtual IP
    VMAC:Virutal MAC (00-00-5e-00-01-VRID)
    通告:心跳,优先级等;周期性 
    工作方式:抢占式,非抢占式 
    安全工作: 认证: 无认证 简单字符认证:预共享密钥 MD5 
    工作模式:
    主/备:单虚拟路径器
    主/主:主/备(虚拟路径器1),
    备/主(虚拟路径器2)

    *注意:vrrp协议的软件实现,原生设计目的为了高可用ipvs服务.换句话说该协议软件的实现就是搭配lvs使用,达到高可用的目的,彼此为绝配的关系
    双方的搭配模式主要的功能:
    vrrp协议完成地址流动 
    为vip地址所在的节点生成ipvs规则(在配置文件中预先定义) 
    为ipvs集群的各RS做健康状态检测 
    基于脚本调用接口通过执行脚本完成脚本中定义的功能, 进而影响集群事务,以此支持nginx、haproxy等服务

    4.keepalived的组成

    (1)组件: 
    核心组件: vrrp stack ipvs wrapper checkers 
    控制组件:配置文件分析器 IO复用器  内存管理组件

    二.keepalived的实现

    1.HA Cluster 配置准备的准备工作
    (1)集群环境的时间同步,也就说各个节点的时间必须相同
    使用的服务是ntp和chrony(在7上使用)
    首先使用ntpdate 172.18.0.1(假设为互联网时间),与互联网时间同步
    上述方法是暂时同步时间,过一段时间后还是会出现差别
    然后vim /etc/ntp.conf


    image.png

    该方法可以实现与互联网时间的实时同步,为了方便直接设置为开机自启chkconfig ntpd on
    然后service ntpd start
    这样只需要其他服务在ntp.conf或是chrony.conf配置文件中和该主机时间同步即可


    image.png
    (2)清除各主机之间的防火墙策略和selinux策略,以防影响实验结果
    (3)各节点之间以主机名的方式实现互相通讯
    在各个节点中设置:
    hostname set-hostname node1
    image.png
    hostname set-hostname node2
    image.png

    然后在/etc/hosts文件中写下对方的主机名,实现解析通讯


    image.png
    image.png
    (4)实现基于Key的ssh服务验证,相互信任,防止黑客的干扰
    实现方法:
    执行ssh-keygen命令会生成
    image.png
    ssh-copy -i id_rsa.pub node2:
    image.png

    三.keepalived的具体应用

    1.实现简单的主备工作模式

    拓扑结构图


    image.png

    (1)yum install keepalived
    vim /etc/keepalived/keepalived.conf


    image.png
    在另一主机上,设置为主服务器,将配置文件中的优先级调为100,比备用主机数值大即可,state为MASTER
    其他不变

    配置完成,可以通过tcpdump -i eth0 -nn host 224.99.99.62来测试效果


    image.png
    此时的虚拟vip地址也被绑定在主服务器上,备用服务器没有该地址
    image.png
    此时即使将备服务器的keepalived开启也无法工作,因为它的优先级小于主服务器,所以无法参与工作。但是此时如果将主服务关掉,那么备用服务器会开始工作
    image.png
    此时虚拟vip也切换到备用服务器上
    image.png
    主从模式配置成功
    • 记录日志
      vim /etc/sysconfig/keepalived


      image.png
    • vim /etc/rsyslog.conf


      image.png

      设置完成后,重启日志服务和keepalived
      查看日志 ll /var/log/keepalived.log


      image.png
    • mail设置
      通过mail设置可以实现rs服务器的上线下线通知功能,并且通过触发脚本来实现主备的切换

    具体实现:
    在 /etc/keepalived/下编写notify.sh通知脚本

      1 #!/bin/bash
      2 #
      3 contact='root@localhost'
      4 notify() {
      5   mailsubject="$(hostname) to be $1, vip floating"
      6   mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
      7   echo "$mailbody" | mail -s "$mailsubject" $contact
      8 }
      9 case $1 in
     10   master)
     11     notify master
     12     ;;
     13 backup)
     14     notify backup
     15     ;;
     16 fault)
     17     notify fault
     18     ;;
     19 *)
     20   echo "Usage: $(basename $0) {master|backup|fault}"  
     21   exit 1
     22   ;;
     23 esac
    

    写完后执行 ./notify master 观察mail

    image.png

    ./notify backup


    image.png

    因此在keepalived.conf加入出发脚本


    image.png
    主要功能就是通过邮件进行通知主服务器与备用服务器的切换,当之前的主服务出现故障后,配置文件会触发通知脚本告知另一个备用服务器变为主服务器
    • 注意在备用服务器上也要进行相同的设置

    2.实现主主模式

    image.png

    解释:
    针对route_id为80,虚拟vip为192.168.136.62这个地址,node1位master,node2为backup
    针对route_id为70,虚拟vip为192.168.136.63这个地址,node1为backup,node2为master
    总体来说仍然是主备模式,只是针对不同的vip地址而定义了相对的主主模式

    • 具体实现步骤:
    vim /etc/keepalived/keepalived.conf
    再写一个实例
    vrrp_instance VI_2 {
        state BACKUP——由原来的MASTER变为BACKUP
        interface eth0
        virtual_router_id 70——设置一个新的id号
        priority 90——优先级要变低
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 6ceadb21——设置新的密码
            
        }   
        virtual_ipaddress {
            192.168.136.63/24——配置新的vip地址
        }   
          notify_master "/etc/keepalived/notify.sh master"
          notify_backup "/etc/keepalived/notify.sh backup"
          notify_fault  "/etc/keepalived/notify.sh fault"
          
    }
    

    在备用服务器上设置同样内容

    vrrp_instance VI_2 {
        state MASTER——由原来的BACKUP变为MASTER
        interface ens33
        virtual_router_id 70——设置一个新的id号
        priority 100——优先级要变高
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 6ceadb21——设置新的密码
            
        }   
        virtual_ipaddress {
            192.168.136.63/24——配置新的vip地址
        }   
          notify_master "/etc/keepalived/notify.sh master"
          notify_backup "/etc/keepalived/notify.sh backup"
          notify_fault  "/etc/keepalived/notify.sh fault"
          
    }
    

    配置完成后进行测试


    image.png

    3.结合后端RS服务器的高可用性的实现(与Lvs的结合应用)

    (1)结合ipvs的主从服务调度(DR调度模式)

    拓扑图 基于结合lvs的主从模式的高可用的工作模式


    image.png

    (2)在rs服务器端上执行lvs脚本


    image.png
    (3)在主备服务器上设置keepalived.conf脚本
    image.png
    image.png

    将该脚本复制到另一个备用服务器上
    scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/keepalived.conf
    配置完成后,重启服务查看是否具有ipvs规则
    ipvsadm -Ln


    image.png
    在备用服务器上同样具有ipvs规则
    image.png
    配置成功
    (4)在客户端上进行访问,测试结果
    image.png
    结果正确
    (5)测试如果主服务器出现故障,在客户端进行测试,观察结果
    image.png

    利用tcpdump命令查看主从是否切换


    image.png
    (6)健康性检查的测试,当其中的一个RS服务器故障后,在客户端测试观察结果
    image.png

    4.实现主主模式的集群调度

    • 调度拓扑图


      image.png
    • 正常情况下lvs2应该选择新的另外两个服务器进行测试,并且后面的也要建立两个新的rs服务器,但是本实验为了节省资源就都在同样的两台机上做实验,实现互为主从的调度实验
      设置两个vip
      vip1:192.168.136.62
      vip2:192.168.136.63
      当访问vip1时170为主
      当访问vip2时183为主
      实验目的明确,接下来实现具体的配置步骤
      (1)首先在各自的rs服务器上执行lvsj脚本


      image.png

      执行脚本后观察


      image.png
      (2)vim /etc/httpd/conf/httpd.conf在rs服务器上设置虚拟主机
      image.png
      ip a a 192.168.136.133 dev eth0
      mkdir /app/web1
      mkdir /app/web2
      echo images 134 > /app/web1/index.html
      echo app 133 > /app/web2/index.html
      (3)在lvs调度器上
      vim /ect/keepalived/keepalived.conf
      image.png

      另一个同上
      配置完后,重启服务观察ipvs


      image.png
      (4)在rs服务器端上测试
      image.png
      显示成功,但是在客户端去测试无法正确显示,因此建议不要在统同一主机配置
      (5)一个vip只往一个rs服务器端上调度
      image.png
      减少服务器数量
      只要访问63就往173上调度
      只要访问62就往134上调度

    5.实现keepalived的nginx的高可用集群调度

    (1)在keepalived的配置文件中配置脚本


    image.png
    image.png

    (2)另一台调度器执行相同操作
    该脚本的含义是:先设置脚本,然后对脚本进行检查,如果判断出down文件存在,就将优先级高的调度器的数值减少20,使另一个调度器优先级变高成为主服务器,进行继续的工作。当down文件删除后,又恢复原来的主备模式
    (3)对脚本进行测试


    image.png
    在/etc/keepalived/下创建一个down文件
    就会实现主从切换
    image.png

    删除down文件后又重新恢复


    image.png
    (4)对此可以使用脚本来实现nginx的高可用集群调度
    在/etc/nginx/nginx.conf中进行配置
    image.png
    image.png
    开启了反向代理功能
    关闭httpd 服务打开nginx服务
    (5)对nginx服务做健康性检查,在keepalived.conf的脚本中进行设置
    image.png
    image.png
    另一个调度器同上
    (6)关闭keepalived服务,使用tcpdump命令测试,先开启一个keepalived服务
    image.png

    (7)另一个也开启,并杀死之前的keepalived服务


    image.png
    显示正确,主服务器减少20,使从服务器变为主服务器工作

    相关文章

      网友评论

        本文标题:2017 10-30 keepalived应用

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