虚拟机搭建LVS-DR集群

一.。必备知识

     参考搭建 NAT模型 http://blog.csdn.net/liaomin416100569/article/details/73300692

二。概念解析

  lvs官网 http://www.linuxvirtualserver.org/

  lvs和nginx的区别在于 lvs是传输层(7层中第4层)的负载均衡 也就是ip和端口的负载均衡

                                         nginx是应用层(7层中第7层) http协议的负载均衡 比如http协议中中的url ,浏览器缓存,cookie一些设置都可以在应用层 在第4层就

                                                   无法做到  明显 4层负载均衡效率高于7层负载均衡

  lvs(linux virtual server)提供了三种集群方式 

  分别是:

   Dr模型(Direct Routing)直接路由  用户负载均衡分发到RealServer NAT也是用于该目标 

   NAT模型所有的请求和响应都必须经过负载均衡服务器  一般响应的流量较大 请求的参数小  需要负载均衡器下载带宽无限大   负载均衡的目的在于均衡的将请求分发给目标RealServer不能因为下载的流量导致服务器带宽被占用完  DR模型 负载均衡器只需要将请求转发 RealServer响应不再经过均衡器直接

 由RealServer响应给客户端  由于socket长连接 客户端与负载均衡器发送的请求和响应必须是相对的 如果实现RealServer直接响应 必须在RealServer响应

时将源ip修改为负载均衡器ip  同时RealServer可连接客户端  可以给RealServer一个虚拟ip 该ip和负载均衡器的外网ip一致  同时 ip不对外发送arp


三。场景模拟

   DR模式要求所有的机器处于同一网络环境中  比如 客户端 负载均衡器 和RealServer都处于互联网中 要么同处于同一局域网中

   负载均衡器 192.168.58.134(局域网ip DIP)  192.168.58.133(客户端访问VIP)  

  RealServer1  192.168.58.135(局域网ip RIP)   192.168.58.133(虚拟ip VIP)

  RealServer2 192.168.58.136(局域网ip RIP)   192.168.58.133(虚拟ip VIP)

1.配置负载均衡器

    》添加虚拟ip 192.168.58.133(eno16777736为物理网卡名 通过ifconfig查看

       

         ifconfig eno16777736:0  192.168.58.133/32 up
         route add -host 192.168.58.133 dev eno16777736:0

    》安装ipvsadm 

            yum -y install ipvsadm
            #清空所有的路由规则
             ipvsadm -C
            #添加一个集群  192.168.58.133:80 必须是外网ip 也就是vip 因为别人才可以访问  rr表示轮询
            ipvsadm -A -t 192.168.58.133:80 -s rr
            #给集群添加一个主机 Rserver  192.168.58.135:80和192.168.58.136:80 这两台机各自部署一个tomcat -m表示nat模式 -g 表示dr模型
            ipvsadm -a -t 192.168.58.133:80 -r 192.168.58.135:80 -g
            ipvsadm -a -t 192.168.58.133:80 -r 192.168.58.136:80 -g  

2 配置RealServer1和2

   》虚拟ip的arp路由设置

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
  》 添加虚拟ip

 ifconfig lo:0192.168.58.133 broadcast192.168.58.133 netmask 255.255.255.255 up
     route add -host 192.168.58.133 lo:0 

 RealServer分别安装两个tomcat 修改端口为80

访问 http://192.168.58.133 成功

查看转发或者realserver的运行检查 可以查看系统日志 /var/log/messages文件

四。lvs缺点

   lvs使用负载算法 平均发布请求到realserver 但是不能进行健康检查 比如 rs1出现故障 director仍然会转发到rs1 所以必须结合keepalived

五。使用keepalived结合lvs检查rs故障

 模拟场景 

DServer1 192.168.58.134(局域网ip DIP)  192.168.58.133(客户端访问VIP)     +keepalived +lvs

DServer2 192.168.58.137(局域网ip DIP)  192.168.58.133(客户端访问VIP)    +keepalived +lvs

  RealServer1  192.168.58.135(局域网ip RIP)   192.168.58.133(虚拟ip VIP) +tomcat

  RealServer2 192.168.58.136(局域网ip RIP)   192.168.58.133(虚拟ip VIP)  +tomcat

两台Dserver 分别安装lvs负载均衡 并且安装使用keepalived 

keepalived 功能

 1:vip192.168.58.133 在主(Dserver1)和从(Dserver2)中漂移   如果主机Dserver1的lvs挂掉 vip自动切换给Dserver2

 2:keepalived会自动检测 后台的realserver的tomcat是否挂掉 如果挂掉自动切换到其他tomcat


在两台Dserver上分别配置 keepalived的配置文件/etc/keepalived/keepalived.conf 具体可以先参考(http://blog.csdn.net/liaomin416100569/article/details/73477162 该文章了解 keepalived)

vrrp_instance LVS {
    state MASTER   # 
    interface eno16777736
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.58.133
    }
}

virtual_server 192.168.58.133 80 {
    delay_loop 6
    lb_algo rr 
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 192.168.58.135 80 {
        weight 1
        HTTP_GET {
            url { 
              path /
              digest aa150255da35870c218c9be8cea310f3
            }
            connect_timeout 3
            nb_get_retry 3
            connect_port 80
            delay_before_retry 3
        }
    }

    real_server 192.168.58.136 80 {
        weight 1
        HTTP_GET {
            url { 
              path /
              digest aa150255da35870c218c9be8cea310f3
            }
            connect_timeout 3
            nb_get_retry 3
            connect_port 80
            delay_before_retry 3
        }
    }
}

其中 keepalived实际上通过访问 http://192.168.58.135:80/ 来测试tomcat是否正常运行 其中

digest可以预先通过  

[root@bogon keepalived]# genhash -s 192.168.58.135 -p 80 -u /
MD5SUM = aa150255da35870c218c9be8cea310f3
生成 

该keepalived 会指定在interface eno16777736指定的网络接口上生成虚拟ip 192.168.58.133

可以ip addr查看

[root@bogon keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:49:29:6c brd ff:ff:ff:ff:ff:ff
    inet 192.168.58.134/24 brd 192.168.58.255 scope global dynamic eno16777736
       valid_lft 1468sec preferred_lft 1468sec
    inet 192.168.58.133/32 scope global eno16777736
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe49:296c/64 scope link 
       valid_lft forever preferred_lft forever


同时 会自动在lvs中添加 dr的轮询rr    (不需要自己添加)

[root@bogon keepalived]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.58.133:80 rr persistent 50
  -> 192.168.58.135:80            Route   1      0          0         
  -> 192.168.58.136:80            Route   1      0          0       

所有的realserver 配置同三。场景模拟   的   2 配置RealServer1和2

访问 http://192.168.58.133

关闭其中一台tomcat 看是否能够继续访问 

关闭主lvs服务134看 看vip是否转移到 从服务器 137


posted @ 2017-06-19 19:14  饺子吃遍天  阅读(267)  评论(0编辑  收藏  举报