LVS(linux虚拟机服务器集群系统)实现DR模式负载均衡
一、LVS简介
1.什么是LVS?
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的*软件项目之一。
2.LVS主要有哪几种负载均衡技术?
主要有VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
3.LVS的结构为?
一般来说,LVS集群采用三层结构,其主要组成部分为:
A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
二、LVS之DR模式
1.DR模式的原理
在LVS(TUN)模式下,由于需要在LVS调度器与真实服务器之间创建隧道连接,这同样会增加服务器的负担。与LVS(TUN)类似,DR模式也叫直接路由模式,其体系结构如图4所示,该模式中LVS依然仅承担数据的入站请求以及根据算法选出合理的真实服务器,最终由后端真实服务器负责将响应数据包发送返回给客户端。与隧道模式不同的是,直接路由模式(DR模式)要求调度器与后端服务器必须在同一个局域网内,VIP地址需要在调度器与后端所有的服务器间共享,因为最终的真实服务器给客户端回应数据包时需要设置源IP为VIP地址,目标IP为客户端IP,这样客户端访问的是调度器的VIP地址,回应的源地址也依然是该VIP地址(真实服务器上的VIP),客户端是感觉不到后端服务器存在的。由于多台计算机都设置了同样一个VIP地址,所以在直接路由模式中要求调度器的VIP地址是对外可见的,客户端需要将请求数据包发送到调度器主机,而所有的真实服务器的VIP地址必须配置在Non-ARP的网络设备上,也就是该网络设备并不会向外广播自己的MAC及对应的IP地址,真实服务器的VIP对外界是不可见的,但真实服务器却可以接受目标地址VIP的网络请求,并在回应数据包时将源地址设置为该VIP地址。调度器根据算法在选出真实服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实服务器的MAC地址,通过交换机将该数据帧发给真实服务器。整个过程中,真实服务器的VIP不需要对外界可见。
2.部署DR(直接路由)模式
1.部署环境:
- 环境:真机(系统不做限制),rhel6.5虚拟机:selinux和防火墙均关闭,yum源网络已经配置好,安装了vim和openssh-server和lftp,删除了/etc/udev/70-persistent-net.rules,server1的ip为172.25.1.1,server2的ip为172.25.1.2,以此类推
- Load Balance: 172.25.1.1(server1)
- Virtual IP:172.25.1.100
- RealRerver1:172.25.1.2 (server2)
- RealRerver2:172.25.1.3(server3)
- 物理机内网 : 172.25.1.254
1)server1
由于这里需要使用linux内核的负载均衡模块,所以我们需要添加yum源
vim /etc/yum.repos.d/rhel-source.repo ##添加以下内容,由于后面的可能会用到其他核心组件,所以一并添加了
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.1.254/rhel6.5/HighAvailability
enabled=1
gpgcheck=1
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.1.254/rhel6.5/LoadBalancer
enabled=1
gpgcheck=1
[ScalableFileSystem]
name=ScalableFileSystem
baseurl=http://172.25.1.254/rhel6.5/ScalableFileSystem
enabled=1
gpgcheck=1
[ResilientStorage]
name=ResilientStorage
baseurl=http://172.25.1.254/rhel6.5/ResilientStorage
enabled=1
gpgcheck=1
然后重新刷新yum源
yum clean all
yum repolist
然后安装ipvsadm(调度器)
yum install ipvsadm -y
配置策略思路为
(1)添加一台虚拟设备
-A ##增加一台虚拟设备
-a ##添加真实服务器的操作
-t ##tcp服务地址
-s ##调度算法(10中调度算法rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
-r ##对应的真实ip
-g ##rh(路由)
rr ##调度算法:轮询
(2)添加后端实际服务器
(3)保存策略
具体代码为
ipvsadm -A -t 172.25.1.100:80 -s rr
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.2:80 -g
ipvsadm -a -t 172.25.1.100:80 -r 172.25.1.3:80 -g
/etc/init.d/ipvsadm save ##保存策略
(4)显示调度次数ipvsadm -L(-n不解析)
ipvsadm -l
ipvsadm -ln ##不加解析
(5)添加VIP
什么是VIP呢?
VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。
给所有的服务器把 VIP 地址配置在各自的 NonARP 网络设备上
ip addr add 172.25.1.100/24 dev eth0
ip addr add 172.25.1.100/32 dev eth0 ##注意这里的子网掩码为32
ip addr add 172.24.1.100/32 dev eth0
2)虚拟机server2
yum install httpd -y ##安装apache服务
cd /var/www/html
vim index.html ##添加下面内容
<h1>www.westos.org - server2</h1>
/etc/init.d/httpd start ##开启httpd服务
3)虚拟机server3
yum install httpd -y ##安装apache服务
cd /var/www/html
vim index.html ##添加下面内容
<h1>www.westos.org - server3</h1>
/etc/init.d/httpd start ##开启httpd服务
2.测试
在真机上curl 172.25.1.100
使用以下指令可以查询ipvsadm选择哪台主机作为调度机
arp -an | grep 100 ##查看绑定的MAC地址
arp -d 172.25.64.100 ##删除现有绑定MAC地址
而我们的server1的mac地址刚好是
我们这里比较幸运,系统自动选择了server1作为调度器,如果选择了server2或者是server3呢,就不会发生轮询,也就实现不了负载均衡
那么我们如何来实现只让ipvsadm绑定server调度器呢?
要避免这种情况,要求只能绑定server1(调度器)的MAC地址,所以我们要配置server2和server3的arp路由策略
yum install arptables_jf -y
arptables -A IN -d 172.25.1.100 -j DROP
arptables -A OUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.2 ##当网内广播需要172.25.64.100这个ip时,它丢弃所有网内的请求
/etc/init.d/arptables_jf save ##保存添加的两条策略
/etc/init.d/arptables_jf start ##打开arptables服务
对server3的操作跟2一模一样就可以了~
ok~
DR模式就设置完毕了~