Keepalived
主要目的是为lvs提供高可用功能,并为lvs提供规则检查后端服务器健康状态.工作原理是通过软件方式模拟实现vrrp---virtual redundent route protocol协议
将多个路由器配置成一个虚拟路由器,此虚拟路由器有vip和vmac每个时刻只能被主路由捕获,每个路由都有优先级,优先级最高的才能获得此地址的使用权,并且主路由在一定时间内广播自己的存活消息,当某一时刻,一旦各从路由收不到消息是会根据优先级选取另一个作为主路由,若优先级相等,则比较IP地址大的获取资源使用权限.可以配置多个vip和vmac每个组都有自己的标识.虚拟路由标识(vrid) vmac格式为00-00-5E-00-01-{vrid},前面的5段是固定的vrid为8位
Keepalived为了实现虚拟路由协议内部设有许多组件
软件结构为
适用的场景:lvs ngnix haproxy
配置文件介绍
全局段
global_defs {
notification_email { ------------------------ 邮件发送到的地址
}
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的高可用方案
实验拓扑图为
配置realserver
Httpd server1 Yum install httpd Vim /var/www/html/index.htmlServer2 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.htmlServer2 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:
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:
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
打开网页测试