keepalive简介及实例

 

keepalive简介
                 设计最初目的:为ipvs提供高可用功能的
    早期的功能:
               1,将IP转移到另一个主机上 (地址漂移依赖VRRP协议) 
               2,转移开启lvs服务     
               3,health check  健康状况检查
  之后为了对其他额外的服务进行监控,又增加了新功能
  后期增加的功能:
       调用外部脚本(命令)来监控外部其他资源
                例子:vrrp_script "killall -0 httpd" 用命令来检测优先级谁高谁低
     通知机制:
                  例子:notify-master "scipt" 
                              notify-backup "script" 定义转换成主备节点的时候执行什么脚本
       核心功能:--enable-vrrp  (启用)
                          --enable-snmp (不用的话可以不启用)


VRRP协议简介
                virtual routing redundent protocol  (虚拟路由冗余协议) 

         目的:实现网关地址的飘移,(一个故障,会链接到另一个上面)
                      配置在路由器上,只需启动ARRP功能
         路由组(备份组)
                   将多个物理路由归纳在一个组内,有主从关系M/S 主主关系M/M
                  在一个物理设备上,可以配置多个组,靠组ID 区别不同的组
  工作方式
            1,选举协议
            2,抢占(谁抢到谁用)
            每个路由组有自己的ID ,
   优先级范围 0-255
     认证方式:
            simple  简单字符认证
            Md5 md5 认证
     定时器  (发送通告报文,)

     VRRP工作过程:
            启动VRRP,初始化状态下,通过协议比较优先级,确定主从关系;
         (主如果联系不到外部时 会降低自己的优先级,)  抢占模式下,(会依赖与其他外部的资源)从主机收到通告报文,和自己的优先级比较,要是自己高的话代替主的,自己成为主主机

       ---------------keepalived的配置文件详解-----------------

global_defs                           ----> 全局的定义
vrrp_script chk_name {
script ****
interval 2
weight -2                        ---> 执行一个外部脚本进行检测,2s检测一次,失败的话优先级-2
vrrp_instance VI_1                ---> 定义虚拟路由(组)
state MASTER | BACKUP     --->定义初始的时候谁是主谁是备 M为主,B为备
virtual_router_id 51                   -->ID号
priority 100                          ---> 定义优先级
interface eth0                         ---> 在哪个接口上配置地址完成选举,
advert_int 1                              ---> 通告时长
authentication {
auth_type PASS                --->(字符串认证)
auth_pass 1111                ---> 认证
virtual_server 192.168.200.100 443 {        ---> 虚拟服务器 地址 端口
delay_loop 6                       --->获取服务等待的时间(了解)
lb_algo rr                         -->调度方法
lb_kind NAT                         ---> 类型
nat_mask 255.255.255.0
persistence_timeout 50              --->  持久链接时间
protocol TCP                        ---> 协议
sorry_server 127.0.0.1              --->所有RS down了,从本地web返回一个状态
track_script {
chk_schedown                            ---->定义在什么场景下执行脚本
}
real_server 192.168.201.100 443 {
weight 1                       --->权重
SSL_GET {
url {
path /                  ---> 获取web的目录主页,200的就是正常
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
connect_timeout 3
nb_get_retry 3       ----> 尝试的次数
delay_before_retry 3 ----> 延迟几秒再尝试}}}
notify_master "/etc/keepalived/notify.sh -n master -a 172.16.100.1"
notify_backup "/etc/keepalived/notify.sh -n backup -a 172.16.100.1"
notify_fault "/etc/keepalived/notify.sh -n fault -a 172.16.100.1"
-->在发生vrrp事务的时候,发送警告邮件给指定管理员(自己创建相关的notify脚本)

 

           -------------LVS + keepalived的实现---------------
安装包:(官方网站 www.keepalive.org)

规划: 
   两个高可用节点           HA1  172.16.21.14  web: wei hu zhong ...
                                   HA2  172.16.21.13  web: wei hu zhong (2)... 
                                      VIP 172.16.21.9 
  两个RS                        RS1  172.16.21.15  web: node1
                                    RS2  172.16.21.16  web: node2

前提:
     1,时间同步  2,主机名称一致   3,双机互信  4,需要安装上web服务,并关闭selinux


1)安装keepalived
     #yum -y --nogpgcheck localinstall keepalived

2)配置keepdslived的配置文件
   (上面已经对配置文件做了详解)

! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from [email protected]
smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}
vrrp_script chk_schedown {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"
interval 2
weight -2
}
vrrp_instance VI_1 {
interface eth0
state MASTER
priority 101
virtual_router_id 56
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16.20.9/16 dev eth0 label eth0:0
}
track_script {
chk_schedown
}
notify_master "/etc/keepalived/notify.sh -n master -a 172.16.20.9"
notify_backup "/etc/keepalived/notify.sh -n backup -a 172.16.20.9"
notify_fault "/etc/keepalived/notify.sh -n fault -a 172.16.20.9"
}
virtual_server 172.16.20.9 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#    persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80
real_server 172.16.20.2 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.16.20.4 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

 

需要配置一个脚本执行在发生vrrp事务的时候,发送警告邮件给指定管理员
        (自己创建相关的notify脚本,)
3)将其配置文件复制给HA2,并修改其优先级大小和类型 
     #scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/
  #scp /etc/keepalived/notify.sh node2:/etc/keepalived/
   HA2是备节点,所以优先级要小于主的,类型是BACKUP

 

4)RS端设置
      RS1 和 RS2 的配置可以自己之前配置脚本来实现,主要定义的是
      默认路由172.16.21.9, 和通告级别 ,响应级别

 

 5) 实验结果

        开启httpd服务,keepalived服务 

 

场景1:RS1和RS2都无法访问到, HA返回提示界面
       预期的效果:访问172.16.21.9, 返回的web页面是 "wei hu zhong ..."

    首先:我们需要关闭RS1 和 RS2上的httpd服务
       #service keepalived restart
    访问 172.16.21.9

(原理:我们在配置文件中定义了sorry_server 127.0.0.1 80)

 


    场景2 : RS1 RS2 正常运行, HA1端服务暂停,
      预期的效果:使用172.16.21.9依旧能完成正常的访问

   启动RS1 和 RS2 的httpd服务
   在配置文件中我们有设置,在指定目录下创建down,主节点的优先级会减去2,
   所以我们可以借助于这个来实现以上的场景需要。
       #touch /etc/keepalived/down
       #ls

 

 

你可能感兴趣的:(KeepAlive)