Cluster,集群(也称群集)由多台主机构成,但对外只表现为一一个整体,只提供一-个访问入口(域名或IP地址), 相当于一台大型计算机。
对于企业服务的的性能提升一般会有两种方式:
纵向扩展 : 对服务器的CPU 内存 硬盘 等硬件进行升级或者扩容来实现的 性能上限会有瓶颈,成本昂贵,收效比不高等问题
横向扩展 : 通过增加服务器主机数量来应该高并发的场景
负载均衡(LB)
:提高应用系统的响应效率,处理更多的访问请求,减少延迟,提高并发和负载能力。 同时也是如今企业运用最
多的群集类型。
高可用(HA)
: 提高应用系统的可靠性,减少服务中断时间,确保服务的连续性
高性能运算(HPC)
:将多台主机的硬件计算资源整合到一起实现分布式运用,比如 云计算
话术 | 说明 |
---|---|
DS | Director Server。指的是前端负载均衡器。 |
RS | Real Server。节点服务器,后端真实的工作服务器。 |
VIP | 向外部直接面向用户请求,作为用户请求的目标的IP地址。 |
DIP | Director Server IP,主要用于和内部主机通讯的IP地址。 |
RIP | Real Server IP,后端服务器的IP地址。 |
CIP | Client IP,访问客户端的IP地址。 |
第一层:负载调度器 :通过VIP接收用户的请求,再通过调度算法确定要转发的节点服务器
访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP地址,也称为群集 IP地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑 替换至备用调度器,确保高可用性。
第二层:服务器池中的节点服务器 : 通过RIP接收调度器转发来的请求,并处理请求进行响应
群集所提供的应用服务、由服务器池承担,其中每个节点具有独立的RIP地址(真 实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度 器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
第三层:共享存储 :为各个节点服务器提供稳定、一致的文件存取服务,比如NAS+NFS,文件服务器+NFS,分布式对象存储等存储设备
为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性 共享存储可以使用NAS设备,或者提供NFS共享服务的专用服务器。
Linux Virtual Server:
针对Linux内核开发的负载均衡
1998年5月,由我国的章文嵩博士创建
官方网站:www.linuxvirtualserver.org/
LVS实际上相当于基于IP地址的虚拟化应用,为基于IP地址和内容请求分发的负载均衡提出来一种高效的解决方法
rr:轮询算法(Round Robin)
将请求依次分配给不同的RS节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。
将收到的访问请求安装顺序轮流分配给群集指定各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载。
wrr:加权轮询调度(Weighted Round Robin)
依据不同RS的权重值分配任务。权重值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多。相同权值的RS得到相同数目的连接数。
保证性能强的服务器承担更多的访问流量。
dh:目的地址哈希调度(destination hashing)
以目的地址为关键字查找一个静态hash表来获得所需RS。
sh:源地址哈希调度(source hashing)
以源地址为关键字查找–个静态hash表来获得需要的RS。
lc:最小连接数调度( Least Connections)
ipvs表存储了所有活动的连接。LB会比较将连接请求发送到当前连接最少的RS。
根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。
wlc:加权最小连接数调度(Weighted Least Connections)
假设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次取Ti/Wi为最小的RS作为下一个分配的RS。
在服务器节点的性能差异较大时,可以为真实服务器自动调整权重。
性能较高的节点将承担更大比例的活动连接负载。
lblc:基于地址的最小连接数调度(locality-based least-connection)
将来自同一个目的地址的请求分配给同一-台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。
群集的负载调度技术有三种工作模式:地址转换(NAT模式) ,直接路由(DR模式),IP隧道(IP-TUN)。对于商用来说,最常用是NAT模式和DR模式。
NAT 模式优点
a. 能够支持 windows 操作系统
b. 支持端口映射。如果 rs 端口与 vport 不一致,lvs 除了修改目的 IP,也会修改 dport 以支持端口映射。
NAT 模式缺点
a. 后端 RS 需要配置网关
b. 双向流量对 lvs 负载压力比较大
NAT 模式的使用场景
如果你是 windows 系统,使用 lvs 的话,则必须选择 NAT 模式了。。
(1)用户通过互联网DNS服务器解析到公司负载均衡设备上面的外网地址,相对于真实服务器而言,LVS外网IP又称VIP(Virtual IP Address),用户通过访问VIP,即可连接后端的真实服务器(Real Server),而这一切对用户而言都是透明的,用户以为自己访问的就是真实服务器,但他并不知道自己访问的VIP仅仅是一个调度器,也不清楚后端的真实服务器到底在哪里、有多少真实服务器。
(2)用户将请求发送至LVS负载均衡调度的器(同时也是网关服务器)的外网网卡上,此时LVS将根据预设的算法选择后端的一台真实服务器(内网中真实处理数据的web服务器),将数据请求包转发给真实服务器,并且在转发之前LVS会修改数据包中的目标地址以及目标端口,目标地址与目标端口将被修改为选出的真实服务器IP地址以及相应的端口。
(3)真实的服务器将响应数据包返回给LVS调度器,调度器在得到响应的数据包后会将源地址和源端口修改为VIP及调度器相应的端口,修改完成后,由调度器将响应数据包发送回终端用户,另外,由于LVS调度器有一个连接Hash表,该表中会记录连接请求及转发信息,当同一个连接的下一个数据包发送给调度器时,从该Hash表中可以直接找到之前的连接记录,并根据记录信息选出相同的真实服务器及端口信息。
DR 模式的优点
a. 响应数据不经过 lvs,性能高
b. 对数据包修改小,信息保存完整(携带客户端源 IP)
DR 模式的缺点
a. lvs 与 rs 必须在同一个物理网络(不支持跨机房)
b. rs 上必须配置 lo 和其它内核参数
c. 不支持端口映射
DR 模式的使用场景
如果对性能要求非常高,可以首选 DR 模式,而且可以透传客户端源 IP 地址。
(1)用户发送请求到Director Server(负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。
(2)由于Director Server和 Real Server 在同一个网络中,所以是通过二层数据链路层来传输。
内核空间判断数据包的目标IP是本机IP,此时IPVS比对数据包请求的服务是否为集群服务,若是,重新封装数据包,修改源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server.
(3)Real Server发现请求报文的MAC地址是自己的MAC地址,就接收此报文,重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过lo接口传送给物理网卡然后向外发出。
Real Server直接将响应报文传送到客户端。
Tun 模式的优点
a. 单臂模式,对 lvs 负载压力小
b. 对数据包修改较小,信息保存完整
c. 可跨机房(不过在国内实现有难度)
Tun 模式的缺点
a. 需要在后端服务器安装配置 ipip 模块
b. 需要在后端服务器 tunl0 配置 vip
c. 隧道头部的加入可能导致分片,影响服务器性能
d. 隧道头部 IP 地址固定,后端服务器网卡 hash 可能不均
e. 不支持端口映射
Tun 模式的使用场景
理论上,如果对转发性能要求较高,且有跨机房需求,Tunnel 可能是较好的选择。
(1)当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链,此时的源IP为CIP,目标IP为VIP
(2)PREROUTING检查发现数据包的目标IP是本机,将数据包转发到INPUT链。
(3)IPVS对比数据包请求的服务是够为集群服务,若是,在请求报文的首部在封装一次IP报文,封装报文的源IP为DIP,目标IP为RIP。然后发送至POSTROUTING链。此时的源IP为DIP,目标IP为RIP
(4)POSTROUTING链根据最新封装的IP报文,将数据包发送至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。此时源IP为DIP,目标IP为RIP
(5)RS接收到数据包后发现是自己的IP地址,进行解封装的操作,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS处理此请求,处理完成后,通过lo接口送给eth0网卡,然后线外传递。此时的源IP地址为VIP,目标IP为CIP
(6)响应报文到达客户端
选项 | 说明 |
---|---|
-A | 添加虚拟服务器 |
-D | 删除整个虚拟服务器 |
-s | 指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc) |
-a | 表示添加真实服务器(节点服务器) |
-d | 删除某一个节点 |
-t | 指定 VIP地址及 TCP端口 |
-r | 指定 RIP地址及 TCP端口 |
-m | 表示使用 NAT群集模式 |
-g | 表示使用 DR模式 |
-i | 表示使用 TUN模式 |
-w | 设置权重(权重为 0 时表示暂停节点) |
-p 60 | 表示保持长连接60秒(默认关闭连接保持) |
-l | 列表查看 LVS 虚拟服务器(默认为查看所有) |
-n | 以数字形式显示地址、端口等信息,常与“-l”选项组合使用。ipvsadm -ln |
负载调度器:内网关 ens33:192.168.30.40,外网关 ens36:12.0.0.10
Web节点服务器1:192.168.30.20
Web节点服务器2:192.168.30.30
NFS服务器:192.168.30.10
客户端:12.0.0.12
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install nfs-utils rpcbind -y
systemctl start rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
systemctl enable rpcbind.service
mkdir /opt/ztm /opt/hss
chmod 777 /opt/ztm /opt/hss
echo 'this is ztm web!' > /opt/ztm/index.html
echo 'this is hss web!' > /opt/hss/index.html
vim /etc/exports
/usr/share *(ro,sync)
/opt/ztm 192.168.30.0/24(rw,sync)
/opt/hss 192.168.30.0/24(rw,sync)
--发布共享---
exportfs -rv
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
yum install httpd -y
systemctl start httpd.service
systemctl enable httpd.service
yum install nfs-utils rpcbind -y
showmount -e 192.168.30.10
systemctl start rpcbind
systemctl enable rpcbind
--192.168.30.20---
mount.nfs 192.168.30.10:/opt/ztm /var/www/html
vim /etc/fstab
192.168.30.10:/opt/ztm /var/www/html nfs defaults,_netdev 0 0
mount -a
--192.168.30.30---
mount.nfs 192.168.30.10:/opt/hss /var/www/html
vim /etc/fstab
192.168.30.10:/opt/hss /var/www/html nfs defaults,_netdev 0 0
mount -a
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
`配置SNAT转发规则`
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
或 echo '1' > /proc/sys/net/ipv4/ip_forward
sysctl -p
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.30.0/24 -o ens36 -j SNAT --to-source 12.0.0.10
`加载LVS内核模块`
modprobe ip_vs #加载 ip_vs模块
cat /proc/net/ip_vs #查看 ip_vs版本信息
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
`安装ipvsadm 管理工具`
yum -y install ipvsadm
--启动服务前须保存负载分配策略---
ipvsadm-save > /etc/sysconfig/ipvsadm
或者 ipvsadm --save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
`配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)`
ipvsadm -C #清除原有策略
ipvsadm -A -t 12.0.0.10:80 -s rr [-p 60]
ipvsadm -a -t 12.0.0.10:80 -r 192.168.30.20:80 -m [-w 1]
ipvsadm -a -t 12.0.0.10:80 -r 192.168.30.30:80 -m [-w 1]
ipvsadm #启用策略
ipvsadm -ln #查看节点状态,Masq代表 NAT模式
ipvsadm-save > /opt/ipvsadm #保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
删除群集中某一节点服务器
ipvsadm -d -t 12.0.0.1:80 -r 192.168.30.11:80
删除整个虚拟服务器
ipvsadm -D -t 12.0.0.1:80
停止服务(清空策略),如果selinux没关
systemctl stop ipvsadm 闭/etc/sysconfig/ipvsadm内容也会清空
启动服务(根据/etc/sysconfig/ipvsadm恢复策略)
systemctl start ipvsadm
恢复LVS 策略
ipvsadm-restore < /opt/ipvsadm
在一台IP为12.0.0.12的客户机使用浏览器访问 http://12.0.0.10/ ,不断刷新浏览器测试负载均衡效果,刷新间隔需长点(或者关闭Web服务的连接保持)。