LVS模式一:直接路由模式DR(Direct Routing)
(一)LVS
一、LVS的了解
LVS(Linux Virtual Server)可以理解为一个虚拟服务器系统。
Internet的飞速发展,网络带宽的增长,Web服务中越来越多地使用CGI、动态主页等CPU密集型应用,这对服务器的性能有较高要求,单台服务器已经无法满足需要,所以集群自然的成为一种解决方案,而LVS便是其中的一种集群方案。LVS使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易扩展,而价格低廉的解决方案。也可以这样理解:lvs能够实现在大并发的情况下,将前端调度器收到的请求分发给后端服务器处理,实现了负载均衡集群的作用。
集群(Cluster)是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。集群系统的主要优点:高可扩展性、高可用性、高性能、高性价比。 常见的集群类型:
HA:High Availability 高可用集群
HP:High Performance 高性能集群
二、LVS结构和工作原理
LVS由前端的负载均衡器(Load Balance,LB)和后端的真实服务器(Real Server,RS)群组成的。RS中间可以通过局域网或广域网来连接。LVS的这种结构是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务器的RS群。当用户的请求发往虚拟服务器时,LB将会根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。然后RS根据请求内容将对应的请求结果返回给客户,同请求包一样,应答包的返回方式也与包转发策略有关。
三、LVS的包转发策略(基本为三种)
1)NAT(Network Address Translation)模式:实现目标地址和目标端口的转发;当客户端发送一个请求到VIP中,然后VS收到数据包之后,根据调度策略选择一个RIP(其中,LB将请求包中的虚拟服务器中的ip转换为选定的RIP,并转发给RS);RS将应答包发送给LB,LB将应答请求中的RIP转换为VIP,回送给客户端。
2)IP隧道(IP Tunneling)模式:当LB接收到用户请求包之后,根据IP隧道协议封装请求包,然后传送给某一个特定的RS,RS解析出请求的信息,直接将应答信息传送给用户。此时,要求LB和RS都支持IP隧道协议。
3)DR(Direct Routing)模式:实现的是MAC地址的转换;LB受到数据包之后,将请求包中的MAC地址转换为某一选定RS中目标地址的MAC地址后转发出去,RS受到请求包之后,可直接将应答内容传送给客户端。但此时要求LB和RS在局域网内,且LB和RS群共享一个虚拟IP。
四、DR模式的原理图
DR模式下数据传输过程
五、LVS模式下的DR模式的搭建
1、在虚拟服务器上配置更高级的yum源
---> ls /var/www/html/rhel6.5 # 此时,我的镜像在真机中挂载,所以在真机中查看镜像的信息
---> vim /etc/yum.repos.d/rhel-source.repo # 在虚拟服务器上配置所有的yum源,如下所示
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.2.250/rhel6.5
enabled=1
gpgcheck=0
[HighAvailability] # 高可用
name=HighAvailability
baseurl=http://172.25.2.250/rhel6.5/HighAvailability
gpgcheck=0
[LoadBalancer] # 负载均衡
name=LoadBalancer
baseurl=http://172.25.2.250/rhel6.5/LoadBalancer
gpgcheck=0
# LoadBancer:可以将来自客户端的请求分发到不同的服务器,提高服务器的性能,并可以自动寻找最优服务器转发请求。
# 这样不仅提高系统性能,也达到了负载均衡的目的,满足了用户的需求。
# 故LoadBalancer一般应用与web服务器前端,来均衡发到web服务器的请求量,提高系统性能。
# LoadBalacer可连接多个web server,从而将其组成一个集群(cluster)。集群中负载的分配通过LoadBalancer来控制和管理。
# 当然也可以更好的负载均衡,LoadBalancer可构建为一个集群。
[ResilientStorage] # 弹性存储
name=ResilientStorage
baseurl=http://172.25.2.250/rhel6.5/ResilientStorage
gpgcheck=0
[ScalableFileSystem] # 可扩展文件系统
name=ScalableFileSystem
baseurl=http://172.25.2.250/rhel6.5/ScalableFileSystem
gpgcheck=0
---> yum clean all # 清空yum源中的缓存
---> yum repolist # 显示yum仓库的信息
2、在server1服务器上安装ipvsadm(调度器),并添加规则。(ipvsadm时管理集群服务的命令行工具,用于管理LVS策略规则)
---> yum install ipvsadm -y
---> ipvsadm -A -t 172.25.2.100:80 -s rr # -A 添加一个虚拟机设备;-t 添加tcp服务和ip;-s 调度算法(rr|wrr|wlc|等)
---> ipvsadm -a -t 172.25.2.100:80 -r 172.25.2.2:80 -g # -a 添加rs服务器;-t 调度器ip;-r RS的ip; -g dr模式(直接路由)
---> ipvsadm -a -t 172.25.2.100:80 -r 172.25.2.3:80 -g # 添加另一台rs服务器
---> ip addr add 172.25.2.100/24 dev eth0 # 给调度器添加一个虚拟ip
3、给后端服务器172.25.2.2添加ip:
---> ip addr add 172.25.2.100/24 dev eth0
---> ip addr
4、给后端服务器172.25.2.3添加ip:
---> ip addr add 172.25.2.100/24 dev eth0
---> ip addr
5、在物理机中测试结果如下:
---> arp -an | grep 100 # 查看100主机的地址解析结果(为MAC地址)
---> arp -d 172.25.2.100 # 清空arp中缓存的mac地址
---> ping 172.25.2.100 # 重新获取mac地址,并缓存
---> arp -an | grep 100 # 再次查看(此时,与第一次结果不同;分别为server2和server3中对应的100的MAC地址)
注释:我们发现,测试端没有经过调度器,而是直接到达后端(没有形成轮叫)。此时,我们需要在server2和server3下载arptables_jf,防止客户端直接访问后端。
6、下载arptables_jf # 由与server2和server3执行操作一样,所以以server2为例。
基本思路和iptables一样,不过,arptables处理arp协议有关的包,这些包在iptables中并不会处理·arptables可用于灵活的arp管理,如果善于运用的话,不失为一个优秀的arp防火墙.既能防止别的机器对自己进行arp欺骗,又能防止本机病毒或错误程序向其他机器发起arp攻击。
---> yum install arptables_jf -y # 当启动arptables时,火墙也会启动。(且先经过火墙)
---> arptables -A IN -d 172.25.2.100 -j DROP # 在网内接收包时,拒绝172.25.2.100为目的地址的请求
---> arptables -A OUT -s 172.25.2.100 -j mangle --mangle-ip-s 172.25.2.2 # 当自身需要在网内发包,把原来包含虚拟ip的arp请求做地址伪装
---> /etc/init.d/arptables_jf save # 保存写进去的策略
---> /etc/init.d/arptables_jf start # 启动arptables服务
---> arptables -L # 查看arp策略
注意:server3中和server2中做相同的处理
7、在测试端进行测试:(此时,有轮询情况。并且查看访问100的MAC地址的时候,显示的是调度器的MAC地址)
---> ipvsadm -Ln # 有n的时候,表示有显示ip和端口号;L 表示显示ipvsadm的规则。
(二)DR模式下LVS的健康检查
我们需要的情况是这样的,当后端的服务器发生出现错误时, 在测试端测试时会提示出错误的信息。此时,我们需要对后端服务器做健康检查。具体操作步骤如下
在以上操作的基础上,若server2和server3的httpd服务器关闭之后,测试端的结果为:
1、在server1中,安装软件 ldirectord-3.9.5-3.1.x86_64.rpm 。(对后端服务器做检查)
---> yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
2、将配置文件的母板拷贝到/etc/ha.d/目录下
---> cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/
3、编辑ldirectord的配置文件
---> vim /etc/ha.d/ldirectord
# Sample for an http virtual service
real=172.25.2.2:80 gate # 后端真实服务器server2的ip
real=172.25.2.3:80 gate # 后端真实服务器server3的ip
fallback=127.0.0.1:80 gate # 当后端服务器都有问题时,本机进行维护
service=http
scheduler=rr # 采用轮询算法
#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
---> ipvsadm -Ln
6、在本机安装httpd服务,并修改配置文件的端口号为80。同时添加默认发布目录
---> vim /var/www/html/index.html
<h1>该站点正在维护。。。</h1>
---> /etc/init.d/httpd restart
7、关闭server2和server3的httpd服务
8、在客户端测试结果如下:
---> curl 172.25.2.100
9、在调度器主机上查看策略的执行此次数
---> ipvsadm -Ln
LVS模式一:直接路由模式DR(Direct Routing)的更多相关文章
- LVS 负载均衡——直接路由模式DR
一.配置的网络拓扑结构图 二.配置lvs服务器 配置虚拟网卡地址(VIP地址) [root@localhost ~]# ifconfig eno16777728: 192.168.200.253 ne ...
- 转载-LVS的三种工作模式
来源地址:http://www.uml.org.cn/zjjs/201211124.asp 1.lvs简介 lvs是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立 ...
- 4.LVS的三种工作模式_DR模式
1.DR模式(直接路由模式:Virtual Server via Direct Routing) DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返 ...
- Linux系统(四)负载均衡LVS集群之NAT模式
序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建 ...
- RabbitMQ六种队列模式-路由模式
前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式 [本文]RabbitMQ六种队列模式-主 ...
- vue切换路由模式{hash/history}
vue中常用的路由模式 hash(#):默认路由模式 histroy(/)切换路由模式 切换路由模式 export default new Router({ // 路由模式:hash(默认),hist ...
- LVS工作总结之原理篇–DR模式
原文地址: http://www.chenqing.org/2012/11/%E3%80%90lvs%E3%80%91lvs%E5%B7%A5%E4%BD%9C%E6%80%BB%E7%BB%93%E ...
- LVS的工作模式介绍和NAT模式&DR模式实验步骤
一:LVS介绍 二.LVS的NAT和DR模式的实验及配置步骤 一.LVS的简单介绍 linux virtual server 简单来讲lvs是一段内核代码 类似于netfilter本身是一框架但不提供 ...
- RabbitMQ (六) 订阅者模式之路由模式 ( direct )
路由模式下,生产者发送消息时需要指定一个路由键(routingKey),交换机只会把消息转发给包含该路由键的队列 这里,我们改变一下声明交换机的方式. 我们通过管理后台添加一个交换机. 添加后,生产者 ...
随机推荐
- 【Python】__slots__ 、@property、多重继承、定制类、枚举类、元类
__slots__ @property 多重继承 定制类 枚举类 元类 [使用__slots__] 1.动态语言的一个特点就是允许给实例绑定任意的方法和变量,而静态语言(例如Java)必须事先将属性方 ...
- MVc分页【关于使用扩展方法实现MVc分页】
近期对MVc自定义分页作了一下小研究下面把他记下来 下述代1,2,3里面的代码可以直接拷贝,4以后的根据情况自己选定 1.在后台任写如下的扩展方法(任一类库都可以,但是用时得引用命名空间) // 添加 ...
- github代码上传下载慢问题
绑上下面的host,实测下载速度可提高2倍左右. 151.101.72.249 github.global.ssl.fastly.net
- ubuntu下apt-get的配置文件是哪个
答:在/etc/apt/apt.conf 这个配置文件里可以指定使用代理,如: Acquire::https::proxy "http://myproxy.com:8080/";
- pt-table-checksum校验mysql主从数据一致性
主从数据的一致性校验是个头疼的问题,偶尔被业务投诉主从数据不一致,或者几个从库之间的数据不一致,这会令人沮丧.通常我们仅有一种办法,热备主库,然后替换掉所有的从库.这不仅代价非常大,而且类似治标不治本 ...
- 转载 URL短地址压缩算法
文章转载http://www.nowamagic.net/webdesign/webdesign_ShortUrlInTwitter.php /// <summary> /// 生成sal ...
- Flink快速入门
文章目录 1 安装:下载并启动 1.1 下载 1.2 启动一个local模式的Flink集群 2 运行例子 3 集群模式安装 4 Flink on YARN 安装:下载并启动 Flink可以在Linu ...
- 从0开始 Java实习 黑白棋
黑白棋的设计 代码如下: import java.util.*; public class Chess{ char[][] chess = new char[16][16]; public stati ...
- jQuery Ajax总结
jQuery对Ajax的操作进行了封装.jQuery中\(.ajax()属于最底层的方法,这个放在后面说,首先看看封装了\).ajax()的方法. load()方法 load()可以远程载入HTML并 ...
- Gray Code,求格林码
问题描述: The gray code is a binary numeral system where two successive values differ in only one bit. G ...