LVS+Keepalived实现负载均衡

       

             Lvs是由国防大学章文嵩博士发起的一个开源项目,用来实现服务器之间的负载均衡。全名为linux virtual server

             软件包围ipvsadm.tar.gz  随着企业的规模扩大。server的訪问越来越大。这时候仅仅有两个方案解决server的负载能力。

            1: 向上扩展server的硬件配置。购买昂贵的机器来承担日益繁重的性能要求。

            2: 添加server的数量,以集群的方式来提高server的性能。

            另外一种方式最好的办法就是使用lvs来进行负载均衡。

           lvs负载均衡的三种模式: NAT(network add translation),  DR(Direct Route) 和TUN模式

             第一种模式NAT:这样的模式使用地址转换来进行负载均衡,工作在网络层。全部的请求都经过lvs来进行地址转换。realserver的网关指向lvs服务器。全部的应答由lvs来回送。这样导致lvs的压力很大,在realserver达到十台时会出现网络瓶颈。 全部的realserver和lvs在一个内网中。

             另外一种模式DR:  这样的模式工作在数据链路层,在进行ARP时,仅仅有lvsserver对其响应。网关将请求送达至lvsserver。lvsserver再通过调度算法发送至realserver,在响应请求时。不须要经过Lvsserver直接响应client。这样大大提高了速率和减轻了Lvsserver的压力。


              keepalived是工作在lvs之上的,所谓的工作在之上。是keepalived通过自身的模块通过配置文件调用ipvsadm命令对LVS进行配置,实现负载均衡。

keepalived和LVS是全然不是同一个概念,它们是独立互不影响的完毕自己的工作的,lvs通过负载均衡实现对server的高扩展性,keepalived通过自身的子进程对lvs进行健康检查实现LVS的高可用性(即防止LVS崩溃和。发送主从server的健康状态和通知切换主从lvs)。

              keepalived有三个进程,VRRP协议子进程,healthcheck子进程和WatchDog父进程。

             VRRP协议子进程负责实现VRRP协议及主从之间的通信,healthcheck负责检查LVS和HTTP的健康状态,

             WatchDog进程管理两个子进程。Keepalived的模块都相对独立。能够实现不同复杂的功能,当中就有对LVS

             进行配置的模块。



            keepalived.conf配置文件具体解释:

                  global_defs{

                 router_id   50   用来标示主从的区域

           }               进行全局配置。           

         vrrp_instance   vrrp_name {

                     state  MASTER   表示主server

                     interface  eth0  在eth0监控

                    virtual_router_id     50  区域标示号

                    priority     50       主从优先级 ,主大于从

                    advert_int   2    主从互相探測是否工作时间的间隔

                     authentication{}  主从互相验证配置

                   virtual_server{

                               10.0.0.113  配置lvs的VIP(虚拟IP)

                                }

            }用来对lvs主从server进行配置的区域,使用vrrp组播方式   

      virtual_server 10.0.0.114 3 80 {

                          lb_algo rr  使用的调度算法是rr

                          lb_kind DR  使用的负载均衡模式为DR模式

                         persistence_timeout  3  測试realserver存活超时时间间隔为3秒

                         protocol  TCP  lvs与realserver之间的通信使用的协议为TCP协议

                   real_server  10.0.0.2  80{

                                      weight 1   真实server调度所占权重

                                     TCP_CHECK{

                                                    connect_timeout  3  连接超时时间

                                                    connect_port 80

                                                    nb_get_retry 3

                                        }

                                 }  配置realserver

                     } 配置相应的虚拟IPserver

    

                查看Linux系统的服务和port相应的配置文件为  /etc/servers文件

                设定系统的umask 使用命令umask 或者在配置文件 /etc/profile中设定。

                

        DR模式具体解释:

                    要求: realserver lvs_server 在同一个广播域。而且在同一网段。realserver在回环接口上配置VIP,子网

                    掩码为255.255.255.255 , LVS_server上配置VIP。client訪问VIP,网关将请求发送给lvs_server,lvs将目的

                    mac地址换成某一个real_server的MAC地址。通过调度算法确定realserver.源mac为自己的。此时接受到

                    请求的realserver因为配置了VIP,不会丢弃该请求。将其接收。然后realserver将回应包直接发送给网关

                    请求网关的mac,最后将回应包发送给client。

                    注意:要使网关仅仅将请求发送到 lvs_server上而不发送给realserver,解决的方法就是 网关发送的对VIP的

                               MAC地址的请求包仅仅有lvs服务器接收。仅仅有在每台realserver上设定内核參数

                               sysctl -w net.ipv4.conf.all.arp_ignore=2 

                               取值为0: 表示对于进入接口的arp请求包。无论请求的目的IP与自己系统上的ip是否同样,一律

                                                 进行回应,这样就会导致网关上的VIP的mac不是lvs_server的mac,会产生混乱。

                                取值为1:表示对于进入接口的arp请求包,若请求的目的IP地址和从该网络接口进入的IP地址

                                                 同样时才回应,否则不回应。

                                取值为2:除了满足取值为1的条件,还要arp请求的源IP和该arp进入接口的IP在一个网段!。

                     注意:当real_server自身发送arp请求时。即对网关请求网关mac时。怎样选择自己的源IP地址。这个

                                值会影响网关的VIP与mac表的相应.假设realserver选择VIP作为arp请求的源IP,则当网关接收到

                                这个请求,会将原来VIP与lvs的MAC地址改变为realserver的MAC,而导致lvs架构失败,

                                解决方式: sysctl -w net.ipv4.conf.all.arp_announce=2

                                取值为  0 :表示用回应包的源IP即VIP作为arp请求的源地址,显然是不行的

                                取值为  1:表示不是回应包的源IP,若回应包的源IP和该网络portIP为同一网段。则使用,

                                 否则,使用值为 2的规则

                                取值为  2: 表示不是用回应包的IP,而由系统来决定。









posted on 2016-02-24 09:11  gcczhongduan  阅读(133)  评论(0编辑  收藏  举报