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

(一)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

  

   

猜你喜欢

转载自www.cnblogs.com/uthnb/p/9656855.html