LVS实现--DR模式的实现以及结合ldirectord实现RS高可用

LVS–DR模式的原理:https://blog.csdn.net/qq_35887546/article/details/104425264

本次实验需要三个虚拟机以及物理机:

虚拟机名称作用IP
server1DS172.25.63.1
server2RS1172.25.63.2
server3RS2172.25.63.3

VIP为:172.25.63.100
测试服务:Http 端口:80
物理机为客户端

一、DR模式的实现

1. 配置DS
在server1上:
安装 ipvsadm

 yum install ipvsadm -y

查看lvs编写的策略:

 ipvsadm -l				#若速度比较慢可以使用-ln选项

添加策略:

 ipvsadm -A -t 172.25.63.100:80 -s rr				#-t表示TCP协议的虚拟服务,-s指定策略为轮询
 ipvsadm -a -t 172.25.63.100:80 -r 172.25.63.2:80 -g			#添加RS指定并端口,-g表示为DR模式
 ipvsadm -a -t 172.25.63.100:80 -r 172.25.63.3:80 -g			#添加另外一台RS

添加后查看规则:

[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.63.100:http rr
  -> server2:http                 Route   1      0          0         
  -> server3:http                 Route   1      0          0         

为DS添加VIP:

ip addr add 172.25.63.100/32 dev eth0				#子网掩码可以为32,也可以为24

ipvs命令的选项:

-A 添加一个虚拟服务,使用ip地址、端口号、协议来唯一定义一个虚拟服务
-E 编辑一个虚拟服务
-D 删除一个虚拟服务
-C 清空虚拟服务列表
-R 从标准输入中还原虚拟服务列表
-S 保存虚拟服务规则至标准输出,输出规则可使用-R选项还原
-L 显示虚拟服务列表
-Z 虚拟服务器列表计数器清零(清空当前连接数)
-a 添加一台真实服务器
-e 编辑一台真实服务器
-d 减少一台真实服务器
-t 使用TCP服务,该参数后需加主机与端口信息
-u 使用UDP服务,该参数后需加主机与端口信息
-s 指定lvs的调度算法
-r 设置真实服务器IP与端口
-g 设置lvs工作模式为DR直连路由
-i 设置lvs工作模式为TUN隧道
-m 设置lvs工作模式为NAT地址转换模式
-w 指定真实服务器权重
-c 连接状态,配和-L使用
-n 数字格式显示
–stats 显示统计信息
–rate 显示速率信息
–sort 对虚拟服务器和真实服务器排序输出
–set tcp tcpfin udp
设置ipvs连接超时值,三个参数分别代表tcp会话超时时间、收到FIN包后tcp会话超时时间、udp超时时间
–timeout 显示tcp tcpfin udp的timeout值
–start-daemon
启动同步守护进程
–stop-daemon
停止同步守护进程

2.配置RS

server2和server3上:

添加VIP:

ip addr add 172.25.63.100/32 dev eth0				#子网掩码可以为32,也可以为24

为 server2 配置apache服务:

[root@server2 html]# yum install -y httpd
[root@server2 html]# cd /var/www/html/
[root@server2 html]# vim index.html
[root@server2 html]# cat index.html 
server2
[root@server2 html]# systemctl start httpd

为 server3 配置apache服务:

[root@server2 html]# yum install -y httpd
[root@server2 html]# cd /var/www/html/
[root@server2 html]# vim index.html
[root@server2 html]# cat index.html 
server3
[root@server2 html]# systemctl start httpd

3.为RS配置arptables

首先需要先了解APR协议:ARP协议详解(https://blog.csdn.net/qq_35887546/article/details/104425939),由于server 1 2 3均有VIP,由ARP协议可知,apr请求将会在局域网内广播, 此配置arptables的作用是当客户端访问VIP时,让其访问DS而不是RS

也可通过修改内核参数实现,此处使用arptables

在server2 上:

yum install -y arptables-0.0.4-8.el7.x86_64
arptables -nL				#查看策略
arptables -A INPUT -d 172.25.63.100 -j DROP			#添加策略,将目的地址为172.25.63.100的arp请求丢弃
arptables -A OUTPUT -s 172.25.63.100 -j mangle --mangle-ip-s 172.25.63.2		#将源ip为VIP的arp响应的源IP改成RS的IP

策略配置完成查看策略:

[root@server2 html]# arptables -nL
Chain INPUT (policy ACCEPT)
-j DROP -d 172.25.63.100 

Chain OUTPUT (policy ACCEPT)
-j mangle -s 172.25.63.100 --mangle-ip-s 172.25.63.2 

Chain FORWARD (policy ACCEPT)

在server3 上做同样的操作:

yum install -y arptables-0.0.4-8.el7.x86_64
arptables -nL				#查看策略
arptables -A INPUT -d 172.25.63.100 -j DROP			#添加策略,将目的地址为172.25.63.100的arp请求丢弃
arptables -A OUTPUT -s 172.25.63.100 -j mangle --mangle-ip-s 172.25.63.3		#将源ip为VIP的arp响应的源IP改成RS的IP

4.测试

在客户端(物理机)上:

[kiosk@foundation63 ~]$ curl 172.25.63.100
server2
[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
server2
[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
server2

轮询策略成功实现
在DS上查看轮询次数:

[root@server1 ~]# ipvsadm -l
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  server1:http rr
  -> server2:http                 Route   1      0          2         
  -> server3:http                 Route   1      0          2         

二、结合ldirectord实现RS高可用

一中DR模式实现后,当server2宕掉时,再进行测试:

[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
curl: (7) Failed connect to 172.25.63.100:80; Connection refused
[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
curl: (7) Failed connect to 172.25.63.100:80; Connection refused

以上说明调度器(DS)不会对后端的RS进行检查,要想实现次功能,可以结合ldirectord实现

1.安装ldirectord

在server1 上:
此步需要高可用的yum源:

[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# cat westos.repo 
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.63.250/iso
gpgcheck=0

[HighAvailability]
name=HighAvailability
baseurl=http://172.25.63.250/iso/addons/HighAvailability				#高可用yum源
gpgcheck=0

[root@server1 yum.repos.d]# yum clean all
[root@server1 yum.repos.d]# yum repolist
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
repo id                              repo name                            status
!HighAvailability                    HighAvailability                        37
!rhel7.3                             rhel7.3                              4,751
repolist: 4,788

安装及配置:

yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
cd /etc/ha.d/
ls
vim ldirectord.cf 
 12 checktimeout=3				#ldirectord等待健康检查执行完毕的等待时间,单位秒。如果因为某些原因检查失败或在设置的时间周期内没有完成检查,ldirectord将会从IPVS表中移除真实服务器
 13 checkinterval=1				#ldirectord在两个检查之间的间隔时间

 16 autoreload=yes				#如果启用这个选项,它使ldirectord按时计算这个配置文件的md5校验和值,看其是否有改动,当发现有改动时自动应用那些改动,这个方便的 特性运行你容易地改变集群的配置,你对配置文件改动后几秒,ldirectord将察觉到有改动,调用ipvsadm命令实现改动,从有效服务器池中移除 真实服务器或按需要将它们添加到池中

 22 quiescent=no				#当一个节点在checktimeout设置的时间周期内没有响应时它是“静止的”(它的权重为0),当你设置了这个选项后,ldirectord将 会从IPVS表中移除真实服务器而不是“停止”它,从IPVS表移除节点将中断现有的客户端连接,并使LVS丢掉所有的连接跟踪记录和持续连接模板,如果 你不将这个选项设置为no,当某个节点崩溃时,对某些客户端计算机而言可能会显示为集群关闭了,因为在这个节点崩溃前这些客户端计算机被分配给它了,而连 接跟踪记录和程序连接模板仍然保留在Director上。
 
 24 # Sample for an http virtual service
 25 virtual=172.25.63.100:80				#指定我们想要在Director Server 上设置的VIP地址和端口号
 26         real=172.25.63.2:80 gate		#RS的ip及端口
 27         real=172.25.63.3:80 gate		#RS的ip及端口
 28         fallback=127.0.0.1:80 gate			#若后端两个RS崩溃,则由自身顶替
 29         service=http					#使用服务
 30         scheduler=rr					#负载均衡规则
 31         #persistent=600
 32         #netmask=255.255.255.255
 33         protocol=tcp					#TCP协议
 34         checktype=negotiate				#监测规则
 35         checkport=80					#监测端口
 36         request="index.html"
 37         #receive="Test Page"			#需要注释掉
 38         #virtualhost=www.x.y.z			#需要注释调

3.清空之前的策略

在server1 :

[root@server1 ha.d]# ipvsadm -l 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  server1:http rr
  -> server2:http                 Route   1      0          0         
  -> server3:http                 Route   1      0          0         
[root@server1 ha.d]# ipvsadm -C
[root@server1 ha.d]# ipvsadm -l 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

4.启动服务

在server1:

systemctl start ldirectord

查看策略:

[root@server1 ha.d]# ipvsadm -l 
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  server1:http rr
  -> server2:http                 Route   1      0          0         
  -> server3:http                 Route   1      0          0         

5.测试
在客户端:
正常情况下:

[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
server2
[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
server2

当停止server2 的http服务时:

[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
server2
[kiosk@foundation63 ~]$ curl 172.25.63.100			#此时停止server2 http 后面全是server3提供服务
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
server3

再次启用server2 http服务后:

[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100			#启动server2 http服务后就能够马上轮询
server2
[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
[kiosk@foundation63 ~]$ curl 172.25.63.100
server2
[kiosk@foundation63 ~]$ curl 172.25.63.100
server3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值