LVS(linux虚拟机服务器集群系统)实现DR模式负载均衡

一、LVS简介

1.什么是LVS?

LVSLinux 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 地址配置在各自的 Non­ARP 网络设备上

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模式就设置完毕了~

猜你喜欢

转载自blog.csdn.net/weixin_40543283/article/details/87794845