LVS模式一:DR(Direct Routing)直接路由模式
一般来说,LVS集群采用三层结构,其主要组成部分为:
A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
DR的工作模式:
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是否接管
阅读更多
- LVS-DR直接路由模式
- LVS-DR直接路由 RR(轮询模式)搭建
- 采用Lvs DR(直接路由)模式搭建集群
- 构建直接路由模式(DR)的LVS 推荐
- Lvs之直接路由模式DR配置
- 直接路由模式(LVS-DR)
- LVS-DR直接路由实现负载均衡示例
- Lvs-dr(直接路由)集群的实现和防火墙标记实现持久连接
- 直接路由模式lvs
- VS/DR(直接路由,Direct Routing, DR)
- lvs-dr直接路由 和防火墙标记的实现
- LVS 的DR直接路由实现负载均衡并实现NAS(网络附加储存技术)
- Lvs网络负载均衡 直接路由(dr)
- LVS:DR模式(Direct Routing)部署实验
- LVS:DR模式(Direct Routing)部署实验
- linux服务器LVS/DR模式+nfs
- 请详细描述LVS DR模式的原理
- LVS之——DR模式
- CentOS6.5高可用集群LVS+Keepalived(DR模式)
- 关于LVS-DR模式的理解