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),交换机只会把消息转发给包含该路由键的队列 这里,我们改变一下声明交换机的方式. 我们通过管理后台添加一个交换机. 添加后,生产者 ...
随机推荐
- PCLK怎么获得?
1.PCLK是由MCLK进行分频而来...... 2.PCLK是个时钟,通过寄存器只能调节它的频率什么的,它是控制像素输出的一个时钟: 3.在曝光时间的算法中需要知道PCLK的值,是因为在sensor ...
- 前端学习笔记之ES6快速入门
0x1 let和const let ES6新增了let命令,用于声明变量.其用法类似var,但是声明的变量只在let命令所在的代码块内有效. { let x = 10; var y = 20; } x ...
- nginx 代理服务器配置双向证书验证
生成证书链 用脚本生成一个根证书, 一个中间证书(intermediate), 三个客户端证书. 脚本来源于(有修改)https://stackoverflow.com/que... 中间证书的域名为 ...
- go基础语法
定义变量: 可放在函数内,或直接放在包内使用var集中定义变量使用:=定义变量写的短一些 package main import ( "fmt" "math" ...
- RocEDU.阅读.写作《乌合之众》(一)
序言 作者在序言里主要论述了时代演变的内在原因,表明对群体进行研究的重要性,阐述了研究群体行为特征时的研究方法,并概述了群体的发展过程. 造成文明变革的唯一重要变化,是影响到思想.观念和信仰的变化.目 ...
- An Example for Javascript Function Scoping and Closure
1. An Real World Example In the patron detail page of the CRM system I'm working with, there’re larg ...
- intellij idea rearrange code
reformat code的时候,无法将filed放在method前边,很恶心. 那么先去
- centos下利用mail命令进行邮件发送
centos下默认自带mail命令: 可以用如下命令查看存放位置: which mail 结果如下: 如果没有安装可以使用 如下命令安装 yum -y install mailx 利用mail命令进行 ...
- JDK 中的监控与故障处理工具-02 (jps)
jps : JVM Process Status Tool jps 命令可以列出正在运行的虚拟机进程, 并显示虚拟机执行的 main class 的名称(main函数所在的类),以及这些进程的本地虚拟 ...
- 动态规划入门-01背包问题 - poj3624
2017-08-12 18:50:13 writer:pprp 对于最基础的动态规划01背包问题,都花了我好长时间去理解: poj3624是一个最基本的01背包问题: 题意:给你N个物品,给你一个容量 ...