LinuxService- LVS实现负载均衡集群

1 集群介绍

1.1 集群概念

集群(Cluster):是指由一批具备相同或类似功能的物品组成的,提供更大、更强、更稳定功能的这样一种组合。集群通常可以定义为两台或两台以上相互独立的计算机,对外表现为一个整体系统。

节点(Node):简单叙述即集群就是一组计算机在一起合作为用户提供一组网络资源,而集群组中的单一的计算机就被称为“节点(node)”。硬件的型号及系列一般要一致。集群中的两个节点之间一般有2条心跳线连接,用于相互监控彼此的健康状态。

集群必备服务:NTP(时间必须得同步),日志集中管理服务(RSYSLOG),DNS服务,共享存储(ISCSI)

1.2 集群分类

1)高可用集群(high available cluster,简写为HA):就是一个机子宕机了,立马能有其他机子顶上。

计算机系统的可用性(availability) 是通过系统的可靠性(reliability) 和可维护性(maintainability) 来度量的。工程中通常用平均无故障时间(MTTF) 来度量系统的可靠性,而平均维修时间(MTTR) 来度量系统的可维护性。可用性=维修时间/总时间*100% 。

HA 集群的主要目的是为了用户提供不间断的服务。当使用了HA 集群时如果由其中一个node出现了问题,自动会有集群中其他节点接替问题节点对外提供服务。在Linux 系统中实现HA 集群可使用Heartbeat 、keepalived(会讲)、Haproxy

2)高性能集群(high performance cluster,简写为HPC):把计算的东西分配到各个CPU进行运算,再把计算结果整合得出最终的结果

实现高性能集群主要目的是将多台计算机的计算能力合并到一起从而实现一个超越单台计算机计算能力的强力系统。在Linux 平台中实现高性能集群的软件是Beowulf 及MPI(会讲)

3)负载均衡集群(Load Balancing Cluster):减少单个机子的负载

一般地,大家使用的是基于软件(如LVS)的负载均衡集群,当其不够用时就得使用基于硬件的负载均衡器(如F5)

负载均衡(LB):LB 与HA 或高性能有些类似也有一定的区别。负载均衡不仅仅考虑的内容与高可用一样,同时也需要为用户提供不间断的服务。但LB还要保证服务的质量。

LB 在收取到一个客户的响应时会通过某种方法查看集群中的node 能否为用户提供符合质量要求的服务。如果不可以则LB 将把这个请求转发给另一个可以满足质量要求的node 。这样可以降低某个服务node 出现大量资源被占用的情况

在Linux 中要实现LB 集群可采用LVS 、MOSIX等软件

2 负载均衡集群

2.1 概念

1)LVS(Linux Virtual Server),该软件的功能是实现负载均衡LB(load balance)的,又称为负载均衡调度器,是虚拟服务器,里面有分配任务的算法。

2)LVS的三种工作模式

NAT模式(NAT),只能代理一个网段

LVS 服务器同时充当一台NAT 网关,拥有公有IP ,同时负责将针对此公共IP 的请求依据算法将请求转发给LAN中的某台真实服务器(node) ,node 处理完成请求后将结果返回至LVS  Server, 在由LVS  Server 将结果返回给用户。可以将内部网络隐藏。

NAT 方式适用于在同一个LAN中实现小型LB。

IP隧道模式(TUN),可以代理多个网段

可以实现让集群中的节点处于不同网络段,TUN 方式适用于node部分在Internet上

直连路由模式(DR)

当参与集群的计算机和作为控制管理的计算机在同一个网段时可以使用此种方法。控制管理的计算机接收到请求包时直接送到参与集群的node上。当node 处理完请求后将直接把结果返还至用户而不通过LVS  Server 返还。DR的优势在于速度快、开销少。

DR 方式使用与在同一个LAN中实现较为大型LB。

3)LVS的调度算法

算法:将客户端的请求按照不同的算法转发给web服务器

算法的种类:

      rr轮询 : rr 算法就是将外部请求顺序轮流分配到集群中的node 上,但不考虑每台node 的负载情况。

      wrr加权轮询 : wrr 算法在rr 算法的基础上会考察每台node的负载情况,并尝试让负较轻的node 承担更多请求。

      lc最少连接算法:可以让LVS 尝试把新的请求交给当前连接数最少的node ,直到此node 连接数不再属于最少标准

      wlc加权最少连接: wlc 算法也由权重的干预。LVS 会根据每台node的权重并综合连接数控制转发行为

      lblc局部最少连接算法: 会加上针对源请求IP地址的路由估算,并尝试把请求发送到与源请求IP路由最近的node 上。此种方法一般用于远程或者是大规模的集群组

      lblcr带有复制的局部最少连接算法: lblcr 算法是在lblc 算法的基础上增加了一个node 列表,先依据lblc 算法计算出与源请求IP地址最近的一组node ,然后在决定把请求发送到最近一组中的最近的一台node 。若此node没有超载则将请求转发给这台node, 如果超载则依据”最少连接”原则找到最少连接的node 并将此node 加入集群组中。并将请求转给此node

      dh目标地址散列算法:相当于随机

      sh原地址散列算法:相当于随机

4) ipvsadm语法规则:

ipvsadm  -C              //清空kernel中的lvs列表,即清空虚拟主机及转发记录

ipvsadm   -A   -t   虚拟主机IP:80   -s   算法            //声明一个虚拟主机

ipvsadm    -a   -t   虚拟主机IP:80   -r   接受连接的真实服务器IP:80   lvs的模式   -w   权重值

注:三种模式—— -i    TUN模式,  -g   DR模式,  -m   NAT模式

3  NAT方式实现LVS集群

LinuxService- LVS实现负载均衡集群_第1张图片

1)一般将lvs-server称为前端调度器(director server),将node称为真实服务器(real-server),搭建环境:

      工作原理:client 发数据包给lvs,3层封装的是client_ip与lvs_ip,当lvs收到数据包后解封发现是传给自己的,然后根据客户端请求,重新封装数据包,3层是lvs_ip与node_ip,从而节点接收到数据包并作出反馈后,会将反馈返回给lvs。这样当客户端请求有很多时,lvs的负载会很大。

2)在server1与server2 上安装Apache服务  #yum  install   httpd   -y

#echo  “web1-test”   >   /var/www/html/index.html                  //server1

#echo  “web2-test”   >   /var/www/html/index.html                 //server2上

#chmod   705   index.html

#systemctl    restart   httpd

3)在lvs-server上配置lvs的nat模式集群

    #yum   install   -y    iptables-services   ipvsadm.*

#vim   lvs-nat.sh   内容如下:

#!/bin/bash

    echo  1   >   /proc/sys/net/ipv4/ip_forward

iptables   -F

iptables   -X

iptables   -Z

iptables  -t  nat  -A  POSTROUTING  -s  192.168.1.0/24  -j  MASQUERADE

//-A是attached,-s指定源地址,-j 指定动作

ipvsadm   -C

ipvsadm   -A   -t   172.16.0.1:80   -s   wrr

//-s指定算法,本行是增添虚拟服务器地址

ipvsadm   -a   -t   172.16.0.1:80   -r   192.168.1.2:80  -m  -w  2

ipvsadm   -a   -t   172.16.0.1:80   -r  192.168.1.3:80   -m  -w  3

//增加真实节点信息

注:权重设置一般为正整数,数值越大越会被多分配到请求,0为不可用。

保存退出脚本,然后运行脚本  #bash   lvs-nat.sh

4)在客户端测试  #elinks   http://172.16.0.1。测试结果,可见两台web服务器上的网页交替出现

注:可用ipvsadm命令查看:ActiveConn为目前正在活动的连接数。InActConn为目前不活动的连接数。如果流量过大,将会对VS性能造成严重影响。

LVS集群实现TUN方式

1)TUN指IP  Tunneling,其转发流程为LVS设备接收到外界请求,依据算法将其通过IP隧道转发到相应的node,node处理完成后,将结果直接返还给客户。实验环境:

LinuxService- LVS实现负载均衡集群_第2张图片

      工作原理:client发送数据包请求给lvs,lvs收到数据包之后不解封3层封装,直接在ip报文外再封装另外一个ip报文,然后通过lvs与节点的ip隧道传给某节点,节点接收到数据包后就能知道client地址进而直接将客户端请求的结果返回给客户端,这就缓解了lvs的负载压力。意味着,client的ip是外网ip也是可以的,且要求各个节点能够与client通信

2)在lvs-server上安装软件  #yum  install  ipvsamd   iptables-services  -y

在server1,server2上安装apache服务  #yum   isntall   httpd   -y

echo  "web1-test"  >   index.html

echo  "web2-test"  >   index.html

chmod  705  index.html

#systemctl   restart   httpd

3)在lvs-server上编辑lvs的tun的集群配置(在lvs上开隧道)

#vim   lvs-tun.sh,内容如下:

#!/bin/bash

VIP=192.168.0.254           //VIP与RIP一定要在同一子网

RIP1=192.168.0.2

RIP2=192.168.0.3            //声明变量

/sbin/ipvsadm   -C

/sbin/ifconfig  eno16777736:0  $VIP  broadcast  $VIP  netmask  255.255.255.255  up

/sbin/route  add  -host  $VIP  dev  eno16777736:0

/sbin/ipvsadm  -A   -t   $VIP:80  -s  wlc

/sbin/ipvsadm  -a   -t    $VIP:80   -r   $RIP1:80   -i   -w   1

/sbin/ipvsadm  -a   -t   $VIP:80   -r   $RIP2:80   -i   -w   1

编辑完脚本后运行:  #bash   lvs-tun.sh

4)在server1和server2上编辑web.sh脚本,#vim  web.sh,内容如下:

#!/bin/bash

VIP=192.168.0.254

/sbin/ifconfig  tunl0  down

/sbin/ifconfig  tunl0  up

echo  1  >  /proc/sys/net/ipv4/conf/tunl0/arp_ignore

echo  2  >  /proc/sys/net/ipv4/conf/tunl0/arp_announce

echo  0  >  /proc/sys/net/ipv4/conf/tunl0/rp_filter

echo  1  >  /proc/sys/net/ipv4/conf/all/arp_ignore

echo  2  >  /proc/sys/net/ipv4/conf/all/arp_announce

/sbin/ifconfig  tunl0  $VIP  broadcast  $VIP  netmask  255.255.255.255  up

/sbin/route  add  -host  $VIP  dev  tunl0

编辑完脚本后运行:   #bash   web.sh

5)在客户端测试  #elinks http://192.168.0.254  。测试结果可见两台web服务器上的网页交替出现

5  LVS集群实现DR方式

1)dr 指Direct Routing,其转发流程为Director(LVS) 设备收到请求,依据指定算法发送到相应的真实Node 上, Node 处理完成后直接将结果返还给客户端。实验环境:

LinuxService- LVS实现负载均衡集群_第3张图片

2)在lvs-server上安装软件  #yum   install   ipvsadm   -y

在server1,server2上安装apache服务器  #yum   install  httpd  -y

echo  "web1-test"   >   index.html

echo  "web2-test"   >   index.html

chmod   705   index.html

systemctl   restart   httpd

3)在lvs-server上编辑lvs的DR的集群配置  #vim  lvs-dr.sh

#!/bin/bash

VIP=192.168.0.254

RIP1=192.168.0.3

RIP2=192.168.0.4

ipvsadm -C

ifconfig  eno16777736:0  $VIP  broadcast  $VIP  netmask  255.255.255.255  up

route  add  -host  $VIP  dev   eno16777736

ipvsadm   -A   -t   $VIP:80   -s   wlc

ipvsadm   -a   -t   $VIP:80   -r   $RIP1:80   -g   -w   1

ipvsadm   -a   -t   $VIP:80   -r   $RIP2:80   -g   -w   1

编辑完成脚本后运行  #bash   lvs-dr.sh

4)在server1、server2上编辑脚本web.sh

#!/bin/bash

VIP=192.168.0.254

ifconfig   lo:0   $VIP   netmask   255.255.255.255   broadcast   $VIP

route  add   -host   $VIP   dev   lo:0

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

编辑完成脚本后运行   #bash   web.sh

5)在客户端测试  #elinks   http://192.168.0.254  。测试结果,可见两台web服务器上的网页交替出现


转载请注明出处,谢谢!

你可能感兴趣的:(Linux应用)