群集
- 负载均衡群集
提高应用程序或服务的访问流量,网络设备链路也常用负载均衡技术,如思科以太网通道,华为的聚合链路 - 高可用-故障转移群集-故障冗余群集-服务器群集-热备群集(思科:hsrp)
指定的服务或服务器进行热备份,保障可用性,用于解决架构中单点故障和重要服务器的热备份 - 高性能
将加入群集的多个节点服务器的硬件资源进行整合。如CPU、内存。共同运算一个应用程序。
负载均衡群集架构
- 群集调度器
接收客户端的访问请求,查询调度规则表,向节点服务器转发请求,是链接客户端和节点服务器的接口 - 节点服务器池
接收调度器发送的访问请求,处理请求,返回数据的应用程序服务器 - 共享存储
给节点服务器提供存储服务,统一数据
概述
Linux Virtual Server的简写,意即 Linux虚拟服务器,是一个虚拟的服务器集群系统。我国章文嵩博士在1998年五月创建,默认编译为ip_vs内核模块,而在linux kernel的2.6版本之后kernel是直接支持ipvs的。 优势:(LVS承受负载能力高、稳定、占用服务器资源小) 缺点:适配场景配置较麻烦、不支持节点的健康检查机制
(LVS中国文档地址)
官网
Linux服务器集群系统(一)
工作模式
☑ NAT模式:负载调度器作为网关使用,配置简单,但不实用(服务器节点使用私有IP地址,隐蔽性高。但是负载调度器是整个架构的瓶颈。安全性高于其他两种方式~)
☑ TUN模式:负载调度器与节点都在公网中(IP隧道模式:采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点服务器具有独立的公网IP地址,通过专用IP隧道与负载互通
☑ DR模式:负载调度器不做网关,与节点服务器在同一个网络中(直接路由:采用半开放式的网络结构,各节点服务器并不是分散在各地。负载与各节点通过本地网络连接,性能最高)
扩展
LVS结构和工作原理
LVS由前端的负载均衡器(Load Balance,LB)和后端的真实服务器(Real Server,RS)群组成的。RS中间可以通过局域网或广域网来连接。LVS的这种结构是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务器的RS群。当用户的请求发往虚拟服务器时,LB将会根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。然后RS根据请求内容将对应的请求结果返回给客户,同请求包一样,应答包的返回方式也与包转发策略有关。
LVS的包转发策略(基本为三种)
1)NAT(Network Address Translation)模式:实现目标地址和目标端口的转发;当客户端发送一个请求到VIP中,然后LVS收到数据包之后,根据调度策略选择一个RIP(其中,LB将请求包中的虚拟服务器中的ip转换为选定的RIP,并转发给RS);RS将应答包发送给LB,LB将应答请求中的RIP转换为VIP,回送给客户端。
客户端向VIP发送请求,进行的是将目的地址VIP地址为转化为RIP;RS响应客户端请求时,进行的是源地址为RIP的转换成VIP
2)IP隧道(IP Tunneling)模式:当LB接收到用户请求包之后,根据IP隧道协议封装请求包,然后传送给某一个特定的RS,RS解析出请求的信息,直接将应答信息传送给用户。此时,要求LB和RS都支持IP隧道协议。
3)DR(Direct Routing)模式:实现的是MAC地址的转换;LB受到数据包之后,将请求包中的MAC地址转换为某一选定RS中目标地址的MAC地址后转发出去,RS受到请求包之后,可直接将应答内容传送给客户端。但此时要求LB和RS在局域网内,且LB和RS群共享一个虚拟IP。
三种模式对比
NAT模式 | IP TUN模式 | DR模式 | |
---|---|---|---|
对服务器要求 | 任何操作系统均支持 | 必须支持IP隧道协议,目前只有Linux支持 | 支持虚拟网卡,且可以禁用ARP响应 |
网络要求 | 局域网 | 局域网或广域网 | 局域网 |
支持的节点数 | 10~20个,视Director处理能力而定 | 可以支持到100个节点 | 可以支持到100个节点 |
安全性 | 较高,可隐藏real server | 较差,real server 容易暴露 | 较差,real server 容易暴露 |
IP要求 | 仅需要一个合法IP地址作为VIP | 除VIP外,每个服务器需要拥有合法IP地址可以直接路由至客户端 | 除VIP外,每个服务器需要拥有合法IP地址可以直接路由至客户端 |
拓展性 | 差 | 很好 | 好 |
特点 | 地址转换 | 封装IP | 修改MAC地址 |
LVS负载调度算法
静态:
1、轮询rr:将请求按顺序依次分配给各个web节点;
2、加权轮询wrr:根据web服务器的处理能力,动态调整权重,将请求按照各节点的负载情况进行顺序分配;
3、目标地址散列调度dh:根据请求的目标IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器。若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空;
4、源地址hash:源地址散列”调度算法根据请求的源IP地址,作为散列键(HashKey)从静态分配的散列表找出对应的服务器。若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空
动态
1、最小连接Lc:根据web服务器的连接数量,将请求分配给web节点服务器
2、加权最小连接WLC:根据web服务器的处理能力,动态调整权重,将请求按照各节点的连接数量进行分配,默认;
3、最短延迟调度SED:在WLC基础上改进, Overhead=(ACTIVE+1)*256/加权,不再考虑非
活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。
4、永不排队/最少队列调度NQ:无需队列。
5、基于局部性的最少连接LBLC:调度算法是针对目标IP地址的负载均衡。
6、带复制的基于局部性最少连接LBLCR:调度算法如上!但它与LBLC算法的不同之处是它要维护从一个目标IP地址到“一组服务器”的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。
LVS-NAT模式工作原理
(第1步)、 client发送 request到LVS的VIP上;
(第2步)、VIP根据负载算法选择一个节点服务器web,并记录连接信息到hash表中,然后修改 client的request的目的IP地址为节点服务器的地址,将请求发给节点服务器;
(第3步)、节点服务器收到 request 包后,发现目的IP是自己的IP,于是处理请求,然后发送 reply 给LVS;
(第4步)、LVS收到 reply 包后,修改 reply 包的源地址为VIP,发送给 client;
(第5步)、 client收到来自LVS发送的数据包;
LVS-NAT模式主要是将客户端发送过来的包目标地址更改为后端RIP的IP,主要把三层的信息做了更改其他都不变!此配置下后端RIP不需要做任何配置,但必须保证RIP的网关必须为与RIP相连的DIR接口IP,因为LVS-NAT主要用到DNAT和SNAT原理。
VIP:虚拟IP,客户机访问的IP
RIP:服务器真实IP
NAT模式优缺点
✔ 1.LB负载均衡调度器有比较大的瓶颈。
✔ 2.只需要在LB上配置一个公网IP地址就可以了。
✔ 3.LB之间暴漏在公网中,安全性低。★
✔ 4.每台内部的节点服务器的网关地址必须是调度器LB的内网地址。
✔ 5.NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。
集群服务管理
ipvsadm是一个工具,同时它也是一条命令,用于管理LVS的策略规则。
ipvsadm -A|E -t|u|f <集群服务地址> [-s <调度算法>] [-p <超时时间>] [-M <掩码>] [-b <标志>]
ipvsadm -D -t|u|f <集群服务地址>
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f <集群服务地址> -r <真实服务器地址> [选项]
ipvsadm -d -t|u|f <集群服务地址> -r <真实服务器地址>
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f <集群服务地址>]
ipvsadm --set <超时时间>
ipvsadm --start-daemon <主或备> [--mcast-interface <组播接口>] [--syncid <SID>]
ipvsadm --stop-daemon <主或备>
ipvsadm -h
--add-service -A 添加一个集群服务,需要使用选项
--edit-service -E 编辑一个集群服务,需要使用选项
--delete-service -D 删除指定集群服务,需要使用选项
--clear -C 删除所有集群服务,包括真实服务器转发策略规则
--restore -R 从标准输入中恢复策略规则
--save -S 保存策略规则到标准输出
--add-server -a 添加一个真实服务器,需要使用选项
--edit-server -e 编辑一个真实服务器,需要使用选项
--delete-server -d 删除一个真实服务器,需要使用选项
--list -L|-l 查看集群服务列表,包括真实服务器转发策略规则
--zero -Z 计数器清零。清除连接数、包转发等数量统计信息
--set <超时时间> 设置TCP、TCPFIN(TCP关闭连接状态)、UDP连接超时时间,用于
会话保持。一般情况下TCP和UDP超时时间保持默认就好,TCPFIN
可以根据情况设定,指定它则用户请求连接关闭,该连接则会变
为非活跃(InActive)空闲等待状态,在空闲等待时间内,如果
来自同一源IP的请求,则还会转发给后端的同一台真实服务器上
--start-daemon 开启连接同步守护进程。在选项后面指定自己是Master(主)还
是backup(备),主负载调度器会同步所有策略及连接状态到备
负载调度器,当主故障,备可以接替其工作
--stop-daemon 停止连接同步守护进程
--help -h 显示帮助信息
部署
部署LVS-NAT模式群集
配置
两块网卡:
ens33 内网 vmnet3:192.168.6.20
ens37 外网 vmnet1:192.168.7.20
开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
再确认下网卡的IP地址
添加模块
modprobe ip_vs //添加ip_vs到系统内核
lsmod | grep ip_vs //查看内核模块
安装ipvsadm管理模块
yum -y install ipvsadm
创建群集
ipvsadm -ln //查看群集规则列表
ipvsadm -A -t 192.168.7.20:80 -s rr
-A:创建群集
-C:清除策略
-D:删除群集
-t:群集IP:端口号 群集IP是群集提供给客户端访问,用于接收客户端访问请求的IP地址。
-s:调度规则
rr:round robin 轮询调度 【给每个节点服务器发送一个访问请求,不判断节点服务器的资源占用状态】 round:圆形的,环绕 weighted:加权的,加重的
wrr:weighted round robin 加权轮询调度,根据节点的性能进行轮询分配【性能包括硬件配置和使用率】 least:最小的 connections:连接,联系
lc:least connections 最少连接,根据节点的最小连接数进行分配访问请求
wlc:weighted least connections 加权最少连接数,根据节点的性能和最少连接数进行分配访问请求
添加节点服务器
ipvsadm -a -t 192.168.7.20:80 -r 192.168.6.30:80 -m -w 1
ipvsadm -a -t 192.168.7.20:80 -r 192.168.6.50:80 -m -w 1
-a:添加节点服务器
-d:删除节点服务器
-r:节点服务器IP:端口号
-m:指定工作模式为NAT
-i:指定工作模式为TUN
-g:指定工作模式为DR
-w:宽度、优先级、权重。优先级相同时,按照列表顺序发送访问请求;优先级高的先获得访问请求。
ipvsadm-save //保存规则列表(永久保存LVS规则:ipvsadm -S)
ipvsadm -ln //查看规则列表(ipvsadm -L -n)
ipvsadm -lnc //查看数据包转发列表(查看调度列表)
ipvsadm -d -t 192.168.7.20:80 -r 192.168.6.30:80 //删除节点服务器(注:删除节点时,不需要输入后面的工作类型和权重)
ipvsadm -D -t 192.168.7.20:80 //删除群集时,只需要指定群集IP和端口号,不需要输入算法。
客户机访问192.168.7.20,按F5来回刷新即可(注意http需要关闭keepalive)
部署LVS-DR模式部署
【1】构建LVS-DR模式的群集时要解决的问题
1).群集IP需要配置在调度器上,双IP地址模式,【群集IP接收客户端的访问请求】【通讯IP用于系统管理和连接节点服务器】
2).调度器给节点服务器发送数据包时,不能重新封装数据包中的IP地址,只能重新封装目标MAC地址。 》》》通过sysctl内核响应参数中,关闭send_redirects参数解决。
3).节点服务器收到调度器发送的数据包时,不能丢弃数据包(因为目标地址没有被重封装)。
4).节点服务器配置群集IP后会与调度器群集IP冲突。 》》》通过在节点服务器的lo接口上配置群集ip方式解决。
5).节点服务器将群集IP设置为本地回环地址后,无法处理数据包【给客户端回应的数据包需要用本地回环地址封装】(设置为通讯ip即可)
【2】DR模式的工作流程
✔ 1.客户端发送访问请求给网关,封装的目标IP地址是群集IP。
✔ 2.由调度器接收访问请求,配置数据包转发封装参数,不重新封装目标IP地址。
✔ 3.调度器根据调度规则,将数据包转发给节点服务器。
✔ 4.节点服务器配置本地回环地址为群集ip,并设置arp不响应的参数。
✔ 5.节点服务器收到数据包后,进行处理并直接给客户端发送结果。
优缺点:减轻了调度器的工作压力,调度器只负责调度访问请求,由节点直接回复。缺点:每个节点服务器都需要进行配置,部署步骤比较繁琐。
总结:DR模式(直连路由模式:Virtual Server via Direct Routing
)是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样。
【3】DR模式的优缺点
DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求调度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。DR模式是互联网使用比较多的一种模式。 RS:后端节点服务器(例如Web服务器)
【4】LVS-DR模式实例
实验环境:
一台客户端(ens33:192.168.2.2 gataway:192.168.2.1)
一台lvs调度器(ens:33 192.168.2.1 ens33:0 192.1681.1 )
两台web服务器(web1: ens33:192.168.2.3 lo:0 192.168.1.1 ens33:192.168.2.4 lo:0 192.168.1.1)
配置IP
# 虚拟IP:
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
lo:0
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.1
NETMASK=255.255.255.255
ONBOOT=yes
NAME=web1
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.1
NETMASK=255.255.255.255
ONBOOT=yes
NAME=web2
lvs上调整响应参数
echo "net.ipv4.conf.all.send_redirects = 0" >>/etc/sysctl.conf
echo "net.ipv4.conf.default.send_redirects = 0" >>/etc/sysctl.conf
echo "net.ipv4.conf.ens33.send_redirects = 0" >>/etc/sysctl.conf
lvs上安装ipvsadm
modprobe ip_vs
yum -y install ipvsadm
ipvsadm -A -t 192.168.1.1:80 -s rr #将192.168.1.1:80端口作为转换端口
ipvsadm -a -t 192.168.1.1:80 -r 192.168.2.3 -g -w 1 #2.3转换为1.1
ipvsadm -a -t 192.168.1.1:80 -r 192.168.2.4 -g -w 1 #2.4转换为1.1
ipvsadm-save
安装web服务器
web1
yum -y install httpd
echo "welcome to 192.168.2.3 web server" > /var/www/html/index.html
vim /etc/httpd/conf/httpd.conf
keepalive off #关闭页面保持
systemctl restart httpd
web2
yum -y install httpd
echo "welcome to 192.168.2.4 web server" > /var/www/html/index.html
vim /etc/httpd/conf/httpd.conf
keepalive off #关闭页面保持
systemctl restart httpd
在web服务器添加路由
route add -host 192.168.1.1 dev lo:0 #将lo:0作为发送路由 临时的
echo "route add -host 192.168.1.1 dev lo:0" >> /etc/rc.local #永久的
web上调整响应参数
echo "net.ipv4.conf.all.arp_ignore = 1" >>/etc/sysctl.conf
echo "net.ipv4.conf.all.arp_announce = 2" >>/etc/sysctl.conf
echo "net.ipv4.conf.default.arp_ignore = 1" >>/etc/sysctl.conf
echo "net.ipv4.conf.default.arp_announce = 2" >>/etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_ignore = 1" >>/etc/sysctl.conf
echo "net.ipv4.conf.lo.arp_announce = 2" >>/etc/sysctl.conf
sysctl -p
验证
1、客户端访问:
[root@localhost ~]# http://192.168.1.1/
2、在LVS上查看:
[root@localhost ~]# ipvsadm -Lnc
扩展:
showmount命令 查询“mountd”守护进程,以显示NFS服务器加载的信息。
语法
showmount (选项) (参数)
选项
-d:仅显示已被NFS客户端加载的目录;
-e:显示NFS服务器上所有的共享目录;
参数
NFS服务器:指定NFS服务器的ip地址或者主机名。
举例:
显示指定NFS服务器连接NFS客户端的信息: # showmount 192.168.1.1 #此ip为nfs服务器的
显示输出目录列表: # showmount -e
显示指定NFS服务器输出目录列表(也称为共享目录列表):# showmount -e 192.168.1.1
显示被挂载的共享目录: # showmount -d
显示客户端信息和共享目录: # showmount -a
显示指定NFS服务器的客户端信息和共享目录: # showmount -a 192.168.1.1
You can be stupid, but I can’t!