LVS实现负载均衡及keepalive实现高可用

一.集群(cluster)以及类型;

       当后端服务器承受不住访问的压力,提高服务器性能的解决方案会极大增加成本时,人们提出了横向扩展的解决方案。增加一台或几台服务器,提供相同的服务,通过前段分发器将访问量均匀的分配到后台服务器上。这种多台服务器组成的数组集合就叫做集群。

集群类型:

LB(load balancing):负载均衡集群,扩展容量,实现伸缩性;开源方案:lvs,haproxy,nginx,ats

HA(HighAvailability)高可用,服务可用性集群;

开源方案:heartbeat,corosync+pacemaker,cman+pacemaker,cman+rgmanger,keepalived,u1tramonkey

HP(high  performace):高性能,并发处理集群;开源方案:hadoop

二. 解决负载均衡集群方案

1.硬件配置

1.软件:lvs (linux virtual server)相当于组件,由两部分组成,ipvs工作在内核当中,相当于netfilter,iptables而LVS正好工作在iptables的input链上,ipvs框架需要依赖规则完成转发,ipvsadm外部命令编写规则交予ipvs进行处理。

三.lvs简单说明

lvs集群使用三层架构:

第一层负载均衡层:由一台或者多台负载均衡器组成,将用户请求分发给服务器群组层的服务器;

第二层服务器群组层:由一组实际运行的应用服务组成

第三层共享存储层:为服务提供共享存储空间和内容一致性的存储区域,一般由磁盘阵列组成。

四.lvs负载均衡的四种工作模型

NAT模式:

1.当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP

2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链

3.IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP

4. POSTROUTING链通过选路,将数据包发送给Real Server

5. Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP

6.Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目IP为CIP

特点:

1.RS的应该使用私有地址

2.RS的网关必须指向DIP

3.RIP和DIP必须在同一网段内

4.请求和响应的报文都得经过Director,在高负载场景中,Director很可能成为性能凭借

5.支持端口映射

6.RS可以使用任意支持集群服务的OS


DR模式:

1.首先,客户端CIP的请求发送给LVS调度器的VIP;

2.LVS调度器收到客户端的请求包后,将数据包的MAC地址改成LVS调度器选择的某一台RSMAC地址,并通过交换机发送给RS服务器;

3.RS收到发送来的数据报文请求后,会从链路层往上传给IP层,此时IP层需要验证请求的目标IP地址。因为包的目标IP(即VIP)并不是RS的本地IP,而仅仅MAC地址是RS的。所以,在RS上需要配置一个VIPloopbackdevice,是因为loopback device是服务器本地使用的网络接口,对外是不可见的,不会跟LVSip冲突。

4.RS处理数据包完成后,将应答直接返回给客户端。回复数据报不在经过调度器。因此,如果对外提供LVS负载均衡服务,则RS需要连上互联网才能将应答包返回给客户端。不过,RS最好为带公网IP的服务器,这样可以不经过网关直接回应客户,如果多个RS使用了同一网关出口,网关会成为LVS架构的瓶颈,会大大降低LVS的性能。

特点:

1.RS可以使用私有地址,还可以使用公网地址,此时可以直接通过互联网连入RS,以实现配置、监控等

2.RS的网关一定不能指向DIP

3.RS跟Dirctory要在同一物理网络内(不能有路由器分隔)

4.请求报文经过Directory,但响应报文一定不经过Director

5.不支持端口映射

6.RS可以使用大多数的操作系统

TUN模式:

客户端访问服务器,数据包的源地址cip,目标地址vip,发送给调度器。调度器创建虚拟的网络通道,在数据包上面在封装一层

而称为新的数据包,不改动之前地址,封装过后数据包源地址dip,目标地址rip,直接发送到后端服务器。后端服务器接受数据

包,目标地址符合,开始构建响应报文将响应数据通过虚拟通道直接返回给客户端;

特点:

(1)RIP,DIP可以使用私有地址;

   

(2)RIP和DIP可以不再同一个网络中,且RIP的网关未必需要指向DIP;

        

(3)支持端口映射;

        

(4)RS的OS可以使用任意类型;

        

(5)请求报文经由Director,响应报文也经由Director;


fullant模型:

        客户端到集群的响应报文源地址cip,目标地址vip,经过调度器将请求报文地址转变,源地址dip,目标地址rip,请求报文送达后

端服务器构建响应报文,响应报文送达调度器前源地址rrip,目标地址dip,调度器接受报文后将地址转化源地址vip,目标地址cip,将

送达数据到达客户端。在期间数据包地址经过两次转化。

特点:

1.RIP,DIP,VIP都得是公网地址

2.RS的网关不会指向也不可能指向DIP

3.请求报文经过Directory,但响应报文一定不经过Director

4.不支持端口映射

5.RS的OS必须得支持隧道功能模式:


四. lvs的集群服务:

ipvsadm  用户界面的工作命令

-A  #添加一个集群服务

      -t : tcp协议

     -u : udp

     -f: firewall make 通常应用于将两个或以上的服务绑定为一个服务进行处理时使用

      service-address    #服务器添加地址

           -t     ip:port

           -u   ip:port

   -s  调度算法,默认为w1c

LVS的调度方法:10种

  静态方法:仅根据算法本身进行调度

   rr:Round Robin 轮询

     wrr:Weighted RR 权重轮询

     sh:source hashing 源地址hash

     dh:destination hashing 目标地址hash

  动态方法:根据算法及RS当前的复制状态

  lc:Least Connection 最少连接

  计算当前的负载Overhead=Active*256+Inactive来实现

  wlc:Weighted LC

  Overhead=(Active*256+Inactive)/weigh

  sed:Shortest Expect Delay  最短期望延迟

Overhead=(Active+1)*256/weight 

    aq:Nerver Queus: 永不排队

     lblc:Locality-based least connection 基于本地的最少连接相当于dh+lc

     Lblcr:基于复制的基于本地的最少连接 Replicated and Locality-based least connection

 -p : timeout persistent connection  持久链接

-E   修改定义过的集群服务

-D -t|u|f   service-address   删除指定的集群服务

RS相关:

-a:向指定的CS中添加RS

-t|-u|-f service-address:指明将RS添加至那个Cluster Service 中

   -r:指定RS,可以包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口

   lvs类型:

    -g:Gateway,DR

    -i:ipip,TUN

    -m:masquerade(地址伪装),NAT

    默认为DR

  指定RS权限 -w

  上限下限: -x:下限     -y:上限

-e:修改指定的RS属性

-d  -t|u|f  service-address  -r  server-address:在指定的集群服务中删除一个指定的RS

情况所有的集群服务:-C


保存规则(使用输出重定向):

ipvsadm-save

ipvaadm -S

载入指定的规则:(使用输入重定向)

ipvsadmin-restore

ipvasdm -R

查看ipvs规则等

  -L [options]

  -n 使用数字格式显示IP地址,不反解

  -c:查看连接数相关信息

  --stats:显示统计数据

  --rate:数据传输速率

  --timeout:显示tcp会话时长

  --daemon:守护进程的信息

  --sort:对虚拟服务进行排序,默认为升序

  --exact:精确显示,不做单位换算

-Z:计数器清零

五.LVS的DR模式实现负载均衡

实验环境;redhat6.5系统,调度器ip192.168.88.152  后端服务器192.168.88.153和192.168.88.154

调度器配置:

1.配置6.5系统yum源需要配置,否则ipvsadm不能进行安装

LVS实现负载均衡及keepalive实现高可用

2.安装ipvsamd 

LVS实现负载均衡及keepalive实现高可用

3.调度器添加虚拟ip192.168.88.200/24

LVS实现负载均衡及keepalive实现高可用

4.定义集群,给集群设置轮询节点;

LVS实现负载均衡及keepalive实现高可用

LVS实现负载均衡及keepalive实现高可用

5.保存策略,重新启动ipvsadm 服务

LVS实现负载均衡及keepalive实现高可用

后端服务器配置;

1. 192.168.88.153配置如下:

添加虚拟ip192.168.88.200/24

LVS实现负载均衡及keepalive实现高可用

安装http服务,编辑默认网页

LVS实现负载均衡及keepalive实现高可用

2.后端服务器192.168.88.154配置如下;

LVS实现负载均衡及keepalive实现高可用

LVS实现负载均衡及keepalive实现高可用

客户端测试结果:起初一直出现server3服务器,然后一致刷新等过了一段时间变成server2服务器,然后再长时间不变化;

LVS实现负载均衡及keepalive实现高可用

LVS实现负载均衡及keepalive实现高可用

问题原因是arp -an |  grep 100   绑定的虚拟ip和server不在一起

后端服务器添加arptables策略

调度器配置不变化;

1.后端服务器server2添加arptables策略,安装arptables,添加调度器识别规则

LVS实现负载均衡及keepalive实现高可用

LVS实现负载均衡及keepalive实现高可用

2.后端服务器配置如上,安装arptables,添加调度器识别规则

LVS实现负载均衡及keepalive实现高可用

LVS实现负载均衡及keepalive实现高可用

以上调度器只能进行轮询,不能检测后端服务器的状况,需要安装Idirectord,自动创建集群添加节点,目的检查后端服务器健康

调度服务器配置:

1.安装ldirectord-3.95-3.1.x86_64.rpm软件

LVS实现负载均衡及keepalive实现高可用

2.修改配置文件

LVS实现负载均衡及keepalive实现高可用

LVS实现负载均衡及keepalive实现高可用

3.清空ipvsadm 策略,启动ldirectord服务

LVS实现负载均衡及keepalive实现高可用

4.后端服务器关闭http服务,调度器配置

LVS实现负载均衡及keepalive实现高可用

物理主机访问:

LVS实现负载均衡及keepalive实现高可用

六.LVS的NAT模式实现负载均衡

1.server1调度器主机配置

导入modprobe iptble-nat 模块

调度器添加虚拟ip和物理机ip在同一vlan

添加策略

打开调度器的路由转化功能,设定调度器的网关为添加的虚拟ip;

2, 后端服务器server2和server3配置

将调度器的虚拟ip设定为网关

3.test虚拟机测试,test虚拟机的ip和调度器虚拟ip在同一vlan,启动http服务;

七.LVS的TUN模型实现负载均衡

调度器setver1配置:

1.调度器server1导入modprobe ipip 模块,添加tunl0的隧道

LVS实现负载均衡及keepalive实现高可用

2.添加虚拟ip,**tunl0隧道,设定ipvsadm 规则

LVS实现负载均衡及keepalive实现高可用

LVS实现负载均衡及keepalive实现高可用

3.路由添加虚拟ip

LVS实现负载均衡及keepalive实现高可用

后端服务器server2和server3配置:

1.导入模块,添加vip到tunl0隧道,**tunl0隧道,

LVS实现负载均衡及keepalive实现高可用

2.路由添加vip.关闭tunl0.rp_filter

LVS实现负载均衡及keepalive实现高可用  #tunl0关闭rp_filter功能

LVS实现负载均衡及keepalive实现高可用

3.设定arptables策略;

LVS实现负载均衡及keepalive实现高可用

test虚拟机测试:curl 192.168.88.200

LVS实现负载均衡及keepalive实现高可用

八. 使用keepalive实现高可用集群

1.server1主机停止ldirectord服务

LVS实现负载均衡及keepalive实现高可用

2.server1 调度器安装keepalived 

LVS实现负载均衡及keepalive实现高可用

在解压目录下·进行编译

LVS实现负载均衡及keepalive实现高可用

出现如下报错是缺少libnl和libnl-devel,安装这两个软件包,再次进行编译;

LVS实现负载均衡及keepalive实现高可用

出现如下报错缺少libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm,http://rpm.pbone.net/index.php3下载安装包,再次进行编译安装ok;

LVS实现负载均衡及keepalive实现高可用

LVS实现负载均衡及keepalive实现高可用

制作启动软连接

LVS实现负载均衡及keepalive实现高可用

配置目录增加执行权限

LVS实现负载均衡及keepalive实现高可用

安装mailx.程序动态以邮件的方式显示,在/var/log/messages

yum  install  -y  mailx

3.配置keepalived服务

! Configuration File for keepalived

global_defs {

   notification_email {

      [email protected]    #keepalive发生切换时将发送邮箱通知 

   }

   notification_email_from [email protected]   #指定发件人

   smtp_server 127.0.0.1   #smtp服务地址

   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    #指定服务器为主设备,backup为辅助设备

    interface eth1   

    virtual_router_id 51

    priority 100   #指定优先级,1-254数字越大优先级越高;

    advert_int 1

    authentication {

 auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.88.200   #设置vip

    }

virtual_server 192.168.88.200 80 {   

    delay_loop 3   #健康检查时间间隔

    lb_algo rr     #lvs的调度算法

    lb_kind DR    #lvs的DR模式

#    persistence_timeout 50   #保持会话时间

    protocol TCP     #使用tcp协议

 

    real_server 192.168.88.153 80 {   #设置后端服务设备

        weight 1     #权重默认为1,0为失效

        TCP_CHECK  {

            connect_timeout 3   #链接时间

            retry 3    #重连次数

            delay_before_retry 3  #重新链接间隔时间

        }

}

   real_server 192.168.88.154 80 {   

        weight 1     

        TCP_CHECK  {

            connect_timeout 3

            retry 3

            delay_before_retry 3

        }

   }

}

将server1主机安装好的文件发送给server4主机

LVS实现负载均衡及keepalive实现高可用

LVS实现负载均衡及keepalive实现高可用

修改server4主机的配置文件

! Configuration File for keepalived

global_defs {

   notification_email {

      [email protected]    #keepalive发生切换时将发送邮箱通知 

   }

   notification_email_from [email protected]   #指定发件人

   smtp_server 127.0.0.1   #smtp服务地址

   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    #指定服务器为主设备,backup为辅助设备

    interface eth1   

    virtual_router_id 51

    priority 50   #指定优先级,1-254数字越大优先级越高;

    advert_int 1

    authentication {

 auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.88.200   #设置vip

    }

virtual_server 192.168.88.200 80 {   

    delay_loop 3   #健康检查时间间隔

    lb_algo rr     #lvs的调度算法

    lb_kind DR    #lvs的DR模式

#    persistence_timeout 50   #保持会话时间

    protocol TCP     #使用tcp协议

 

    real_server 192.168.88.153 80 {   #设置后端服务设备

        weight 1     #权重默认为1,0为失效

        TCP_CHECK  {

            connect_timeout 3   #链接时间

            retry 3    #重连次数

            delay_before_retry 3  #重新链接间隔时间

        }

}

   real_server 192.168.88.154 80 {   

        weight 1     

        TCP_CHECK  {

            connect_timeout 3

            retry 3

            delay_before_retry 3

        }

   }

}

4.server2和server3后端服务器配置相同

设置虚拟ip

LVS实现负载均衡及keepalive实现高可用

添加arptables规则;

LVS实现负载均衡及keepalive实现高可用

设置http默认网页

LVS实现负载均衡及keepalive实现高可用

客户端测试:

LVS实现负载均衡及keepalive实现高可用

server1做主机显示server1的网卡mac地址

5.实现高可用和健康体检;

配置还有点小问题我在检查检查