欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-07 14:21:55
...

一、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(linux虚拟机服务器集群系统)实现DR模式负载均衡

 二、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不需要对外界可见。

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

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

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

然后安装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                    ##不加解析

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

(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

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

使用以下指令可以查询ipvsadm选择哪台主机作为调度机

arp -an | grep 100                 ##查看绑定的MAC地址
arp -d 172.25.64.100               ##删除现有绑定MAC地址

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

而我们的server1的mac地址刚好是

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

我们这里比较幸运,系统自动选择了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模式就设置完毕了~