Keepalived

 

主要目的是为lvs提供高可用功能,并为lvs提供规则检查后端服务器健康状态.工作原理是通过软件方式模拟实现vrrp---virtual redundent route protocol协议

Keepalived_第1张图片


将多个路由器配置成一个虚拟路由器,此虚拟路由器有vipvmac每个时刻只能被主路由捕获,每个路由都有优先级,优先级最高的才能获得此地址的使用权,并且主路由在一定时间内广播自己的存活消息,当某一时刻,一旦各从路由收不到消息是会根据优先级选取另一个作为主路由,若优先级相等,则比较IP地址大的获取资源使用权限.可以配置多个vipvmac每个组都有自己的标识.虚拟路由标识(vrid) vmac格式为00-00-5E-00-01-{vrid},前面的5段是固定的vrid8

Keepalived为了实现虚拟路由协议内部设有许多组件

软件结构为

Keepalived_第2张图片



适用的场景:lvs  ngnix  haproxy

配置文件介绍

全局段

global_defs {

   notification_email {   ------------------------ 邮件发送到的地址

   [email protected] 

   [email protected]        

   [email protected]

   }

   notification_email_from [email protected] ---------------- 定义邮件的声明部分

   smtp_server 192.168.200.1     ------------------------  使用的邮件的服务器

   smtp_connect_timeout 30      ------------------------   超时时间

   router_id LVS_DEVEL

   }

实体部分

vrrp_instance VI_1 {   ----------------  实体的名称
    state MASTER    ---------------- 状态MASTER或是BACKUP
    interface eth0     ----------------  配置在哪个接口上
virtual_router_id 51-------------- --  VRRID
    priority 100      - ---------------  优先级
    advert_int 1      ---------------   发送心跳的间隔时间
    authentication {   ---------------   认证
       auth_type PASS  ------------------认证算法 PASS||AH
        auth_pass 1111 密码
    }
virtual_ipaddress {      -------------------   VIP  
格式为   / brd  dev  scope 
例如      192.168.200.18/24 dev eth2 label eth2:1
        192.168.200.16
        192.168.200.17
        192.168.200.18
}
notify_master    当变为MASTER时执行的脚本
notify_backup    当变为BACKUP时执行的脚本
notify_fault      当故障时执行的脚本


例如: notify_master   /etc/init.d/nginx start

}

虚拟服务器段

 

virtual_server 192.168.200.100 443 {  ------------- 定义一个lvs
    delay_loop 6                  
    lb_algo rr       ----------------- lvs的调度算法 lb_algo rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind NAT    ------------------lvs模型lb_kind NAT|DR|TUN
    nat_mask 255.255.255.0  ------------ 掩码网络
    persistence_timeout 50   ------------- 持久连接的超时时间
    protocol TCP           ------------- 协议类型
    sorry_server    ------------- 所有realserver不可用时使用的服务器地址
    real_server 192.168.201.100 443 {   ----------------- realserver 定义段 地址
        weight 1           -------------权重
        SSL_GET {        健康状态检测时使用的方法
            url {          检测哪个url
              path /
              digest ff20ad2481f97b1754ef3e12ecd3a9cc  此页面的特征码
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3  连接超时时间
            nb_get_retry 3     重试时间
            delay_before_retry 3 重试前的时间间隔
        }
    }
}


 

下面通过实验说明问题

利用keepalived创建lvs-dr的高可用方案

 

实验拓扑图为

Keepalived_第3张图片



配置realserver

Httpd server1
Yum install httpd
Vim /var/www/html/index.html

 Server2 172.16.101.202 

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore  [root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce  [root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  [root@localhost ~]# ifconfig lo:0 172.16.101.22 netmask 255.255.255.255 broadcast 172.16.101.22 [root@localhost ~]# route add -host 172.16.101.22 dev lo:0


 

Httpd server 2

 

Yum install httpd
Vim /var/www/html/index.html

 Server2 172.16.101.201 

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore  [root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore  [root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce  [root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce  [root@localhost ~]# ifconfig lo:0 172.16.101.22 netmask 255.255.255.255 broadcast 172.16.101.22 [root@localhost ~]# route add -host 172.16.101.22 dev lo:0


 

Keepalived server 配置文件

! Configuration File for keepalived
 
global_defs {
   notification_email {
   [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
 
vrrp_instance lvs-dr {
    state MASTER
    interface eth0
    virtual_router_id 100
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass hzm132
    }
    virtual_ipaddress {
        172.16.101.22
    }
}
 
virtual_server 172.16.101.22 80 {
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    protocol TCP
 
    real_server 172.16.101.201 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.101.202 80 {
        weight 1
        HTTP_GET {
            url {
              path /
              status_code 200
            }
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}


启动keepalived测试结果

产看master keepalived IP地址

 

[root@node2 keepalived]# ip addr show 

1: lo:  mtu 16436 qdisc noqueue state UNKNOWN 

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host 

       valid_lft forever preferred_lft forever

2: eth0:  mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 08:00:27:ce:12:9b brd ff:ff:ff:ff:ff:ff

    inet 172.16.101.200/16 brd 172.16.255.255 scope global eth0

    inet 172.16.101.22/32 scope global eth0

    inet6 fe80::a00:27ff:fece:129b/64 scope link 

       valid_lft forever preferred_lft forever

打开网页测试

Keepalived_第4张图片