负载均衡----LVS


LVS的三种工作模式
LVS-NAT:
LVS-NAT方式的思路很简单,它利用调度服务器实施网络层数据欺骗,它把客户端发送到调度服务器的数据IP包的目标地址进行了替换。
LVS-DR:
这个方法的思路是实施数据链路层数据欺骗,修改网络帧数据的Mac地址。
LVS-TUN:
这个方法是为了突破LVS-DR同一网段内的限制所提出来的。它不做任何欺骗,而是光明正大的交流,在网络层进行了二次包装

 

各种模式的优缺点

VS/NAT的优缺点
<1>优点:
对后端的操作系统没有要求;
只需要一个IP地址配置在调度器上,服务器组可以用私有IP地址;
支持端口映射;
<2>缺点:
请求和响应都需要通过LB,伸缩能力有限(一般后面能连接10台左右服务器)
需要服务器和LB在同一个局域网中;
需要将服务器的默认网关设置为LB;


VS/TUN的优缺点
<1>优点:
不需要调度应答报文,负载能力强;
服务器和调度器可以不在同一个VLAN中;
支持广域负载均衡;
<2>缺点:
所有的服务器必须支持“IP Tunneling”协议,需安装内核模块,安装复杂;
建立IP隧道的开销大;
服务器需要联通外网,风险较大;
不支持端口映射;


VS/DR的优缺点
<1>优点:
与TUN相比,没有IP隧道的开销,性能较高;
<2>缺点:
要求LB和服务器都有一块网卡连在同一个物理网段中;
不支持端口映射;


使用场景
VS/NAT:小并发的实验性应用、mysql集群;
VS/TUN:广域网负载;
VS/DR:大众方式;

 

 LVS的调度算法有十种,其中静态算法4种,动态算法6种。

静态算法:不考虑后端服务器的连接情况和负载情况,只根据算法进行调度。

1.RR(轮叫调度  round robin)

        调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

 

2.WRR(加权轮叫调度 Weight RR)

        调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

 

3.DH 目标地址散列调度(Destination  Hash)

        根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

 

4.SH 源地址散列调度(Source Hash)

         源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

 

动态算法:前端的调度器会根据后端真实服务器的实际连接情况来分配请求

1.LC 最少链接

        调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。

 

2.WLC 加权最少链接

        在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

 

3.SED 最短延迟调度(Shortest Expected Delay)

        在WLC上改进,因为非活跃链接对服务器造成的负载并不高,因此此算法不再考虑非活动状态,使用Overhead =(活跃链接数+1)/权重。得出数值最小的接受下一个前端发来的请求。

 

4..NQ 永不排队/最少队列调度(Never Queue Scheduling NQ)

        无需队列,如果有 realserver=0的服务器,则直接把前端的请求发给他,而不经过sed算法。这样就保证了不会有服务器是空间的。假如一台服务器有很多非活动链接,假如这些链接是dns通过udp建立起来的,那实质上他其实是没什么负载的,但是在NQ下面则是不会将请求发往该服务器,这样有可能会造成资源的浪费。而假如这些链接是通过http建立起来的,就要考虑非活动链接对服务器带来的压力。

 

5.. LBLC:基于局部性的最少链接(locality-Based Least Connections)

        目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,则将请求发往该服务器,若服务器不存在或超载,则按照最少链接原则选出一台连接数最少的服务器,并将请求发往给它。

 

6. LBLCR:带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)

        目前主要用于Cache集群系统。与LBLC不同的是,LBLCR是将目标地址与服务器组建立关系,根据最小链接原则选出服务器,假如没有超载,则把请求发往给该服务器。假如超载,则再在服务器集群中根据最小链接原则选出服务器,并将请求发往给该服务器。

 

LVS/DR模式配置方式

关闭selinux

setenforce  0

防火墙开放端口

firewall-cmd  --add-port=80/tcp  --permanent

firewall-cmd  --reload

 

配置调度服务器

加载ip_vs模块

modprobe ip_vs    

 

查看相关信息

cat /proc/net/ip_vs

 

安装ipvsadm

yum  -y  install  ipvsadm

 

在负载均衡服务器上转发编辑脚本

#!/bin/bash
#
ifconfig ens33:0 172.16.1.189 broadcast 172.16.1.189 netmask 255.255.255.255 up #添加虚拟地址的接口
route add -host 172.16.1.189 dev ens33:0                                                                    #给ens33:0添加路由
ipvsadm -C                                                                                                                     #清除内核虚拟服务器表中的所有记录
ipvsadm -A -t 172.16.1.189:80 -s wlc                                                                             #创建虚拟服务器
ipvsadm -a -t 172.16.1.189:80 -r 172.16.1.11:80 -g                                                       #添加服务器节点
ipvsadm -a -t 172.16.1.189:80 -r 172.16.1.12:80 -g                                                       #添加服务器节点
ipvsadm -a -t 172.16.1.189:80 -r 172.16.1.13:80 -g                                                       #添加服务器节点
ipvsadm -Ln                                                                                                                    #查看节点状态,加个“-n”将以数字形式显示地址、端口信息

 

//选项注释:
"-A"表示添加虚拟服务器,
"-a"表示添加真实服务器
"-t"用来指定VIP地址及TCP端口
"-r"用来指定RIP地址及TCP端口
"-s"用来指定负载调度算法——rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接)
"-m"表示使用NAT群集模式("-g"是DR模式,"-i"是TUN模式)

 

查看网卡是否已创建虚拟接口

ifconfig

 

在节点机器上编辑转发脚本

#!/bin/bash
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
ifconfig lo:0 172.16.1.189 broadcast 172.16.1.189 netmask 255.255.255.255 up          #在lo上配置虚拟接口
route add -host 172.16.1.189 dev lo:0                                                                             #配置虚拟接口的路由
sysctl -p &>/dev/null

 

查看网卡是否已经创建虚拟接口

Ifconfig

 

测试

在除了LVS集群的机器上访问,切记不可在LVS环境本地进行测试,会访问不到。例如这里的一台调度器和三台后端服务器都不能作为测试环境。

for n in `seq 10000`;do curl 172.16.1.189:/test/;sleep 1;done

得出下图证明负载已经正常运行

 

 

LVS/NAT模式配置方式

搭建环境
为了防止selinuxiptables对实验的影响,我们在实验之前先将所有selinux策略临时调为0,将iptables服务关闭

  • 调度器:VIP192.168.1.89/24   DIP172.16.1.89/24
  • 节点rs1:192.168.1.89/24 网关指向调度器DIP172.16.1.7/24
  • 节点rs2:192.168.1.89/24 网关指向调度器DIP172.16.1.8/24
  • 节点rs3:192.168.1.89/24 网关指向调度器DIP172.16.1.9/24


由于调度器上需要转发请求,所以需要在内核中开启转发功能:
在调度器上,执行如下步骤
vim /etc/sysctl.conf               #修改这一行,将0改为1,表示开启转发功能

net.ipv4.ip_forward = 1

sysctl -p                                 #读取配置文件,显示以下内容证明修改成功

net.ipv4.ip_forward = 1


添加调度器
在调度器上,执行以下步骤

yum -y install ipvsadm     #安装ipvaadm工具

 

添加节点

在调度器上,执行以下步骤

ipvsadm -A -t 192.168.1.89:80 -s rr   #设置调度器,调度算法为rr(轮询)

ipvsadm -a -t 192.168.1.89:80 -r 172.16.1.7:80 -m

ipvsadm -a -t 192.168.1.89:80 -r 172.16.1.8:80 -m

ipvsadm -a -t 192.168.1.89:80 -r 172.16.1.9:80 -m

 

查看状态

ipvsadm -Ln

P Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  192.168.1.89:80 rr

  -> 172.16.1.7:80                Masq    1      0          2         

  -> 172.16.1.8:80                Masq    1      0          2         

  -> 172.16.1.9:80                Masq    1      0          3  

 

测试

curl   192.168.1.89 

posted @ 2018-10-22 15:29  喜欢it的小聪聪  阅读(263)  评论(0编辑  收藏  举报