天天看点

负载均衡----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

LVS/NAT模式配置方式

搭建环境

为了防止selinux和iptables对实验的影响,我们在实验之前先将所有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 

转载于:https://www.cnblogs.com/QicongLiang/p/9830336.html