LVS负载均衡集群

Posted on 2020-01-14 18:38  Matt,L  阅读(143)  评论(1编辑  收藏  举报

   群集(或集群)的称呼来自于英文单词“Cluster”,表示一群、一串的意思,用在服务器领域则表示大量服务器的集合体,以区分于单个服务器。

一、LVS群集应用基础

1、群集的类型

   负载均衡群集(LB):以提高应用系统的响应能力,尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载的整体性能,例如“DNS轮询”“应用层交换”“反向代理”等都可用做负载均衡群集。

   高可用群集(HA):以提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用的容错效果。例如“故障切换”“双击热备”“多机热备”等都属于高可用群集技术。HA的工作方式包括双工、主从两种模式----双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从节点能自动切换为节点。

    高性能运算群集(HPC):以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算HPC能力。

2、负载均衡的分层结构
   在典型的负载均衡群集中,包括三个层次的组件。前端至少有一个负载调度器(Director),负责响应并分发来自客户机的访问请求;后端由大量真实服务器(RealServer)构成服务器(Server Poll),提供实际应用服务,整个群集的伸缩性通过增加、删除服务器节点来完成,而这些过程对客户机是透明;为了保持服务的一致性,所有节点使用共享存储设备。
 
   第一层:负载调度器   这是访问整个群集系统的唯一入口,对外使用所有服务器共有VIP地址,也称为群集IP地址。
   第二层:服务器池    群集所提供的应用服务由服务器池承担,其中的每个节点具有独立的RIP(RealIP,真实IP)地址,只处理调度器分发过来的客户机请求。
   第三层:共享存储  为服务器池中的索引节点提供稳定、一致的文件存取服务,确保整个群集的统一性。

3、负载均衡的工作模式
   地址转换:简称NAT模式,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是个节点回应客户机的访问出口。服务器节点使用私有ip地址,与负载调度器位于同一个物理网络,安全性要优与其他两种方式。
   
   调度器:两块网卡(一块用于连接internet,另一块用于连接Real Server)
   Real Server:只需一块网卡  在局域网内  使用私网地址
   在调度器上需要配置SNAT
   

   IP隧道(IP Tunnel):检查TUN模式,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,个节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器。服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。
 
   调度器与RealServer只需一块网卡并都直接连接在internet;
   调度器与RealServer通过隧道进行连接;
   调度器将客户端的请求通过隧道(会增加新的IP头部)转发给RealServer(会将通过隧道时所增加的IP头部去掉)    
   VIP在调度器与RealServer中都存在;但是RealServer不直接接受客户的请求

   直接路由(Direct Routing);简称DR模式,采用半开放式的网络结构,与TUN模式的结构类似,但个节点并不是分散在各地,而是与调度器位于同一个物理网络,负载调度器与个节点服务器通过本地网络连接,不需要建立专用的IP隧道。
   
   调度器与RealServer必须位于同一局域网内并都拥有VIP;
   将RealServer上对于VIP的ARP请求关闭,保证VIP的Arp请求只有调度器可以接收;
   调度器将客户端对于VIP的请求转发给RealServer(三层的原IP地址和目标IP地址不变,二层的mac发生变化);
   由RealServer直接将客户端的请求回应给客户端。
    
    

    以上三种工作模式中,NAT方式只需要一个公网IP地址,从而成为最易用的一种负载均衡模式,安全性也比较好,许多硬件负载均衡设备就是采用这种方式;相比较而言,DR模式和TUN模式的负载能够更加强大,适用范围更广,但节点的安全性要稍差一些。

二、LVS虚拟服务器
    LVS是基于内核的LB群集,默认编译为ip_vs模块,必要时能够自动调用。
[root@localhost ~]# modprobe ip_vs    //加载ip_vs模块
[root@localhost ~]# cat /proc/net/ip_vs        //查看ip_vs版本信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
 

1、LVS的负载调度算法
1)静态调度:
  ①rr(Round Robin):轮询调度,轮叫调度
    轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。【提示:这里是不考虑每台服务器的处理能力】

  ②wrr:weight,加权(以权重之间的比例实现在各主机之间进行调度)
     由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。

  ③sh:source hashing,源地址散列。主要实现会话绑定,能够将此前建立的session信息保留了
源地址散列调度算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的并且没有超负荷,将请求发送到该服务器,否则返回空。它采用的散列函数与目标地址散列调度算法的相同。它的算法流程与目标地址散列调度算法的基本相似,除了将请求的目标IP地址换成请求的源IP地址,所以这里不一个一个叙述。

  ④Dh:Destination hashing:目标地址散列。把同一个IP地址的请求,发送给同一个server。
目标地址散列调度算法也是针对目标IP地址的负载均衡,它是一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。目标地址散列调度算法先根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

2)动态调度
  ①lc(Least-Connection):最少连接
最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1,当连接中止或超时,其连接数减一,在系统实现时,我们也引入当服务器的权值为0时,表示该服务器不可用而不被调度。
简单算法:active*256+inactive(谁的小,挑谁)

  ②wlc(Weighted Least-Connection Scheduling):加权最少连接。
加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权重,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
简单算法:(active*256+inactive)/weight【(活动的连接数+1)/除以权重】(谁的小,挑谁)

  ③sed(Shortest Expected Delay):最短期望延迟基于wlc算法简单算法:(active+1)*256/weight 【(活动的连接数+1)*256/除以权重】

  ④nq(never queue):永不排队(改进的sed)无需队列,如果有台realserver的连接数=0就直接分配过去,不需要在进行sed运算。

  ⑤LBLC(Locality-Based Least Connection):基于局部性的最少连接
基于局部性的最少连接算法是针对请求报文的目标IP地址的负载均衡调度,不签主要用于Cache集群系统,因为Cache集群中客户请求报文的布标IP地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载基本平衡的情况下,将相同的目标IP地址的请求调度到同一个台服务器,来提高个太服务器的访问局部性和主存Cache命中率,从而调整整个集群系统的处理能力。
基于局部性的最少连接调度算法根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。

  ⑥LBLCR(Locali-Based Least Connections withReplication):带复制的基于局部性最少链接带复制的基于局部性最少链接调度算法也是针对目标IP地址的负载均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。



2、使用ipvsadm管理工具

[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# ipvsadm -v
ipvsadm v1.26 2008/5/15 (compiled with popt and IPVS v1.2.1)
[root@localhost ~]#

1)创建虚拟服务器
[root@localhost ~]# ipvsadm -A -t 172.16.16.172:80 -s rr
选项:
-A:表示添加虚拟服务器
-t:用来指定VIP地址及TCP端口
-s:用来指定负载调度算法---轮询rr、加权轮询wrr、最少连接lc、加权最少连接wlc

2)添加服务器节点
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1
说明:
-a 表示添加真实服务器
-t 指定VIP及端口
-r 指定RIP及端口
-m 使用NAT群集模式,
-g DR模式
-i TUN模式
-w 设置权重(权重为0表示暂停节点)
-p 60 保持连接时间为60秒

3)查看群集节点状态
[root@localhost ~]# ipvsadm -L -n   //查看节点状态
说明:
-L:列出查看LVS的虚拟服务器
-n:以数字形式显示地址、端口等信息

输出结果中:
Forward列下的Masq对应Masquerade(地址伪装),表示采用NAT模式;如果是Route,表示为DR。
            

[root@localhost ~]# ipvsadm -Lnc  //查看负载连接情况

4)删除服务器节点
[root@localhost ~]#ipvsadm -d -r 192.168.7.24:80 -t 172.16.16.172:80

[root@localhost ~]#ipvsadm -D -t 172.16.16.172:80  //删除整个虚拟服务器

5)保存负载分配策略
  使用导出/导入工具ipvsadm-save/ipvsadm-restore可以保存、恢复LVS策略。

[root@localhost ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm  //保存策略
[root@localhost ~]# cat /etc/sysconfig/ipvsadm  //确认保存结果

[root@localhost ~]# service ipvsadm stop   //停止服务(清楚策略)
[root@localhost ~]# service ipvsadm start  //启动服务(重建规则)

三、NFS共享存储服务

  NFS是一种基于TCP/IP传输的网络问卷系统协议。

1、使用NFS发布共享资源
1)NFS服务的实现依赖于RPC机制,以完成远程到本地的映射过程。需要安装nfs-utils、rpcbind软件包来提供NFS共享服务,前者用于NFS共享发布和访问,后者用于RPC支持
[root@localhost ~]# yum -y install nfs-utils rpcbind
[root@localhost ~]# chkconfig nfs on
[root@localhost ~]# chkconfig rpcbind on

2)设置共享目录
[root@localhost ~]# mkdir -p /opt/wwwroot
[root@localhost ~]# vim /etc/exports
/opt/wwwroot    192.168.0.0/24(rw,sync,no_root_squash)

  客户机地址可以是主机名、IP地址、网段地址,允许使用*、?通配符;权限选项中的rw表示读写(ro为只读)、sync表示同步写入,no_root_squash表示客户机以root身份访问时赋予本地root权限(默认是root_squash,将作为nfsnobody用户权限对待)

3)启动NFS服务程序
[root@localhost ~]# service rpcbind restart
[root@localhost ~]# service nfs restart
[root@localhost ~]# netstat -anpt |grep rpcbind
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      1357/rpcbind        
tcp        0      0 :::111                      :::*                        LISTEN      1357/rpcbind        

4)查看本机发布的NFS共享目录
[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/opt/wwwroot 192.168.0.0/24

2、客户机上访问共享资源
1)安装rpcbind软件包,并启动rpcbind服务
[root@localhost ~]# yum -y install rpcbind nfs-utils
[root@localhost ~]# chkconfig rpcbind on
[root@localhost ~]# service rpcbind start

[root@localhost ~]# showmount -e 192.168.0.10   //查看NFS服务器上共享了哪些目录
Export list for 192.168.0.10:
/opt/wwwroot 192.168.0.0/24

2)手动挂载NFS共享目录
[root@localhost ~]# mount 192.168.0.10:/opt/wwwroot /var/www/html/
[root@localhost ~]# tail -1 /etc/mtab
192.168.0.10:/opt/wwwroot /var/www/html nfs rw,vers=4,addr=192.168.0.10,clientaddr=192.168.0.11 0 0

  挂载后,客户端访问/var/www/html文件夹,实际就相当于访问NFS服务器中的/opt/wwwroot文件夹。

3)fstab自动挂载设置
[root@localhost ~]# vim /etc/fstab
192.168.0.10:/opt/wwwroot       /var/www/html   nfs     defaults,_netdev        0 0
[root@localhost ~]# mount -a
[root@localhost ~]# tail -1 /etc/mtab
192.168.0.10:/opt/wwwroot /var/www/html nfs rw,vers=4,addr=192.168.0.10,clientaddr=192.168.0.12 0 0
[root@localhost ~]# cat /var/www/html/index.html
welcome to beijing


四、构建LVS负载均衡群集
1、LVS-NAT模式
1)准备环境
  调度器上准备两块网卡。eth0:192.168.0.10;eth1:172.16.16.172/24
  RealServer;192.168.0.11  192.168.0.12,网关为192.168.0.10

2)配置负载调度器
(1) 配置SNAT规则
[root@localhost ~]# vim /etc/sysctl.conf
 net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p

[root@localhost ~]# service iptables start
iptables:应用防火墙规则:[确定]
[root@localhost ~]# iptables -F

[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source 172.16.16.172
 

(2)配负载分配策略
[root@localhost ~]# service ipvsadm stop
[root@localhost ~]# ipvsadm -A -t 172.16.16.172:80 -s rr
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.0.11:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.0.12:80 -m -w 1
[root@localhost ~]# service ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [确定]
[root@localhost ~]# chkconfig ipvsadm on
[root@localhost ~]#

3)、配置节点服务器
(1)安装httpd,创建测试网页
(2)启动httpd服务器程序
[root@localhost ~]# service httpd start

[root@localhost ~]# chkconfig httpd on

4)、测试LVS群集

访问http://172.16.16.172

[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.16.172:80 rr
  -> 192.168.0.11:80              Masq    1      0          20        
  -> 192.168.0.12:80              Masq    1      0          21
 


2、LVS-DR模式
1) 准备案例环境
   在DR模式的群集中,LVS负载调度器作为群集的访问入口,但不作为网关使用;服务器池中的所有节点都各自接入Internet,发送给客户机的Web响应数据包不需要经过lVS负载调度器。
 
   VIP:192.168.0.200
   调度器:eth0:192.168.0.10
   RealServer1:192.168.0.11    RealServer2:192.168.0.12

2) 配置负载调度器
(1) 配置虚拟IP地址VIP
    采用虚拟接口的方式(eth0:0),为网卡eth0绑定VIP地址,以便响应群集访问。
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0
[root@localhost network-scripts]# vim ifcfg-eth0:0
DEVICE=eth0:0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.200
NETMASK=255.255.255.255

[root@localhost network-scripts]# ifup eth0:0
[root@localhost network-scripts]# ip add list

(2) 调整/proc响应参数
  由于DR群集模式来说,由于LVS负载调度器和各节点需要共用VIP地址,为了避免网络内的ARP解析出现异常,应该关闭Linux内核的重定向参数响应。
  cat << EOF  >> /etc/sysctl.conf
  net.ipv4.conf.all.send_redirects = 0
  net.ipv4.conf.default.send_redirects = 0
  net.ipv4.conf.eth0.send_redirects = 0

[root@localhost ~]# sysctl -p
[root@localhost ~]# echo 0 > /proc/sys/net/ipv4/ip_forward  //关闭路由转发

(3) 配置负载分配策略
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# service ipvsadm stop
ipvsadm: Clearing the current IPVS table: [确定]
ipvsadm: Unloading modules: [确定]
[root@localhost ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.11 -g -w 1
[root@localhost ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.12 -g -w 1
[root@localhost ~]# service ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [确定]
[root@localhost ~]# chkconfig ipvsadm on


3)配置节点服务器
  使用DR模式时,节点服务器也需要配置VIP地址,并调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免发生冲突。
(1) 配置VIP
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.0.200
NETMASK=255.255.255.255
ONBOOT=yes
[root@localhost network-scripts]# ifup lo:0
[root@localhost network-scripts]# ifconfig lo:0
lo:0      Link encap:Local Loopback  
          inet addr:192.168.0.200  Mask:255.255.255.255
          UP LOOPBACK RUNNING  MTU:16436  Metric:1

[root@localhost network-scripts]#
   使用虚接口lo:0来承载VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地以避免通信紊乱

[root@localhost ~]# route add -host 192.168.0.200 dev lo:0
[root@localhost ~]# which route
/sbin/route
[root@localhost ~]# echo "/sbin/route add -host 192.168.0.200 dev lo:0" >> /etc/rc.local
[root@localhost ~]#

(2)调整/proc响应参数
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
echo "1" > /proc/sys/net/ipv4/conf/default/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/default/arp_announce

(3)安装httpd,创建测试网页
yum  -y install httpd
mount 192.168.0.10:/opt/wwwroot /var/www/html
echo "hello LVS DR" > /var/www/html/index.html

(4) 启用httpd服务程序。
service httpd start
chkconfig httpd on


4)测试LVS群集
[root@localhost ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.0.200:80 rr
  -> 192.168.0.11:80              Route   1      1          79        
  -> 192.168.0.12:80              Route   1      1          85        
[root@localhost ~]#