ldirectord与keepalived健康检查-高可用

一. ldirectord健康检查
原理:(在后端的一台rs挂掉以后,自动删掉它的策略去找其它的rs不至于在调度到它时出错)
注意:ldirectord是自动创建ipvs规则表,所以在开启它时,要先关掉ipvsadm服务.
1.安装:(需要解决很多依赖性,根据安装时的报错一次解决依赖包)
2.rpm -ql ldirectord    ##查看安装路径
  cd /etc/ha.d
  cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf . ##拷贝配置文件
  vim ldirectord.cf
  virtual=172.25.31.100:80
        real=172.25.31.3:80 gate
        real=172.25.31.4:80 gate
        fallback=127.0.0.1:80 gate
        service=http
        scheduler=rr
        #persistent=600
        #netmask=255.255.255.255
        protocol=tcp
        checktype=negotiate
        checkport=80
        request="index.html"
        #receive="Test Page"
        #virtualhost=www.x.y.z
  /etc/init.d/ipvsadm stop    ##关闭ipvsadm
  /etc/init.d/ldirectord start
  ipvsadm -L
3.测试:在客户端 curl 172.25.90.100 查看到了两台rs上的发布页面,若停掉一台rs的apache,则对于用户来说是没有影响的,用ipvsadm -L查看策略可知,ldirectord已经将停掉的那台服务器的策略自动删除,这一切对用户来说是透明的.

二. keepalived:检测服务器状态(健康检查和高可用)
1.源码安装:
    1. tar zxf keepalived-1.2.20.tar.gz
    2. yum install libnfnetlink-devel-1.0.0-1.el6.X86_64.rpm

        yum install openssl-devel libnl-devel iptables-devel

        ./configure --prefix=/usr/local/keepalived   && make  && make install

    3. cd /usr/local/
    4. cd keepalived/
    5. ln -s /usr/local/keepalived/etc/keepalived/ /etc/
    6. ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    7. ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
    8. ln -s /usr/local/keepalived/sbin/keepalived /sbin/
    9. chmod +x /usr/local/keepalived/etc/rc.d/init.d/keepalived
   10. cd /etc/keepalived/
2.健康检查:
 vim keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1       
   smtp_connect_timeout 30 OpenSSL
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
  # vrrp_strict                注释掉火墙策略
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}
vrrp_instance VI_1 {            #vrrp实例定义部分
    state MASTER               调度器的状态为MASTER
    interface eth0                 工作网卡是eth0#设置对外服务的接口
    virtual_router_id 51      #设置虚拟路由标示,这个标示是一个数字,同一个vrrp实例使用唯一标示
    priority 100                    #定义优先级,数字越大优先级越高,在一个vrrp——instance下,master的优先级必须大于backup
    advert_int 1                   #设定master与backup负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {             #设置验证类型和密码
        auth_type PASS       #主要有PASS和AH两种
        auth_pass 1111       #验证密码,同一个vrrp_instance下MASTER和BACKUP密码必须相同
 }
    virtual_ipaddress {         VIP #设置虚拟ip地址,可以设置多个,每行一个
        172.25.31.100
    }
}

virtual_server 172.25.31.100 80 {     #设置虚拟服务器,需要指定虚拟ip和服务端口
    delay_loop 6                  #健康检查时间间隔
    lb_algo rr                    #负载均衡调度算法
    lb_kind DR                    #负载均衡转发规则
    #persistence_timeout 50       #设置会话保持时间,对动态网页非常有用
    protocol TCP                  #指定转发协议类型,有TCP和UDP两种

    real_server 172.25.31.3 80 {    #配置服务器节点1,需要指定real server的真实IP地址和端口
        weight 1                    #设置权重,数字越大权重越高
        TCP_CHECK {                 #realserver的状态监测设置部分单位秒
            connect_port 80         #监测端口
            connect_timeout 3        #超时时间
            nb_get_retry 3            #重试次数
            delay_before_retry 3     #重试间隔
        }
    }
     real_server 172.25.31.4 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

virtual_server 172.25.31.100 21 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP

    real_server 172.25.31.3 21 {
        weight 1
        TCP_CHECK {
            connect_port 21
            connect_timeout 3
            retry 3
            delay_before_retry 3
        }
    }

    real_server 172.25.31.4 21 {
        weight 1
        TCP_CHECK {
            connect_port 21
            connect_timeout 3
            retry 3
            delay_before_retry 3
         }

    }

}

注意有坑:TCP_CHECK 和 ‘{' 之间有一个空格,要不然会导致某一个RS用ipvsadm查看不到,实现不了负载均衡。

作用:监听了80和21端口,若一个后台服务器挂掉,客户端看不到错误反馈,因为健康检测的性质使访问跳转到正常的后台服务器上.
3.高可用性(一个调度器挂掉以后,可以让另外一个优先级比它低的调度器代替从而使客户端能正常访问且感受不到这种跳转)
vim keepalived.conf(在配置文件中做以下修改)
vrrp_instance VI_1 {
    state BACKUP             调度器的状态为BACKUP
    interface eth0
    virtual_router_id 88
    priority 50              优先级改为比MASTER低的50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.31.100
    }
注意:关闭调度器的防火墙和selinux可以减少一些不必要的错误.
排错思想:在vs端用命令ipvsadm -Ln查看策略,并看是否有客户端的更新记录,若有则证明vs服务器是没有问题的,检查rs服务器的http是否开启,iptables是否关闭,VIP是否加入到设备上还有arpabled策略是否配置好,确保以VIP进来的数据包要被丢弃(使调度器发挥作用),以VIP出去的数据包要伪装成rs真正的ip.

在客户端用命令:arp -an | grep 100 查看rs的MAC地址,看是哪个rs在工作.

                                arp -d  vip     删除arp的缓存

补充:chkconfig --list ldirectord   ##查看开机启动项,在测试keepalived时关掉ldirectord

扫描二维码关注公众号,回复: 1496555 查看本文章

            chkconfig ldirectord on       ##开机自动启动

可以把添加ip和mount的命令写在/etc/rc.local脚本中,会永久写入

ldirectord和keepalived的比较:ldirectord用于健康检查,检查的只有rs后端服务器,而keepalived除了可以检查后端服务器,还可  以检查vs服务器的状态,正是由于这个特点keepalived才可以用于高可用.


  

猜你喜欢

转载自blog.csdn.net/weixin_40555670/article/details/79344924