使用LVS搭建集群实现负载均衡

集群的概念

集群就是一组各自相互独立且又相互依赖的通过高速网络互联的计算机组成的一个计算机组,以单一的系统模式加以管理为用户提供服务,在一个集群里面一台计算机就是集群的一个节点,集群有三个特性:可靠性、可伸缩性和可管理性。比如一台服务器能响应10000个并发,随着业务量的增大用户增多现在有200000个并发,那这台服务器很明显已经达到瓶颈,解决这个问题一般有两个办法:第一个就是升级CPU、内存、带宽、加SSD,这种办法称为向上扩展(scale up),另外一个办法是增加服务器,使用多台服务器同时为用户提供服务,这种办法称之为向外扩展(scale out),也就是集群。
集群的类型又分为下三种:

  • 负载均衡集群(Load Baloance Cluster),简称LB集群
  • 高可用集群(High Availability Cluster),简称HA集群
  • 高性能计算(High Performance Cluster),简称HPC集群

实现LB集群通常有种手段:在硬件方面代表的厂家有F5、Citrix、A10等;软件方面有LVS、nginx、haproxy、ats(apache traffic server)、perlbal、pound等

lvs集群

LVS(Linux Virtual Server)即linux虚拟服务器,是一个虚拟的服务器系统,它是由我国的张文嵩博士成立的自由软件项目,根据iptables的实现来开发。lvs的工作模式如下图:
在这里插入图片描述
LVS相当于负载调度器,它位于整个集群对面最前端的服务器,负责接收用户请求并根据自己的调度算法将请求转发到后端真正为用户提供服务的服务器,而客户认为服务是来自一个IP地址;共享存储则为RS保持用户访问的数据的相同内容,提供数据的一致性,包括session的问题。

lvs模式及工作原理

lvs集群四种类型:
lvs-nat:修改请求报文的目标IP;多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为经过自身算法后到达的RS的RIP和端口实现转发;
在这里插入图片描述
注意事项

  1. RIP和DIP必须在同一个IP网络(段),且应该使用私网地址,RS的网关应指向DIP。
  2. 请求报文和响应报文都必须经过Director转发。(也造成了瓶颈)
  3. lvs必须是linux系统,RS则可以是任意操作系统

lvs-dr:直接路由。基于数据链路层的转发,在lvs所有的模式中效率最好。
通过封装新的MAC头部再实现网络转发。

确保前端路由器将目标IP为VIP请求报文发往Director有以下三种方法:

  1. 在前端网关做静态绑定
  2. 在RS上使用arptables
  3. 在RS上修改内核参数以限制ARP通告及应答级别:
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
 
0:默认值,把本机上的所有接口的所有信息向每个接口上的网络进行通告
1:尽量避免向非直连网络进行通告
2:必须避免向非本地网络通告
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
0:默认值,可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文接口上时才响应。
2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。
3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
4~7:保留未使用
8:不回应所有的arp请求

sysctl.conf中包含all和eth/lo(具体网卡)的arp_ignore参数,取其中较大的值生效。

注意事项

  • RS的RIP可以是私网地址也可以是公网地址,RIP和DIP在同一网段,RIP的网关不能指向DIP
  • RS跟director要在同一个物理网段
  • Director不能响应请求报文,只能是RS直接发往用户
  • 该模式不支持端口映射
  • Director和各个RS都要配置VIP

lvs-tun:在原请求IP报文之外新加一个IP头部,不修改请求报文的IP头部信息;
在这里插入图片描述
注意事项:

  • DIP、VIP、RIP都应该是公网地址
  • RS的网关不能也不可能指向DIP
  • 不支持端口映射
  • RS的操作系统需支持隧道功能

lvs-fullnat:修改请求报文的源IP和目标IP进行转发;
在这里插入图片描述
注意事项:

  • VIP应为公网地址;DIP和RIP应为私网地址且不在同一网络(段),因此RIP的网关一般不会指向DIP
  • RS收到的请求报文源地址是DIP,因此只能响应给DIP再由director发往client
  • 请求和响应报文都经由director
  • 支持端口映射

lvs调度算法

lvs根据其调度是是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种。

  • 静态方法:(仅根据算法本身进行调度)
    RR:轮询
    WRR:加权重的轮询
    SH:将源地址做哈希,将来自同一个IP的请求始终发往第一次挑中的RS,从而实现会话绑定(session sticky)
    DH:将目标地址做哈希,将发往同一个目标地址的请求始终发至第一次挑中的RS,一般用在正向代理缓存场景中的负载均衡

  • 动态方法:(主要根据每台RS当前的负载状态及调度算法进行调度)
    LC:最少连接数,根据算法将请求发往连接数最少的RS
    WLC加权重的最少连接数,director可以自动获取RS的负载情况并动态调整权重
    SED:最短预期延迟
    NQ:无需队列
    LBLC:基于局部性的最少连接
    LBLCR:复制功能的LBLC

使用lvs-nat模式搭建集群

实验拓扑图:
在这里插入图片描述
在director主机打开内核转发功能:

net.ipv4.ip_forward = 1

安装lvs管理工具:

yum install -y ipvsadm

设置规则:

ipvsadm -A -t 192.168.1.1:80 -s rr
ipvsadm -a -t 192.168.1.1:80 -r 172.16.1.10 -m 
ipvsadm -a -t 192.168.1.1:80 -r 172.16.1.20 -m 

选项:
-a:添加真实服务器
-A:添加虚拟服务器
-r:指定RS的IP地址
-m:nat方式的lvs
-t:表示TCP的服务
-s:调度算法 ,rr表示轮询
更多参数含义见 ipvsadm -h

保存及重载配置:

//保存
ipvsadm --save >/etc/sysconfig/file
ipvsadm -S >/etc/sysconfig/file
//重载
ipvsadm -R </etc/sysconfig/file
ipvsadm-restore </etc/sysconfig/file

查看配置的规则:
在这里插入图片描述
接着在两台RS配置httpd的web界面内容

 echo "172.16.1.10" > /var/www/html/index.html 
  echo "172.16.1.20" > /var/www/html/index.html 

到此lvs-nat模式已经全部配置完成了,测试一下:
在这里插入图片描述
访问VIP能正常根据我们配置的轮询算法进行负载均衡,成功!

使用lvs-dr模式搭建集群

在nat模式很明显的弊端就是所有的报文都需要经过director,造成director的瓶颈,很容易造成单点故障,如果该服务器宕机对整个集群造成的伤害是毁灭性的;ipvs在低版本中是不具有健康检查的,即使是高版本,监测功能也不成熟,因此不适合在生产环境使用。

实验拓扑图:
在这里插入图片描述
在lvs管理主机配置规则:
在这里插入图片描述
在两台RS关闭RP响应:

vim /etc/sysctl.conf
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1

注意:RS上必须在looback接口上配置VIP,否则会响应客户端的ARP请求。

在RS添加web内容:

#RS1
echo “192.168.8.50>/var/www/html/index.html
#RS2
echo “192.168.8.60>/var/www/html/index.html

在浏览器为访问192.168.8.10会显示两个内容表示测试成功!

小结:
会话同步的方法:把所有自己的会话信息保存到数据库中(Redis)
预防director单点故障:高可用(keepalived、heartbeat)
对RS做健康监测:端口探测(传输层)、请求网页(应用层)

猜你喜欢

转载自blog.csdn.net/nmb_jiang/article/details/106225415