(一)LVS

一、LVS的了解

LVS(Linux Virtual Server)可以理解为一个虚拟服务器系统。

Internet的飞速发展,网络带宽的增长,Web服务中越来越多地使用CGI、动态主页等CPU密集型应用,这对服务器的性能有较高要求,单台服务器已经无法满足需要,所以集群自然的成为一种解决方案,而LVS便是其中的一种集群方案。LVS使用负载均衡技术将多台服务器组成一个虚拟服务器。它为适应快速增长的网络访问需求提供了一个负载能力易扩展,而价格低廉的解决方案。也可以这样理解:lvs能够实现在大并发的情况下,将前端调度器收到的请求分发给后端服务器处理,实现了负载均衡集群的作用

集群(Cluster)是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。集群系统的主要优点:高可扩展性、高可用性、高性能、高性价比。 常见的集群类型:

      LB:Load Balancing       高可拓展,伸缩集群
      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,回送给客户端。

客户端向VIP发送请求,进行的是将目的地址VIP地址为转化为RIP;RS响应客户端请求时,进行的是源地址为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源,如下所示

 [rhel-source]
 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为例。

 arptables:

    基本思路和iptables一样,不过,arptables处理arp协议有关的包,这些包在iptables中并不会处理·arptables可用于灵活的arp管理,如果善于运用的话,不失为一个优秀的arp防火墙.既能防止别的机器对自己进行arp欺骗,又能防止本机病毒或错误程序向其他机器发起arp攻击。

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

--->  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

 virtual=172.25.2.100:80               # 网内向网外暴露的VIP
        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)的更多相关文章

  1. LVS 负载均衡——直接路由模式DR

    一.配置的网络拓扑结构图 二.配置lvs服务器 配置虚拟网卡地址(VIP地址) [root@localhost ~]# ifconfig eno16777728: 192.168.200.253 ne ...

  2. 转载-LVS的三种工作模式

    来源地址:http://www.uml.org.cn/zjjs/201211124.asp 1.lvs简介         lvs是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立 ...

  3. 4.LVS的三种工作模式_DR模式

    1.DR模式(直接路由模式:Virtual Server via Direct Routing) DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返 ...

  4. Linux系统(四)负载均衡LVS集群之NAT模式

    序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建 ...

  5. RabbitMQ六种队列模式-路由模式

    前言 RabbitMQ六种队列模式-简单队列RabbitMQ六种队列模式-工作队列RabbitMQ六种队列模式-发布订阅RabbitMQ六种队列模式-路由模式 [本文]RabbitMQ六种队列模式-主 ...

  6. vue切换路由模式{hash/history}

    vue中常用的路由模式 hash(#):默认路由模式 histroy(/)切换路由模式 切换路由模式 export default new Router({ // 路由模式:hash(默认),hist ...

  7. 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 ...

  8. LVS的工作模式介绍和NAT模式&DR模式实验步骤

    一:LVS介绍 二.LVS的NAT和DR模式的实验及配置步骤 一.LVS的简单介绍 linux virtual server 简单来讲lvs是一段内核代码 类似于netfilter本身是一框架但不提供 ...

  9. RabbitMQ (六) 订阅者模式之路由模式 ( direct )

    路由模式下,生产者发送消息时需要指定一个路由键(routingKey),交换机只会把消息转发给包含该路由键的队列 这里,我们改变一下声明交换机的方式. 我们通过管理后台添加一个交换机. 添加后,生产者 ...

随机推荐

  1. 【Python】__slots__ 、@property、多重继承、定制类、枚举类、元类

    __slots__ @property 多重继承 定制类 枚举类 元类 [使用__slots__] 1.动态语言的一个特点就是允许给实例绑定任意的方法和变量,而静态语言(例如Java)必须事先将属性方 ...

  2. MVc分页【关于使用扩展方法实现MVc分页】

    近期对MVc自定义分页作了一下小研究下面把他记下来 下述代1,2,3里面的代码可以直接拷贝,4以后的根据情况自己选定 1.在后台任写如下的扩展方法(任一类库都可以,但是用时得引用命名空间) // 添加 ...

  3. github代码上传下载慢问题

    绑上下面的host,实测下载速度可提高2倍左右. 151.101.72.249 github.global.ssl.fastly.net

  4. ubuntu下apt-get的配置文件是哪个

    答:在/etc/apt/apt.conf 这个配置文件里可以指定使用代理,如: Acquire::https::proxy "http://myproxy.com:8080/";

  5. pt-table-checksum校验mysql主从数据一致性

    主从数据的一致性校验是个头疼的问题,偶尔被业务投诉主从数据不一致,或者几个从库之间的数据不一致,这会令人沮丧.通常我们仅有一种办法,热备主库,然后替换掉所有的从库.这不仅代价非常大,而且类似治标不治本 ...

  6. 转载 URL短地址压缩算法

    文章转载http://www.nowamagic.net/webdesign/webdesign_ShortUrlInTwitter.php /// <summary> /// 生成sal ...

  7. Flink快速入门

    文章目录 1 安装:下载并启动 1.1 下载 1.2 启动一个local模式的Flink集群 2 运行例子 3 集群模式安装 4 Flink on YARN 安装:下载并启动 Flink可以在Linu ...

  8. 从0开始 Java实习 黑白棋

    黑白棋的设计 代码如下: import java.util.*; public class Chess{ char[][] chess = new char[16][16]; public stati ...

  9. jQuery Ajax总结

    jQuery对Ajax的操作进行了封装.jQuery中\(.ajax()属于最底层的方法,这个放在后面说,首先看看封装了\).ajax()的方法. load()方法 load()可以远程载入HTML并 ...

  10. Gray Code,求格林码

    问题描述: The gray code is a binary numeral system where two successive values differ in only one bit. G ...