企业——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源文件

[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

   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   ##查看写入的策略

   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

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

   arp -an |grep 100         ##查看地址信息

? (172.25.254.100) at 52:54:00:50:cc:71 [ether] on br0

   arp -d 172.25.254.100     ##down掉连接

   curl 172.25.254.100

   arp -an |grep 100       ##出现的是 vm2 vm3的信息,发生变化

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

   RS上:

   yum install arptables_jf -y

   arptables -A IN -d 172.25.254.100 -j DROP

   arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.2

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

   /etc/init.d/arptables_jf save

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

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

   curl 172.25.254.100

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

   curl 172.25.254.100

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

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

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

解决方法一:使用ldirectord

   yum install ldirectord-3.9.5-3.1.x86_64.rpm -y

   rpm -ql ldirectord

   cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d

   cd /etc/ha.d

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

        virtual=172.25.254.100:80

         real=172.25.254.2:80 gate

         real=172.25.254.3:80 gate

         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

   ipvsadm -C     ##清理规则

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

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

   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

猜你喜欢

转载自www.cnblogs.com/wf-aiyouwei/p/9715801.html