Keepalived定义
Keepalived 是一个基于VRRP协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。一个LVS服务会有2台服务器运行Keepalived,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外表现为一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,即主服务器宕机的时候, 备份服务器就会接管虚拟IP,继续提供服务,从而保证了高可用性。Keepalived是VRRP的完美实现。
VRRP 协议简介
VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。
虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。于安全性考虑,VRRP包使用了加密协议进行加密。
keepalived的配置文件
keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域:
- global_defs主要是配置故障发生时的通知对象以及机器标识
- static_ipaddress和static_routes区域配置的是是本节点的IP和路由信息
- vrrp_script用来做健康检查的,当时检查失败时会将vrrp_instance的priority减少相应的值
- vrrp_instance用来定义对外提供服务的VIP区域及其相关属性
- vrrp_rsync_group用来定义vrrp_intance组,使得这个组内成员动作一致
环境准备
Centos7系统,后端服务器提供web服务。
地址规划:
- VS1: 172.18.51.7
- VS2:172.17.51.77
- RS1:172.18.51.74
- RS2:172.18.51.75
- VirtualIP:172.18.51.81
拓扑图:
实验目标: 通过keepalived+lvs部署DR类型集群,实现高可用、负载均衡;主、备两台调度器均处于在线状态,当任意一台调度器宕机或出现故障时,VIP会“漂移”到另外一台服务器上,继续提供服务。
安装chrony程序包,部署时间服务器,同步各服务器时间
RS:提供httpd服务,定义web主页,启动服务
VS:当所有real server宕掉时,sorry
server顶替,定义其主页,启动服务
RS的预配置脚本:
vim setparam.sh #!/bin/bash # vip=172.18.51.100 mask='255.255.255.255' case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig lo:0 $vip netmask $mask broadcast $vip up route add -host $vip dev lo:0 ;; stop) ifconfig lo:0 down echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce ;; *) echo "Usage $(basename $0) start|stop" exit 1 ;; esac
启动 bash -x setparam.sh start
VS配置:
vs1和vs2的配置文件,主备模式、优先级不一样,其它地方一致;
VS1
[root@centos7 keepalived]#cat keepalived.conf ! Configuration File for keepalived global_defs { notification_email { #故障发生时给谁发邮件通知 root@localhost } notification_email_from keepalived@localhost #通知邮件从哪个地址发出 smtp_server 127.0.0.1 #通知邮件的smtp地址 smtp_connect_timeout 30 #连接smtp服务器的超时时间 vrrp_mcast_group4 224.0.101.24 # 通过组播地址通告状态和优先级信息 } vrrp_instance sr1 { state MASTER #MASTER或BACKUP interface ens33 #节点固有IP(非VIP)的网卡,用来发VRRP包 virtual_router_id 51 #取值在0-255之间,用来区分多个instance的VRRP组播 priority 100 #设置优先级,选举master,取值范围1-255 advert_int 1 #健康查检时间间隔 authentication { #认证区域,认证类型有PASS和HA(IPSEC),密码8位字符 auth_type PASS auth_pass rE+szbuO } track_interface { ens33 #配置要监控的网络接口,一旦接口出现故障,则转为FAULT状态; } # nopreempt #非抢占模式 virtual_ipaddress { 172.18.51.81/16 dev ens33 label ens33:0 #配置虚拟IP地址(vip) } } virtual_server 172.18.51.81 80 { delay_loop 6 #定义延迟轮询时间(单位秒) lb_algo wrr #设定VS的调用算法 lb_kind DR #设定lvs调度类型 protocol TCP #工作的协议 sorry_server 127.0.0.1 80 #当所有real server宕掉时,sorry server顶替 real_server 172.18.51.74 80 { #真正提供服务的服务器RS1 weight 1 #权重 HTTP_GET { ##设置健康状态检测方法 url { path / #定义要监控的URL; status_code 200 #判断上述检测机制为健康状态的响应码; } connect_timeout 1 #连接请求的超时时长 nb_get_retry 3 #重试次数 delay_before_retry 1 #下次重试的延迟时间 } } real_server 172.18.51.75 80 { #真正提供服务的服务器RS2 weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } }
VS2
[root@centos703 ~]# cd /etc/keepalived/ [root@centos703 keepalived]# cat keepalived.conf ! Configuration File for keepalived global_defs { notification_email { root@localhost } notification_email_from keepalived@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 vrrp_mcast_group4 224.0.101.24 } vrrp_instance sr1 { state BACKUP interface ens33 virtual_router_id 51 priority 98 advert_int 1 authentication { auth_type PASS auth_pass rE+szbuO } track_interface { ens33 } nopreempt virtual_ipaddress { 172.18.51.81/16 dev ens33 ens33 label ens33:0 } } virtual_server 172.18.51.81 80 { delay_loop 6 lb_algo wrr lb_kind DR protocol TCP sorry_server 127.0.0.1 80 real_server 172.18.51.74 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } real_server 172.18.51.75 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 } } }
启动服务:systemctl start keepalived.service,自动生成ipvs规则
通过客户端测试:
real
server正常时访问:轮询
关闭RS1上httpd 服务: 访问RS2页面
关闭RS2httpd 服务后,访问页面跳到sorry
server页面:
原创文章,作者:Mr-Xiao,如若转载,请注明出处:http://www.178linux.com/75935