您的位置:首页 > 其它

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

2018-07-30 17:09 246 查看

LVS的背景:

Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲,CPU、I/O处理能力很快会成为瓶颈。由于单台服务器的性能总是有限的,简单的提高硬件性能并不能真正解决这个问题。为此,必须采用多服务器和负载均衡技术才能满足大量并发访问的需要。Linux虚拟服务器(Linux Virtual Servers,LVS)使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易于扩展,而价格低廉的解决方案。

LVS结构与工作原理

 LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。当用户的请求发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。同请求包一样,应答包的返回方式也与包转发策略有关。

LVS的包转发策略:

  1. NAT (Network Address Translation)模式。LB收到用户请求包后,LB将请求包中虚拟服务器的IP地址转换为某个选定RS的IP地址,转发给RS;RS将应答包发给LB,LB将应答包中RS的IP转为虚拟服务器的IP地址,回送给用户。
  2. IP隧道 (IP Tunneling)模式。LB收到用户请求包后,根据IP隧道协议封装该包,然后传给某个选定的RS;RS解出请求信息,直接将应答内容传给用户。此时要求RS和LB都要支持IP隧道协议。
  3. DR(Direct Routing)模式。LB收到请求包后,将请求包中目标MAC地址转换为某个选定RS的MAC地址后将包转发出去,RS收到请求包后,可直接将应答内容传给用户。此时要求LB和所有RS都必须在一个物理段内,且LB与RS群共享一个虚拟IP。

我们先来试试DR模式的LVS
DR模式下调度器和服务器组都必须在物理上有一个网卡通过不分段的局域网相连,即通过交换机或者高速的HUB相连,中间没有隔有路由器。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。

一.搭建DR模式的LVS

1.在虚拟服务器上配置更高级yum源
cd /var/www/html/source6.5

vim /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.1.250/source6.5
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]    #高可用性
name=HighAvailability
baseurl=http://172.25.1.250/source6.5/HighAvailability
gpgcheck=0

[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.1.250/source6.5/LoadBalancer   #负载均衡
gpgcheck=0

> LoadBalancer:
> 可以将来自客户端的请求分发到不同的服务器,通过将一系列的请求转发到不同的
> 服务器可以提高服务器的性能,并可以自动地寻找最优的服务器转发请求,
> 这样不仅提高了系统性能,同时达到了负载均衡的目的,满足了用户需求,因此
> LoadBalancer 在应用场景中一般处于 web 服务器的前端,用来均衡发到 web
> 服务器的请求量,均衡负载,提高系统性能。LoadBalancer 可以连接多个
> web server,从而将多个 web server组成一个集群(cluster),
> 集群中负载的分配通过 loadBalancer进行控制和管理。
> 当然为了更好地进行负载均衡,LoadBalancer 也可以构建为一个集群,
> 使用 LoadBalancer 构建的 web  server cluster

[ResilientStorage]      #弹性存储
name=ResilientStorage
baseurl=http://172.25.1.250/source6.5/ResilientStorage
gpgcheck=0

[ScalableFileSystem]    #可扩展文件系统
name=ScalableFileSystem
baseurl=http://172.25.1.250/source6.5/ScalableFileSystem
gpgcheck=0

2.yum repolist查看生成的yum包包括之前的还有新加进去的

3.在server1(虚拟服务器)上安装ipvsadm(调度器)
ipvsadm是管理集群服务的命令行工具,用于管理LVS的策略规则
显示调度次数ipvsadm -L (-n不解析)
4.添加一台虚拟设备

ipvsadm -A -t 172.25.1.100:80 -s rr
-A 增加一台虚拟设备
-t --tcp-service  service-address
-s scheduler      one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
为了实验效果明显,我们采用rr算法 (轮叫)

5.添加后端实际服务器

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
给server1(虚拟服务器)添加ip172.25.1.100  ip addr add 172.25.1.100/24 dev eth0


6.在物理机端(测试端)arp -an | grep 100 ,应该是来自server1

给server2和server3添加ip  ip addr add 172.25.77.100/24 dev eth0
在物理机端:arp -d 172.25.1.100  删除现有绑定MAC地址
ping 172.25.1.100    重新获得ip和MAC地址
arp -an | grep 100    查看绑定的MAC地址



如果绑定的MAC地址是sever2或sever3的,那么我们会发现,在测试端根本不会形成轮叫,而是直接去了MAC绑定的后端服务器

7.在server2和server3中下载yum install -y arptables_jf,防止在物理机中测试时直接访问server2和server3

什么是arptables:(可类比与iptables防火墙的用法)
arptables用于建立、获取、修改内核的arp包处理表.有几个不同的表,每个表分别含有几条内建的处理链,同时允许用户自定义处理链, 每条链是一些规则的列表,每条规则匹配特定的包.每条规则指定一个对匹配的包的操作.这个操作也叫做‘目标’,这个目标也可是跳转到同一个表中的另外的链
1.内建目标: ACCEPT, DROP, QUEUE,
RETURN.是几个最基本的目标,ACCEPT指接受这个包,DORP指丢掉这个包,QUEUE指把包传到用户空间(如果内核指定了的话),RETURN指返回到上一条链,接着执行上一条链跳转过来哪条规则的下一个规则.每条链都有一个默认目标,当包经过所有规则都没被匹配,则发给默认目标
2.表:
一边至少有一个内建的表(filter表)-t常常用于指定要操作的表.filter表有两个内建的链,IN和OUT,IN用于处理目标为发给本机目标为本机的包,OUT处理本机发出去的包.

arptables -A IN -d 172.25.1.100 -j DROP
# 当网内广播需要172.25.1.100这个ip时,它丢弃所有网内的请求
arptables -A OUT -s 172.25.1.100 -j mangle --mangle-ip-s 172.25.1.2
# 当它自身需要在网内发包时,伪装为自己原本的ip172.25.1.2
/etc/init.d/arptables_jf save   #保存添加的两条策略
/etc/init.d/arptables_jf start  #打开arptables服务
在server3中也做相同处理


8.在测试端测试curl 172.25.1.100(出现轮叫,且数据经过调度器)


调度器(虚拟服务器servere1)

二.DR模式下LVS的健康检查

在做完上边的配置后,我们发现,如果后端真实服务器出现问题,那么在测试端测试的时候,会返回给我们一个错误的页面,那么我们需要对后端服务器做健康检查,只返回正确的页面。

1.安装一个软件ldirectord-3.9.5-3.1.x86_64.rpm用来对后端服务器做健康检查
将配置文件的母板拷到/etc/ha.d/

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

3.编辑 ldirectord的配置文件

vim ldirectord.cf
# Sample for an http virtual service
virtual=172.25.1.100:80       #网内向外暴露的vip(虚拟ip)
real=172.25.1.2:80 gate  # 后端真实服务器server1
real=172.25.1.3:80 gate  # 后端真实服务器server2
fallback=127.0.0.1:80 gate  # 如果后端真实服务器全部挂掉,只剩本机提醒用户在维护
service=http
scheduler=rr   # 采用round-robin轮叫算法
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80
request="index.html"
#receive="Test Page"
#virtualhost=www.x.y.z

4.打开健康检查服务

/etc/init.d/ldirectord start

5.清除之前的后端服务器策略 ipvsadm -C
6.重新显示策略 ipvsadm -ln

7.编写本机的Apach默认发布文件

vim /var/www/html/index.html
本站点正在维护

8..关掉server2和server3的httpd,在测试端curl 172.25.1.100
策略:

测试:

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: