LVS+KEEPALIVED

一.负载均衡LVS的介绍

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。LVS全称为Linux Virtual Server,工作在ISO模型中的第四层,由于其工作在第四层,因此与iptables类似,必须工作在内核空间上。因此lvs与iptables一样,是直接工作在内核中的,叫ipvs,主流的linux发行版默认都已经集成了ipvs,因此用户只需安装一个管理工具ipvsadm即可。

查看内核是否已经集成:
ipvs: grep -i “ip_vs” /boot/config-2.6.32-358.18.1.el6.x86_64

负载均衡的原理很简单,就是当客户端发起请求时,请求直接发给Director Server(调度器),这时会根据设定的调度算法,将请求按照算法的规定智能的分发到真正的后台服务器。以达到将压力均摊。

第一层:负载调度器(load balancer/ Director),它是整个集群的总代理,它在有两个网卡,一个网卡面对访问网站的客户端,一个网卡面对整个集群的内部。负责将客户端的请求发送到一组服务器上执行,而客户也认为服务是来自这台主的。
第二层:服务器池(server pool/ Realserver),是一组真正执行客户请求的服务器,可以当做WEB服务器。
第三层:共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

二.LVS的实现原理

lvs的原理其实就是利用了Iptables的功能。了解防火墙的都知道四表五链。防火墙不仅仅有防火的功能还有转发,地址伪装,限流等等功能。
①.首先,客户端向调度器(Director Server)发起一个请求,调度器将这个请求发送至内核
②.PREROUTING链首先会接收到用户请求,判断目标IP确定是本机VIP,将数据包发往INPUT链。
③.当请求达到INPUT链上,调度器判断报文中的目标端口来确定这个访问是不是要访问集群服务,如果是访问的集群服务,那么就会强制修改这个包的目标IP
④.POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

三.LVS的调度算法

调度器(directory) 是通过一定的调度算法将服务请求一个一个的分发下去。现在了解一下调度算法,LVS一共有10种调度算法。
静态调度算法(4个)
1.rr(轮叫调度)
轮叫调度:这种是最简单的调度算法,就是将请求A一个,B一个,A一个,B一个 … 循环的发。就算A主机挂掉了,调度器还是会将请求发送到A。十分均衡。
2.wrr(加权轮叫)
加权轮叫调度:这种算法是在rr基础上实现的,只不过加了权重,权重范围为1-100,假设A的服务器性能好,就给A的权重设置的高一点,设为2,而B主机是1。这样就实现A二个,B一个,A二个,B一个 … 循环的发。这样照顾到了服务器性能。
3.sh(源地址哈希)
源地址散列:主要是实现将此前的session(会话)绑定。将此前客户的源地址作为散列键,从静态的散列表中找出对应的服务器,只要目标服务器是没有超负荷的就将请求发送过去。就是说某客户访问过A,现在这个客户又来了,所以客户请求会被发送到服务过他的A主机。
4.dh(目的地址哈希)
目的地址散列:以目的地址为关键字查找一个静态hash表来获得需要的RS。以目标地址为标准挑选。 功能是和sh近似的,但应用场景不同
(dh举个例子:假设1号客户访问了web集群的一个动态页面,调度器将请求转发个A服务器,A服务器的PHP将这个动态请求运行了一遍,生成了缓存并回应1号客户。这下2号客户也访问了这个动态页面,调度器应该将请求发给A。毕竟A已经跑过这段程序了,有缓存,对吧。所以这既是dh算法)

接下来是动态算法,动态算法与静态算法最大的区别就是动态算法考虑了服务器的压力。
活动链接(active):客户与服务器建立连接并且有数据传送
非活动链接(inactive):只是建立连接,没有数据传送,没有断开连接

动态调度算法(6个)
1.lc(最少链接)
最少连接调度:这种算法是看A,和B的主机谁的连接少,请求就发给谁。
简单算法:active256+inactive (谁小发给谁)
2.wlc(加权最少链接)LVS的理想算法
加权最少链接:这种算法就是比lc多了一个加权。
简单算法:( active
256+inactive )/weight (谁小就发给谁)
3.sed(最短期望延迟)
基于wlc算法,假设A,B的权重分别是1,2 。而A的链接数为1,B的链接数为2 。这样的话,用wlc算法得出的结果一样,而明显B的权重大,B的能力较强。用sed算法的话,就可以避免wlc出现的问题。
简单算法:(active+1)*256/weight (活动的连接数+1)*256/除以权重 谁小发给谁
A:(1+1)/1
B:(2+1)/2 (B小,交给B)
4.nq(用不排队)
基于sed算法:在sed的基础上,若谁的链接数为0,直接将请求发送给他,没二话
5.LBLC(基于局部性的最少连接)类似于dh,目标地址hash
这个算法主要用于Cache集群系统,因为Cache集群的中客户请求报文的目标IP地址的变化,将相同的目标URL地址请求调度到同一台服务器,来提高服务器的访问的局部性和Cache命中率。从而调整整个集群的系统处理能力。但是,如果realserver的负载处于一半负载,就用最少链接算法,将请求发送给活动链接少的主机。
6.LBLCR(带复制的基于局部性的最少链接)
该算法首先是基于最少链接的,当一个新请求收到后,一定会将请求发给最少连接的那台主机的。但这样又破坏了cache命中率。但这个算法中,集群服务是cache共享的,假设A的PHP跑了一遍,得到缓存。但其他realserver可以去A那里拿缓存,这是种缓存复制机制。

最后聊一下http这个协议,因为上面都有一些包含会话(session),cookie等名词新手可能会陌生。
当用户访问一台web服务器时,服务器会返回一个客户标示信息。这个信息就是cookie。cookie会被保存在客户端的浏览器缓存中,那么这个cookie是干什么的呢。
因为http是无状态的,服务器并不知道之前有谁访问了自己。那这就出现了一个问题,假设客户访问了一个需要登录的网页,可http无状态,刚登陆过的客户,服务器又不知道他是谁了。为了解决这个问题就出现了cookie。客户端首次访问时得到cookie,下次再访问时拿着这个cookie去访问服务器,服务器就认识客户端了,知道他是已经登录过的用户。所以cookie就是服务器用来追踪客户端的身份的。
服务器端为每一个客户保存一个cookie和客户端的对应,这就是回话(session)。session里保存了客户访问的url,对应cookie等等。
在某些特殊场景中需要realserver做到session共享,同步session。

四.LVS的工作模式

LVS 的工作模式分为4中分别是 NAT,DR,TUN,FULL-NAT。其中做个比较,由于工作原理的关系的,NAT的配置最为简单,但是NAT对调度器的压力较大,导致其效率最低,DR和TUN的工作原理差不多,但是DR中,所有主机必须处于同一个物理环境中,而在TUN中,所有主机可以分布在不同的位置,服务器一个在纽约,一个在深圳。

其中术语

  1. DS:Director Server。指的是前端负载均衡器。
  2. RS:Real Server。后端真实的工作服务器。
  3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。
  4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
  5. RIP:Real Server IP,后端服务器的IP地址。
  6. CIP:Client IP,访问客户端的IP地址。

1.NAT模式

客户发出请求,发送请求给链接调度器的VIP,调度器将请求报文中的目标Ip地址改为RIP。最后服务器RealServer将请求的内容发给调度器,调度器再将报文中的源IP地址改为VIP。

(a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP。
(b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链。
©. IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP。
(d). POSTROUTING链通过选路,将数据包发送给Real Server。
(e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP。
(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP。

Nat模型的特点
1.很好配置,原理简单易懂
2.由于调度器的工作量太大,很容易成为整个集群系统的瓶颈。
3.RS应该使用私有地址,RS的网关必须指向DIP
4.支持端口映射

2.DR模式
整个DR模式都是停留在第二层的数据链路层。直接修改MAC。实现报文的转发。

(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
© IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
(d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
(e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端

LVS-DR的特点
1.在前端路由器做静态地址路由绑定,将对于VIP的地址仅路由到Director Server
2.arptables:在arp的层次上实现在ARP解析时做防火墙规则,过滤RS响应ARP请求。
修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在网卡接口的别名上,并限制其不能响应对VIP地址解析请求。

3.TUN模式
和DR模式差不多,但是比DR多了一个隧道技术以支持realserver不在同一个物理环境中。就是realserver一个在北京,一个工作在上海。
在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP

(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
© IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
(d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
(e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端

LVS-TUN的特点

  1. RIP、VIP、DIP全是公网地址
    2.RS的网关不会也不可能指向DIP
    3.不支持端口映射
    4.RS的系统必须支持隧道

4.Full-NAT
无论是DR还是NAT模式,不可避免的都有一个问题:LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。
这引发的两个问题是:
1、同一个VLAN的限制导致运维不方便,跨VLAN的RS无法接入。
2、LVS的水平扩展受到制约。当RS水平扩容时,总有一天其上的单点LVS会成为瓶颈。
Full-NAT由此而生,解决的是LVS和RS跨VLAN的问题,而跨VLAN问题解决后,LVS和RS不再存在VLAN上的从属关系,可以做到多个LVS对应多个RS,解决水平扩容的问题。
Full-NAT相比NAT的主要改进是,在SNAT/DNAT的基础上,加上另一种转换,转换过程如下

在包从LVS转到RS的过程中,源地址从客户端IP被替换成了LVS的内网IP。
内网IP之间可以通过多个交换机跨VLAN通信。
当RS处理完接受到的包,返回时,会将这个包返回给LVS的内网IP,这一步也不受限于VLAN。
LVS收到包后,在NAT模式修改源地址的基础上,再把RS发来的包中的目标地址从LVS内网IP改为客户端的IP。
Full-NAT主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨VLAN的问题。采用这种方式,LVS和RS的部署在VLAN上将不再有任何限制,大大提高了运维部署的便利性。

五.LVS搭建

CentOS7已经集成了LVS的核心,所以只需要安装LVS的管理工具就可以了。
(1)安装ipvsadm
$ yum -y install ipvsadm
(2)设置ipv4转发
$ sysctl -w net.ipv4.ip_forward=1
(3)关闭防火墙和selinux
iptables –F
setenforce 0
vim /etc/sysconfig/selinux
SELINUX=enforcing 改为 SELINUX=disabled
(4)设置ipvsadm
$ ipvsadm -A -t 192.168.184.100:9009 -s rr
$ ipvsadm -a -t 192.168.184.100:9009 -r 192.168.184.12 -m
$ ipvsadm -a -t 192.168.184.100:9009 -r 192.168.184.13 -m
$ ipvsadm -S
-A 添加虚拟服务
-a 添加一个真是的主机到虚拟服务
-S 保存
-s 选择调度方法
rr 轮训调度
-m 网络地址转换NAT

ipvsadm -D -t 172.16.1.253:80 删除虚拟服务配置
ipvsadm –C 清除偶有虚拟服务配置
ipvsadm -lnc 查看数据传输状态

六.Keepalived简介

keepalived的诞生最初是为LVS ipvs(director)提供高可用性的,后来发展一个多功能、通用的轻量级高可用组件,可以为ipvs、nginx、haproxy等诸多服务提供高可用功能,主要应用在负载均衡调度器上,同时也可以检查后端各realserver的健康状态。
keepalived主要是模块是VRRP Stack和Cheackers,VRRP主要实现VIP(及MAC)的高可用,下面再详细认识其实现;Cheackers主要实现各服务如ipvs、nginx等的高可用及realserver健康状态检查,其中ipvs和realserver健康状态检查通过配置文件配置就可以实现,而其他服务高可用则需要通过自己编写脚本,然后配置keepalived调用来实现。如图下图:

七.keepalived安装和配置

1)安装keepalived
$ yum -y install keepalived

  1. keepalived配置

    keepalived只有一个配置文件keepalived.conf,主要包括以下几个配置区域,分别是global_defs、vrrp_script、vrrp_rsync_group、vrrp_instance 、virtual_server和 real_server等:
    1、global_defs区域为全局配置,主要配置realserver发生故障时的通知对象和组播地址等;
    2、vrrp_script是用来配置本机服务(如nginx)健康状态检查脚本的,当检查的服务发生故障时,可以配置降低优先级,配置调用则在vrrp_instance中的track_script段;
    3、vrrp_instance用来定义一个VRRP实例,多主模型可以定义多个VRRP实例;其中virtual_ipaddress区域配置对外提供服务的VIP,而本机故障通知则需要在vrrp_instance区域的notify_fault配置脚本中实现,如果vrrp_script检查服务引起的MASTER切换为BACKUP,则在notify_backup脚本定义通知,同时可以在脚本重启或停止该服务(注意,如果重启服务正常,优先级会相应增加,在抢占模式下,会重新变为MASTER);
    4、virtual_server区域则主要配置VIP和ipvs规则的,virtual_server中的real_server区域配置realserver康健状态检查的;
    5、vrrp_rsync_group用来定义vrrp_intance组,两个vrrp_instance同属于一个vrrp_rsync_group,那么其中一个vrrp_instance发生故障切换时,另一个vrrp_instance也会跟着切换(即使这个instance没有发生故障);这在LVS NAT中VIP、DIP各一个实例用到。

Keepalived配置文件
vi /etc/keepalived/keepalived.conf 编辑配置文件。

1.	! Configuration File for keepalived
2.	global_defs {
3.	    notification_email {
4.	        [email protected]     #设置报警邮件地址,可以设置多个,每行一个。
5.	        [email protected]    #需开启本机的sendmail服务
6.	        [email protected]
7.	    }
8.	    notification_email_from [email protected]  #设置邮件的发送地址
9.	    smtp_server 127.0.0.1      #设置smtp server地址
10.	    smtp_connect_timeout 30    #设置连接smtp server的超时时间
11.	    router_id LVS_DEVEL        #表示运行keepalived服务器的一个标识。发邮件时显示在                                  邮件主题的信息
12.	}
13.	
14.	vrrp_instance VI_1 {
15.	    	              #指定keepalived的角色,MASTER表示此主机是主服务器,B                                ACKUP表示此主机是备用服务器
16.	    interface enp0s3          #指定监测网络的接口
17.	    virtual_router_id 51      #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用                   唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
18.	    priority 100              #定义优先级,数字越大,优先级越高,在同一个vrrp_insta                                     nce下,MASTER的优先级必须大于BACKUP的优先级
19.	    advert_int 1              #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,                                 单位是秒
20.	    authentication {          #设置验证类型和密码
21.	        auth_type PASS        #设置验证类型,主要有PASS和AH两种
22.	        auth_pass 1111        #设置验证密码,在同一个vrrp_instance下,MASTER与BA                                CKUP必须使用相同的密码才能正常通信
23.	    }
24.	    virtual_ipaddress {       #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
25.	        192.168.184.100 
26.	    }
27.	}
28.	
29.	virtual_server 192.168.184.100 9009 {  #设置虚拟服务器,需要指定虚拟IP地址和服务                                           端口, IP与端口之间用空格隔开
30.	    delay_loop 6              #设置运行情况检查时间,单位是秒
31.	    lb_algo rr                #设置负载调度算法,这里设置为rr,即轮询算法
32.	    lb_kind NAT               #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式                                   可选
33.	    nat_mask 255.255.255.0 
34.	    persistence_timeout 0    #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,                               为集群系统中的session共享提供了一个很好的解决方案。
35.	                              #有了这个会话保持功能,用户的请求会被一直分发到某个服务                                节点,直到超过这个会话的保持时间。
36.	                              #需要注意的是,这个会话保持时间是最大无响应超时时间,也                              就是说,用户在操作动态页面时,如果50秒内没有执行任何操作
37.	                              那么接下来的操作会被分发到另外的节点,但是如果用户一直                                在操作动态页面,则不受50秒的时间限制
38.	    protocol TCP              #指定转发协议类型,有TCP和UDP两种
39.	
40.	  real_server 192.168.184.12 9009 { #配置服务节点1,需要指定real server的真实IP                                        地址和端口,IP与端口之间用空格隔开
41.	        weight 1                 #配置服务节点的权值,权值大小用数字表示,数字越大,                                    权值越高,设置权值大小可以为不同性能的服务器
42.	                                 #分配不同的负载,可以为性能高的服务器设置较高的权值,                                 而为性能较低的服务器设置相对较低的权值,这样才能合理                                   地利用和分配系统资源
43.	        TCP_CHECK {           #realserver的状态检测设置部分,单位是秒
44.	            connect_timeout 3    #表示3秒无响应超时
45.	            nb_get_retry 3       #表示重试次数
46.	            delay_before_retry 3 #表示重试间隔
47.	            connect_port 9009
48.	        } 
49.	    }
50.	    real_server  192.168.184.13 9009 {
51.	        weight 1
52.	        TCP_CHECK {
53.	            connect_timeout 3
54.	            nb_get_retry 3
55.	            delay_before_retry 3
56.	            connect_port 9009
57.	        }
58.	    }
59.	}

改完配置文件就可以直接启动keepalived

八.LVS+Keepalived使用

1、配置LVS调度机器
[root@localhost ~]# ipvsadm –C 删除所有集群服务
[root@localhost ~]# systemctl start keepalived
[root@localhost ~]# tail –f /var/log/message 查看启动日期
[root@localhost ~]# ipvsadm –ln 查看VIP与RIP映射情况

[root@localhost ~]# ip a 查看网卡情况,VIP是否绑定

1: lo: mtu 65536 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
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eno16777728: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:fc:c1:4a brd ff:ff:ff:ff:ff:ff
inet 192.168.184.9/24 brd 192.168.184.255 scope global eno16777728
valid_lft forever preferred_lft forever
inet 192.168.184.100/24 scope global secondary eno16777728
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fefc:c14a/64 scope link
valid_lft forever preferred_lft forever

2、配置RS机器

两台RS上为lo:0绑定VIP地址、抑制ARP广播
sh脚本内容如下,复制到sh文件中直接执行即可。(由windows拷贝至linux需进行格式转换,dos2unix转换,或直接在windows中用notepad转换)

1.	#!/bin/bash  
2.	#description:realserver  
3.	SNS_VIP=192.168.1.135               #定义虚IP(VIP)  
4.	. /etc/rc.d/init.d/functions        #导脚本库  
5.	case "$1" in                        #case语句 $1传递给该shell脚本的第一个参数  
6.	start)  
7.	ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP    #设置Lo:0 VIP  netmask  及广播  
9.	/sbin/route add -host $SNS_VIP dev lo:0         ##route del 增加本地路由  
10.	echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
11.	echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce  
12.	echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore  
13.	echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce  
14.	sysctl -p >/dev/null 2>&1                  
15.	           # -p    (default /etc/sysctl.conf) 将标准信息输入设备空文件  
16.	echo "RealServer Start OK"  
17.	;;  
18.	stop)  
19.	ifconfig lo:0 down  
20.	route del $SNS_VIP >/dev/null 2>&1       #route del 删除本地路由  
21.	echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore  
22.	echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce  
23.	echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore  
24.	echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce  
25.	echo "RealServer Stoped"  
26.	;;  
27.	*)  
28.	echo "Usage: $0 {start|stop}"  #$0 是脚本本身的名字  
29.	exit 1                          #表示进程正常退出  
30.	esac                            #case结束  
31.	exit 0                          #表示进程非正常退出  

$ sh realserver.sh start 脚本执行

3、测试
所用系统:CentOS7

  • 真实web服务器(RS1):192.168.184.12
  • 真实web服务器(RS2):192.168.184.13
  • Master负载均衡服务器:192.168.184.9
  • 系统对外虚拟IP:192.168.184.100

(1)测试负载均衡
[root@localhost ~]# curl 192.168.184.100:9009

(2)keepalived的监控检测
断掉一个RS节点服务后,查看VIP映射关系

[root@localhost ~]# curl 192.168.184.100:9009

九.keepalived-VRRP工作机制

VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由器或Backup路由器)。VRRP优先级的取值范围为0到255(数值越大表明优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。优先级越高,则越有可能成为Master路由器。当两台优先级相同的路由器同时竞争Master时,比较接口IP地址大小。接口地址大者当选为Master。

1、初始创建的路由器工作在Initialize状态:
通过VRRP报文的交互获知虚拟路由器中其他成员的优先级(keepalived是通过配置文件配置优先级,所以配置定义为MASTER的主机优化级较高),其中优先级最高的成为Master路由器,其他成为Backup路由器;

2、当路由器处于Master状态时,它将会做下列工作:
定期发送VRRP报文。
以虚拟MAC地址响应对虚拟IP地址的ARP请求。
转发目的MAC地址为虚拟MAC地址的IP报文。
如果它是这个虚拟IP地址的拥有者,则接收目的IP地址为这个虚拟IP地址的IP报文。否则,丢弃这个IP报文。
如果收到比自己优先级大的报文则转为Backup状态。
如果收到优先级和自己相同的报文,并且发送端的主IP地址比自己的主IP地址大,则转为Backup状态。
当接收到接口的Shutdown事件时,转为Initialize。

3、当路由器处于Backup状态时,它将会做下列工作:
接收Master发送的VRRP报文,判断Master的状态是否正常。
对虚拟IP地址的ARP请求,不做响应。
丢弃目的MAC地址为虚拟MAC地址的IP报文。
丢弃目的IP地址为虚拟IP地址的IP报文。
Backup状态下如果收到比自己优先级小的报文时,丢弃报文,不重置定时器;如果收到优先级和自己相同的报文,则重置定时器,不进一步比较IP地址。
当Backup接收到MASTER_DOWN_TIMER定时器超时的事件时,才会转为Master。
当接收到接口的Shutdown事件时,转为Initialize。

从上面keepalived设计组成可以看到,keepalived实现了VRRP协议,而VRRP实现路由器高可用,keepalived则用VRRP实现在集群中负载均衡调度器director的 VIP(和MAC)资源高可用,以及各keepalived主机的角色选举及其状态问题。

你可能感兴趣的:(自我总结)