企业——LVS-DR模式负载均衡构建配置

####LVS-DR模式负载均衡构建配置###

 

1.过程

client -> VS -> RS -> client(VS只做调度,RS为虚拟服务器)

 

DR模式:直接由路由,通过改写请求报文的目的MAC地址,将请求发送给真实的服务器,服务器将相应消息直接发送给客户端

 

2.原理详情

1)通过在调度器VS上修改数据包的目的MAC地址实现转发,注意源地址是CIP,目的地址仍然是VIP,(CIP(CMAC)-> VIP(VM -> RM,在二层链路层改变了MAC地址来定位))

2)请求的报文经过调度器,而服务器响应处理后的报文无需经过调度器,因而并发访问量大时使用效率很高(和NAT模式相比)

3)因为DR模式是通过MAC地址改写机制实现转发,因此所有RS节点和调度器只能在同一个局域网里面

4)服务器主机需要绑定VIP地址在lo接口上,且需要配置ARP抑制

5)服务器节点的默认网关不需要配置成LB,而是直接配置为上级路由的网关,能让服务器直接出网就可以

6)因为DR模式的调度器只做MAC地址的改写,所以调度器就不能改写目标端口,那么服务器就得使用和VIP相同的端口提供服务

 

3.实验环境及其基本操作

关闭iptables和selinux

开启封装好base之后,创建的四个虚拟机

rhel6.5

 

VS: vm1 172.25.254.1

RS1: vm2 172.25.254.2

RS2: vm3 172.25.254.3

vip 172.25.254.100

       

 

<1>.VS

 

1)vim /etc/yum.repos.d/rhel-source.repo    ##重新配置yum源文件,配置成更高级的yum源仓库。

 

[rhel-source]

name=Red Hat Enterprise Linux $releasever - $basearch - Source

baseurl=http://172.25.254.77/rhel6.5

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

 

[HighAvailability]   ##高可用

name=HighAvailability

baseurl=http://172.25.254.77/rhel6.5/HighAvailability

gpgcheck=0

 

[LoadBalancer]        ##负载均衡

name=LoadBalancer

baseurl=http://172.25.254.77/rhel6.5/LoadBalancer

gpgcheck=0

 

==========================================================

出现的错误:

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release在编写yum源的配置文件的时候,这一行不能删除,否则会报错

==========================================================

 

(2)下载ipvsadm   (在LVS调度器上安装)

 ipvsadm 的命令参数:

 -A   增加一台虚拟设备
   -a   添加真实服务器的操作
 -t   tcp服务地址
 -s   调度算法(10中调度算法rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
 -r   对应的真实ip
 -g   rh(路由)
 rr  调度算法:轮询

 

   yum install ipvsadm -y

   ipvsadm -L   ##查看是否写入策略

   ipvsadm -A -t 172.25.254.100:80 -s rr     ## -s调度算法,默认为wlc加权调度算法

   ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.2:80 -g

   ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -g

   ipvsadm -ln   ##查看写入的策略

 /etc/init.d/ipvsadm  save     ##保存写好的策略

 

   ip addr add 172.25.254.100/24 dev eth0     ##临时增加

   ip addr

 

<2>.RS后端真实服务器的配置

   注意:RS上也必须有vip才可以建立连接

   

RS1:

   yum install httpd -y

   /etc/init.d/httpd start

   cd /var/www/html/

   vim index.html

<h1>vm2-westos.com</h1>

   ip addr add 172.25.254.100/24 dev eth0     ##临时增加

   ip addr

       

 

RS2:

   yum install httpd -y

   /etc/init.d/httpd start

   cd /var/www/html/

   vim index.html

<h1>vm3-westos.com</h1>

   ip addr add 172.25.254.100/24 dev eth0     ##临时增加

   ip addr

       

 

<3>.客户端测试

   发现连接到的ip(VS和RS的ip都一样)是随机的,因为三台server在统一VLAN下具有相同的VIP,故不能保证每次都访问到调度器

   curl 172.25.254.100  ##这里出现的是轮询的情况,是因为绑定的是 server1上的MAC地址,所以会出现轮询的效果

  <h1>vm2-westos.com</h1>

  <h1>vm3-westos.com</h1>

  <h1>vm2-westos.com</h1>

  <h1>vm3-westos.com</h1>

  <h1>vm2-westos.com</h1>

  <h1>vm3-westos.com</h1>

 

  以上情况,server1,2,3都有可能被访问到

  如果绑定的MAC地址是server1,则在server2,3轮询

  如果绑定的MAC地址是sever2或sever3的,那么会发现,在测试端根本不会出现轮询,而是直接去了MAC绑定的后端服务器 (显然这样在企业中是不允许的)

   arp -an |grep 100         ##查看绑定的MAC地址的信息

? (172.25.254.100) at 52:54:00:50:cc:71 [ether] on br0  ##这里绑定的是server1的MAC地址

   arp -d 172.25.254.100     ## 删除掉刚才的绑定的策略,重新访问

 

   curl 172.25.254.100      ##这里出现的就是客户端直接绑定了后端服务器的MAC地址,因此访问的时候就不会出现轮询的效果。显然这样是不被允许的。

  <h1>vm2-westos.com</h1>

  <h1>vm2-westos.com</h1>

  <h1>vm2-westos.com</h1>

   arp -an |grep 100       ##出现的是 vm2/vm3的信息

 

<4>.为了让客户端通过VS访问服务器,需要给RS设置ARP抑制,来禁止客户端直接访问服务器

  为了解决刚才的情况,要求只绑定 server 1 的MAC地址,因此需要对 server2/server3 上的VIP进行隐藏,即ARP抑制。

   RS上:

   yum install arptables_jf -y    ##为arptables网络的用户控制过滤的守护进程

   arptables -A IN -d 172.25.254.100 -j DROP  ##当网内广播需要172.25.254.100这个ip时,它丢弃所有网内的请求

   arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.2  ##当它自身需要在网内发包时,伪装为自己原本的ip172.25.64.2

                      ## -A控制arp协议,IN添加策略,mangle转换

   /etc/init.d/arptables_jf save

   cat /etc/sysconfig/arptables  ##此文件存有arptables的记录,关掉之后,重启记录依旧存在

 

<5>.再一次客户端测试

 先删除现有的绑定的MAC地址

 arp  -d  172.25.254.100

   curl 172.25.254.100

   arp -d 172.25.254.100  ##多次down掉连接,查看绑定的MAC地址是否会改变

   curl 172.25.254.100

   arp -an |grep 100         ##查看地址信息,依旧是VS的MAC地址

 

4.VS对后端没有健康检查

   注意:因为没有健康检查,所以当一个后端的服务器down掉之后,服务端通过VS访问某服务器的时候,还是会能访问到,这就会出现错误

 

解决方法一:使用ldirectord

   yum install ldirectord-3.9.5-3.1.x86_64.rpm -y    ##在LVS调度器上安装健康检查

   rpm -ql ldirectord

   cp  /usr/share/doc/ldirectord-3.9.5/ldirectord.cf  /etc/ha.d    ##配置文件的母板拷到/etc/ha.d/

   cd /etc/ha.d

   vim ldirectord.cf  ##编辑文件内容

        virtual=172.25.254.100:80    ##VIP 地址和端口号

         real=172.25.254.2:80 gate  ##指定RealServer地址和端口,同时设定LVS工作模式,gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。

         real=172.25.254.3:80 gate

         fallback=127.0.0.1:80 gate  ##当所有的real server节点不能工作时,web服务重定向到本地的80端口的默认发布页面上。

         service=http  ##指定服务类型,对http服务做负载均衡

         scheduler=rr  ##指定调度算法,这里是rr(轮叫)算法

         #persistent=600

         #netmask=255.255.255.255

         protocol=tcp  ##指出该服务使用的协议:tcp、udp 或 fwm

         checktype=negotiate  ##指定Ldirectord的检测类型,默认为negotiate

         checkport=80  ##指出健康检查使用的端口

         request="index.html"

         #receive="Test Page"

         #virtualhost=www.x.y.z

   ipvsadm -C     ##清理规则

   ipvsadm -ln    ##查看是否清除规则

   /etc/init.d/ldirectord  restart  ##再次开启服务,又可以加载出规则

 

   yum install httpd -y

   cd /var/www/html/

   vim index.html

  <h1>系统维护中。。。</h1>

 

<1>在客户端测试

   关闭两个服务器的http服务

   重新开起一个虚拟机vm4

   curl 172.25.254.100

<h1>系统维护中。。。</h1>

 

   注意:访问的是本地的httpd的发布目录,因此表示监测成功

 

解决方法二:使用keepalived

   /etc/init.d/ldirectord stop   ##应用之前先关掉上一个服务

 

1)下载keepalived的压缩文件

   tar zxf keepalived-2.0.6.tar.gz

   ./configure --with-init=SYSV --prefix=/usr/local/keepalived/      ##将文件转成二进制文件

   make    ##编译

   make install

   

2)创建软链接

   cd /usr/local/keepalived/etc/rc.d/init.d

   ls

   chmod +x keeppalived

   ln -s /usr/local/keepalived/etc/rc.d/init.d/keeppalived /etc/init.d

   cd ..

   cd ..

   ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig

   ln -s /usr/local/keepalived/etc/keepalived /etc

   ln -s /usr/local/keepalived/sbin/keepalived /sbin/

 

   ll /etc/sysconfig/keepalived ##查看软链接是否做好

   cd /usr/local

   scp -r keepalived/ vm4:/usr/local

   (将上面的创建链接操作再执行一遍)

 

3)配置keepalived文件

   cd /etc/keepalived/

   vim keepalived.conf

 

global_defs {

   notification_email {

root@localhost

   }

   notification_email_from keepalived@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

   vrrp_skip_check_adv_addr

   #vrrp_strict   ##注释以防其修改防火墙规则

   vrrp_garp_interval 0

   vrrp_gna_interval 0

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100     ##数值越大,优先级越高

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        172.25.254.100

    }

}

 

virtual_server 172.25.254.100 80 {  

##VS的VIP,服务启动生效时自动添加

    delay_loop 6      ##对后端健康检查的时间

    lb_algo rr        ##调度算法

    lb_kind DR       ##模式为DR模式

    #persistence_timeout 50

    protocol TCP

 

    real_server 172.25.254.2 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            retry 3

            delay_before_retry 3

        }

    }

    real_server 172.25.254.3 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            retry 3

            delay_before_retry 3

        }

    }

}

 

   scp keepalived.conf vm4:/etc/keepalived/

 

   注意:因为虚拟机vm4是用来做备用VS的,是为了防止当VS(vm1)挂掉的时候,不会导致服务器瘫痪。当vm1 down掉以后,vm4就可以立即接替vm1的工作

 

4)客户端测试

   vm1,2,3,4都开启的时候

   用真机访问,是通过主VS访问服务器的

   

   vm1,4开启,2,3关闭http服务的时候

   用真机访问的是VS的httpd的发布文件

 

   vm2,3,4开启,1关闭http服务的时候

   服务不会中断,vm4会接替vm1的工作,查看的是vm4的地址信息

       

       

      

      

      

 

5.vm1和vm4互为主备

  一个当被用的虚拟机,会有点浪费资源。所以,当服务很多的时候,可以将服务分开来当主备,这样两个服务器可以同时工作,并且互为主备

 

   cd /etc/keepalived/

   vim keepalived.conf

更改配置文件图片,如下:

   /erc/init.d/keepalived start

 

posted @ 2018-09-27 21:38  wf-aiyouwei  阅读(316)  评论(0编辑  收藏  举报