LVS模式一:DR(Direct Routing)直接路由模式

本文介绍了LVS-DR(Direct Routing)模式的负载均衡原理和配置步骤。在DR模式下,调度器根据服务器负载动态选择目标服务器,不修改IP地址,仅更改数据帧的目标MAC地址。实验环境中,通过在server1、server3和server4上配置DR模式,实现了负载均衡。同时,文章还讨论了健康检查、lvs+keepalived在服务高可用性中的应用以及DR模式下的隐藏RS上的VIP配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一般来说,LVS集群采用三层结构,其主要组成部分为:

A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。

B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。

C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。

DR的工作模式:

https://i-blog.csdnimg.cn/blog_migrate/09750033fdc1c8775163bdc5b94d6901.png

DR 模式原理过程简述:VS/DR模式的工作流程图如上图所示,它的连接调度和管理与NAT和TUN中的一样,它的报文转发方法和前两种不同。DR模式将报文直接路由给目标真实的服务器。在DR模式值喔咕,调度器根据各个真实服务器的负载情况,连接数多少等,动态地选择一台服务器,不修改目标ip地址和目标端口,也不封装ip报文,而是将请求报文的数据帧的目标MAC地址改为真实服务器的MAC地址。然后再将修改的数据帧在服务器组的局域网上发送。因为数据帧的MAC地址是真实服务器的MAC地址,并且又在同一个局域网。那么根据局域网的通讯原理,其实复位是一定能够受到由LB发出的数据包。真实服务器接收到请求数据包的时候,揭开ip包头查看到的目标ip是vip(此时只有自己的ip符合目标ip才会接收进来,所有我们需要在本地的回环接口上配置vip)另外:由于网络接口都会进行ARP广播响应,但集群的其他机器都有这个vip的lo接口,都响应就会冲突。所以我们需要把真实服务器做成请求响应,之后根据自己的路由信息将这个响应数据包发送回给客户,并且源ip地址还是vip

一、LVS-DR模式下的负载均衡

实验环境:

物理机:172.25.45.250

vip:172.25.45.100

server1(VS):172.25.45.1

server2(VS):172.25.45.2

server3(RS):172.25.45.3

server4(RS):172.25.45.4

1.在server1中:

1)增加yum仓库设置(包不够)

2)安装ipvsadm工具

yum install -y ipvsadm          ##管理集群服务的命令行工具

3)添加vip

ipvsadm -A -t 172.25.45.100:80  -s rr                                               ##添加临时vip rr轮询模式  -t指tcp协议

ipvsadm -a -t 172.25.45.100:80  -r 172.25.45.3:80 -g                 ##给vip添加rip(将虚拟机ip映射到真实ip)

ipvsadm -a -t 172.25.45.100:80 -r 172.25.45.4:80 -g                  ##-r指定realserver -t指定tcp协议 -g指dr模式

ipvsadm -l                                                                                                ##显示内核虚拟服务器表

ipvsadm -ln                                                                                               ##ip方式显示内核虚拟服务器表

注意:-g  ##gatewaying指定LVS的工作模式为直接路由模式(DR)模式

            -i    ##ip指定LVS的工作模式为隧道模式(TUN)模式

            -m  ##masquerading指定LVS的工作模式为NAT模式

2.在server3中

安装apache服务 并写好默认发布目录下的html文件  启动apache服务

yum install httpd -y

vim /var/www/html/index.html

<h1>server3</h1>

/etc/init.d/httpd start

3.在server4中

安装apache服务 并写好默认发布目录下的html文件  启动apache服务

yum install httpd -y

vim /var/www/html/index.html

<h1>server4</h1>

/etc/init.d/httpd start

4.测试:

物理机中curl 172.25.45.100访问失败

在server1中:

ip addr add 172.25.45.100/24 dev eth0   

在物理机中curl 172.25.45.100访问失败

但是此时在server1中 ipvsadm -ln 可以发现随着物理机访问172.25.45.100失败次数增多

ipvsadm -ln中lnActConn数值增加,此时说明调度器配置成功,再去配置server3与server4

在server3中:

ip addr add 172.25.45.100/32 dev lo

在server4中:

ip addr add 172.25.45.100/32 dev lo

在物理机中for i in {1..10};do curl 172.25.45.100;done      查看轮询结果

发现循环得到server3与server4中相对应的index.html文件内容

在物理机中:

arp -an | grep 100 得到vip的vmac地址,此时vmac地址为servre1中eth0网卡的mac地址

arp -d 172.25.45.100   清除mac

ping 172.25.45.100      得到新mac

arp -an | grep 100       查看新得到的vmac为server3或server4的eth0网卡mac

for i in {1..10};do curl 172.25.45.100;done 查看结果,均为之前的server3或者server4中相应的index.html文件内容

下图说明新得到的vmac为server3的

在server1中:

ipvsadm -ln 发现server3与server4两个后端仍然存在,但是物理机中访问172.25.45.100次数增加后inActConn数值不变,此时说明没有使用vm调度器,直接去后端server3或者server4上读取相应的index.html文件内容

5.隐藏RS上的vip

DR模式工作在链路层,采用了arp协议,rs表示realserver,vs表示virtualserver,假设client的ip为cip,mac地址为m1,调度器的ip为vip,mac地址为m2,后端服务器的ip为rip,mac地址为m3,由于DR模式工作在数据链路层,没有经过路由器,所以vs后人rs必须在同一个网段,当client访问vip时,在DR模式下,vs通过它本身的一些算法m2改为m3,这样就可以实现直接将数据包丢给rs(这里rs上必须有vip,因为客户端访问的时vip),rs通过接缝,得到了vip,通过与自己vip匹配判断数据包确实是给自己的,rs在通过封装,直接将数据发给client,数据包不用原路返。由于vs和rs上都有vip,会有冲突,因此这里应用arptables协议,在rs上添加策略,控制数据传输

通过arptables_jf工具更改网络

在server3中:

1).安装arptables_jf工具

yum install arptables_jf

2).配置网络

arptables -A IN -d 172.25.45.100 -j DROP    ##由于在同一个vlan中,不同机器中相同ip会冲突,此时使用arp火墙将vip拦截

arptables -A OUT -s 172.25.45.100 -j mangle --mangle-ip-s 172.25.45.3       ##将rip伪装成vip

arptables -L

注意:mangle伪装,由于tcp三次握手,出去时仍要以vip地址形式才会握手,而真正将数据传给客户端的时RS,所以这里需要mangle伪装

3)保存设置

/etc/init.d/arptables_jf save    ##保存arp火墙配置信息

在server4中:

1)安装arptables_jf工具 yum install arptables_jf -y

2)配置网络

arptabes -A IN -d 172.25.45.100 -j DROP 

arptables -A OUT -s 172.25.45.100 -j mangle --mangle-ip-s 172.25.45.4

arptables -L

3)保存配置  :  /etc/init.d/arptables_jf save

6.测试:

在物理机中:

arp -an | grep 100         ##查看vip的vmac

arp -d 172.25.45.100    ##清除vip的vmac

for i in {1..10};do curl 172.25.45.100;done

发现循环得到server3与server4中相应的apache默认发布目录下文件内容

二、健康检查

ldirectord是专门为LVS监控而编写的,用来监控lvs架构中服务器池(server pool)的服务器状态

ldirectord运行在IPVS节点上,ldirectord作为一个守护进程启动后会对服务器池中的每个真实服务器发送请求进行监控,如果服务器没有相应ldrectord的请求,那么ldrectord认为改服务器不可用,ldirectord会运行ipvsadm对IPVS表中该服务器进行删除,如果等下次在及检测有相应则通过ipvsadm进行添加。

1、在serevr1中:

1)下载ldirectord安装包并安装: yum install ldirectord-3.9.5-3.1.x86.rpm

##注意 从物理机上scp rpm包出现下图问题时,是因为server1没有安装openssh-clients

##解决办法:安装即可

2)更改ldirectord配置文件

rpm -ql ldirectord

cp /usr/share/doc/ldirectord-3.95/ldirectord.cf /etc/ha.d

cd /etc/ha.d

ls

vim ldirectord.cf

3)安装并开启apache服务

注意:当ipvsadm的后端全部down掉后可以使用自身的lo充当后端设备

yum install httpd -y

/etc/init.d/httpd start

4)配置apache共享网页

vim /var/www/html/index.html

<h1>网页正在维护中。。。</h1>

5).清除ipvsadm缓存

ipvsadm -C

6)启动ldirectord工具

/etc/init.d/ldirectord start

ipvsadm -l

2.测试:

物理机中for i in {1..10};do curl 172.25.45.100;done查看轮询结果

server3中/etc/init.d/httpd stop ,down 掉server3后在server1中ipvsadm -l 发现没有了server3的后端

在物理机中for i in {1..10};do curl 172.25.45.100;done查看轮询结果

仅有server4中apache默认发布文件

server4中/etc/init.d/httpd stop ,down掉server4后,在server1中ipvsadm -l发现也没有了server4的后端,仅存在server1的lo

在物理机中for i in {1..10};do curl 172.25.45.100;done查看轮询结果

仅有server1相应的index.html文件内容

server3 server4 /etc/init.d/httpd start

在server1中iipvsadm -l发现有了server3和server4的后端

在物理机中for i in {1..10};do curl 172.25.45.100;done查看轮询结果

发现循环得到server3和server4中相应的index.html文件内容

三、lvs+keepalived实现服务高可用

keepalived在这里主要用作 RealServer的健康状态检查以及LoadBalance主机和BackUP主机只见failover的实现。IPVS通常与keepalived配合使用,后者也是LVS项目的子项目值一,用于检测服务器的状态。

在lvs体系中,Keepalived主要有以下3个功能:

1.管理LVS负载均衡软件

2.实现对LVS集群节点的健康检查功能

3.作为系统网络服务的高可用功能

主机环境:RHEL6系列 selinux和iptables    disabled

实验主机:LVS-ACTIVE:172.25.45.1

                     LVS-BACKUP:172.25.45.2

                    LVS-VIP:172.25.45.100

                    RealServer:172.25.45.3     172.25.45.4

1.在sevrer1中关闭ldirectord

/etc/init.d/ldirectord stop

chkconfig ldirectord off

chkconfig --list ldirectord

2.主备机上的软件包安装与配置

1)在server1中:

yum install openssl-devel mailx -y

下载keepalived-2.0.6.tar.gz安装包

tar zxf  keepalived-2.0.6.tar.gz

cd keepalived-2.0.6.tar.g

ls

./configure --prefix=/usr/local/keepalived --with-init=SYSV     ##转换成二进制可执行文件

make ##编译

make install    ##安装

注意:当不能正常转换文件和编译时是因为没有安装gcc

解决办法:yum install gcc -y

chmod  +x  /usr/local/keepalived/etc/rc.d/init.d/keepalived

ln -s /usr/loal/keepalived/sbin/keepalived  /sbin/

ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/

ln -s /usr/local/keepalived/etc/sysconfig/keepalived  /etc/sysconfig/

ln -s /usr/local/keepalived/etc/keepalived   /etc/

vim /etc/keepalived/keepalived.conf (其余的全部删掉)

/etc/init.d/keepalived start

cat /var/log/messages

 

下面两步是为了将server1中设置好的yum仓库和keepalived配置文件直接分享到server2

scp -r /usr/local/keepalived/  server2:/usr/local

scp /etc/yum.repos.d/rhel-source.repo server2:/etc/yum.repos.d/

2.在server2中:

yum install ipvsadm mailx -y

chmod  +x  /usr/local/keepalived/etc/rc.d/init.d/keepalived

ln -s /usr/loal/keepalived/sbin/keepalived  /sbin

ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived  /etc/init.d/

ln -s /usr/local/keepalivedetc/sysconfig/keepalived  /etc/sysconfig

ln -s /usr/local/keepalived/etc/keepalived   /etc/

vim /etc/keepalived/keepalived.conf

/etc/init.d/keepalived start

cat /var/log/messages

3.测试:

1)高可用测试:停止master上的keepalived服务,看backup是否接管

server1中:/etc/init.d/keepalived  stop

                       ip addr show

                       ipvsadm -ln

server2中:ip addr show

                       ipvsadm -ln

cat /var/log/messages

server1中keepalived服务开启时

2)负载均衡测试:物理机连续curl vip ,查看是否达到负载均衡

可以通过ipvsadm -Lnc查看详细连接情况

3)故障切换测试;任意关闭realserver上的httpd服务,keepalived监控模块是否能及时发现

然后屏蔽故障节点,同时将服务转移到正常节点来执行

四、lvs+keepalived应用情况

1.一个vip拥有两个端口在两台主机上负载均衡

1)在server3中:

yum install vsftpd -y

/etc/init.d/vsftpd start

2)在server4:

yum install vsftpd -y

/etc/init.d/vsftpd start

3)在server1中:

vim /etc/keepalived/keepalived.conf(最后面添加)

/etc.init.d/keepalived restart

4)在server2中:

vim /etc/keepalived/keepalived.conf

 添加与server1中/etc/keepalived/keepalived.conf同样的内容

/etc/init.d/keepalived restart

5).测试:

物理机连续curl vip,查看是否达到负载均衡

物理机lftp vip ,查看是否能够查看共享目录

高可用测试:停止master上的keepalived服务,看backup是否接管

2.两个vip拥有两个端口在两台主机上互为主备实现负载均衡

1).在server1中:

vim /etc/keepalived/keepalived.conf

添加

/etc/initd/keepalived restart

2)在server2中:

vim /etc/keepalived/keepalived.conf

添加

3)在server3中:

ip addr add 172.25.45.200/32 dev lo

arptables -A IN 172.25.45.200 -j DROP

arptables -A OUT -s 172.25.45.200 -j mangle --mange-ip-s 172.25.45.3

/etc/init.d/arptables_jf save

4)在server4中

ip addr add 172.25.45.200/32 lo

arptables -A  IN 172.25.45.200 -j DROP

arptables -A OUT -s 172.25.45.200 -j mangle --mange-ip-s 172.25.45.4

/etc/init.d/arptables_jf save

5)测试:

物理机连续curl对应vip,查看是否达到负载均衡

物理机lftp对应vip,查看是否能够查看共享目录

高可用测试:停止master上的keepalived服务,看backp是否接管

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值