-- LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统,可以在unix/linux平台下实现负载均衡集群功能。LVS是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式
-- DR模式
- DR模式:通过直接路由实现虚拟服务器。DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。DR模式可以极大的提高集群系统的伸缩性,而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器与真实服务器都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。
- 原理:LVS通过控制IP来实现负载均衡。ipvsadm是其具体的实现模块。
- ipvsadm的主要作用:安装在调度器上面,在调度器上虚拟一个对外访问的IP(VIP)。用户访问VIP,到达调度器,调度器根据一定的规则选择一个真实服务器,处理完成后然后返回给客户端数据。
-- 使用DR模式实现负载均衡
实验环境:server1为调度器,负载流量均衡(基于4层即传输层进行调度,调度算法有WRR/WLC等,传输协议为TCP/UDP),server2和server3为真实服务器节点。
[root@server1 ~]# yum install -y ipvsadm server1安装ipvsadm(用于用户端管理LVS的策略规则
书写策略:在server1上添加虚拟一个对外访问的IP:172.25.15.100(vip),即提供虚拟服务的ip地址,也可以直接用原有IP,但最好独立出来
![]()
ipvsadm -A 添加规则;-t tcp协议;-s 调度;rr 轮叫
- -a向tcp虚拟服务添加
- -r real server
- -g 直连即DR模式

ipvsadm -ln:查看当前连接情况(-ln不用解析),
Forward:转发方式,当前是路由转发;
Weight:权重;
ActiveConn:当前活跃的连接数;
InActConn:当前不活跃的连接数
server2和server3安装httpd服务,并开启
LVS-DR集群类型要求,当用户向vip发起请求时,调度器和真实服务器上必须都要有vip,因此需要给server2和server3添加虚拟IP
[root@server2 ~]# yum install -y httpd
[root@server2 ~]# systemctl start httpd
[root@server2 ~]# echo server2 > /var/www/html/index.html
[root@server2 ~]# ip addr add 172.25.15.100/32 dev eth0
[root@server3 ~]# yum install -y httpd
[root@server3 ~]# systemctl start httpd
[root@server3 ~]# echo server2 > /var/www/html/index.html
[root@server3 ~]# ip addr add 172.25.15.100/32 dev eth0
此时真机使用curl 172.25.15.100,出现轮叫
[root@westos_student74 images]# curl 172.25.15.100
server3
[root@westos_student74 images]# curl 172.25.15.100
server2
[root@westos_student74 images]# curl 172.25.15.100
server3
ARP协议是将IP地址映射为MAC地址的协议,其在协议上使用ARP请求及ARP应答报文来实现
arp -d是删除ARP缓存列表的命令,可以删除所有的ARP缓存,也可以删除指定的ARP缓存
此时使用arp -an查看本地ARP缓存的172.25.15.100对应的MAC地址为调度器server1的地址,当真机执行arp -d 删除指定虚拟IP的ARP缓存后,此时不能过滤得到172.25.15.100的MAC地址。再次Ping之后又可以得到,但是是server3的地址,不是调度器的地址(谁先响应就缓存谁的MAC地址)
[root@westos_student74 images]# arp -an | grep 100
? (172.25.6.100) at 52:54:00:ab:94:fc [ether] on br0
[root@westos_student74 images# arp -d 172.25.6.100
[root@westos_student74 images]# arp -an | grep 100
[root@westos_student74 images]# ping 172.25.6.100
PING 172.25.6.100 (172.25.6.100) 56(84) bytes of data.
64 bytes from 172.25.6.100: icmp_seq=1 ttl=64 time=0.300 ms
64 bytes from 172.25.6.100: icmp_seq=2 ttl=64 time=0.247 ms
^C
--- 172.25.6.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 37ms
rtt min/avg/max/mdev = 0.247/0.273/0.300/0.031 ms![]()
此时curl 172.25.33.100,只出现了server3的发布页面,说明此时客户端向vip发起请求时,并没有经过调度器直接到达了真实服务器





解决这一问题,需要给server2和server3安装ARP防火墙arptables(用于管理内核中的ARP包过滤规则表)
设定APR配置规则,DR模式要求服务器节点应该禁掉设备的APR响应
arptable_filter 只有一个表 filter ,不指定 -t 表名时默认就是 filter 表。
filter表有三个链,一个是INPUT,表示外面发进来的ARP包;另外一个是OUTPUT,表示本机发出的ARP包;第三个是FORWARD,转发ARP包。
-A:向规则链中追加规则;
-d:指定要匹配ARP包的目的IP地址;
-j:指定满足添加的规则时执行的动作;
-s:指定要匹配ARP包的源ip地址;
-g:直连
-r:真实服务器地址
当数据包的目的地址时100时就丢弃该数据包,当从本机发送出的数据包IP是100时,mangle转换数据包源地址,伪装源地址IP为172.25.15.2。



此时当真机执行arp -d 删除指定的虚拟IP,ping 之后,过滤得到172.25.15.100的MAC地址是server1的MAC地址,此时使用curl 172.25.15.100,可以轮叫


-- 问题解决
某台REALServer down 了,解决方法
[root@server2 ~]# systemctl stop httpd
此时curl 172.25.15.100 已经无法访问server2,客户端curl 172.25.15.100会报错,只能访问到server3

但是在server1中ipvsadm -ln 仍能检测到server2











解决办法:
使调度策略实时更新
server1:
(1)yum install keepalived (健康检测)
ipvsadm没有健康检测功能,即检测策略对应的后端服务是否正常,因此我们需要安装keepalived

[root@server ~]# ssh server4 yum install -y keepalived



修改keepalived的主配置文件/etc/keepalived/keepalived.conf
(vrrp虚拟路由冗余协议,keepalived利用这一协议实现了高可用)
[root@server1 keepalived]# vim keepalived.conf
notification_email:设置通知邮件,出了问题给谁发送邮件notification_email_from:由谁发送
超时
路由id
注释vrrp_strict,这一参数功能是在出问题时抓取数据包

主虚拟路由MASTER:向所有备用虚拟路由BACKUP发送“心跳包”,备用虚拟路由只负责接收,当备用虚拟路由接收不到时,priority优先级最高的备用虚拟路由代替MASTER提供虚拟服务,数字越高,优先级越高,所以MASTER优先级数字一定要最大
虚拟路由id:确认哪些虚拟路由是同一个LVS集群的; 修改vip:改成自己设置的vip;
虚拟服务语句块:
delay_loop:每s/次健康检测;
lb_algo:调度算法;
persistence_timeout:持久连接,即在多长时间内DR会将所有连接请求持续调度给一个后端;(80端口没必要) 写真实服务器模块
(之后的删掉)

![]()
此时删掉server1上手动设置的虚拟ip172.25.33.100,ipvsadm -C清除设置的规则,启动keepalived软件

[root@server2 ~]# systemctl start httpd

![]()

server4 修改BACKUP、优先级




lvs down怎么办(LVS冗余,高可用)

查看server4的日志,可以看到此时的server4是BACKUP
当server1停止keepalived服务后,再次查看server4的日志,可以看到此时的server4是MASTER
过滤得到172.25.15.100的MAC地址是server4的MAC地址
再次开启server1的 keepalived服务后,过滤得到172.25.15.100的MAC地址是server1的MAC地址,此时server4为BACKUP


[root@server2 ~]# systemctl stop httpd
[root@server1 keepalived]# systemctl reload keepalived.service


753




被折叠的 条评论
为什么被折叠?



