(一)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. PCLK怎么获得?

    1.PCLK是由MCLK进行分频而来...... 2.PCLK是个时钟,通过寄存器只能调节它的频率什么的,它是控制像素输出的一个时钟: 3.在曝光时间的算法中需要知道PCLK的值,是因为在sensor ...

  2. 前端学习笔记之ES6快速入门

    0x1 let和const let ES6新增了let命令,用于声明变量.其用法类似var,但是声明的变量只在let命令所在的代码块内有效. { let x = 10; var y = 20; } x ...

  3. nginx 代理服务器配置双向证书验证

    生成证书链 用脚本生成一个根证书, 一个中间证书(intermediate), 三个客户端证书. 脚本来源于(有修改)https://stackoverflow.com/que... 中间证书的域名为 ...

  4. go基础语法

    定义变量: 可放在函数内,或直接放在包内使用var集中定义变量使用:=定义变量写的短一些 package main import ( "fmt" "math" ...

  5. RocEDU.阅读.写作《乌合之众》(一)

    序言 作者在序言里主要论述了时代演变的内在原因,表明对群体进行研究的重要性,阐述了研究群体行为特征时的研究方法,并概述了群体的发展过程. 造成文明变革的唯一重要变化,是影响到思想.观念和信仰的变化.目 ...

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

  7. intellij idea rearrange code

        reformat code的时候,无法将filed放在method前边,很恶心. 那么先去

  8. centos下利用mail命令进行邮件发送

    centos下默认自带mail命令: 可以用如下命令查看存放位置: which mail 结果如下: 如果没有安装可以使用 如下命令安装 yum -y install mailx 利用mail命令进行 ...

  9. JDK 中的监控与故障处理工具-02 (jps)

    jps : JVM Process Status Tool jps 命令可以列出正在运行的虚拟机进程, 并显示虚拟机执行的 main class 的名称(main函数所在的类),以及这些进程的本地虚拟 ...

  10. 动态规划入门-01背包问题 - poj3624

    2017-08-12 18:50:13 writer:pprp 对于最基础的动态规划01背包问题,都花了我好长时间去理解: poj3624是一个最基本的01背包问题: 题意:给你N个物品,给你一个容量 ...