集群
概述
集群(cluster),也称为群集,表示一群的意思,在服务器领域表示大量的服务器的集合体。将各个主机组成集群,形成一个系统协调工作,其可扩展性、可用性、容量、性能都会有大规模的提升。
企业级集群分类:
- 负载均衡集群(LB,Load Balance)
- 高可用集群(HA,High Availability)
- 高性能集群(HP,High Performance)
负载均衡集群(LB)
- 在企业网站架构中,以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体能力。LB负载分配依赖于主节点的算法,将来自客户机的访问请求分担给多个服务器节点
- 负载均衡集群实现方式
- 硬件方式:F5、A10、Citrix、NetScaler、array、梭子鱼、绿盟
- 软件方式:LVS、haproxy、nginx
- 负载均衡集群工作的层次划分
- 传输层:LVS,haproxy
- 应用层:haproxy、nginx、ats
高可用集群(HA)
- 以提高应用系统的可靠性、尽可能减少终端宕机时间为目标,确保服务的连续性,达到高可用(HA)的容错效果,例如“故障切换”“双击热备”“多机热备”等都属于高可用群集技术。HA工作方式包括双工和主从两种模式。双工即所有节点同时在线;主从则只有主节点在线,但当出现故障时从才切换为主节点
高性能集群(HP)
- 以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC,High performance computing)能力。如“云计算”“网格计算”。高性能群集依赖于“分布式运算”、并行计算:通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现大型、大型、超级计算机才具备的计算能力
LVS负载均衡集群
LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目(LVS官方站点),已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如下图所示,互联网用户从外部访问公司的外部负载均衡服务器,用户的Web请求会发送给LVS调度器,调度器根据预设的算法决定将该请求发送给后端的某台Web服务器。根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到用户
LVS(Linux Virtual Server)工作在传输层,基于TCP和UDP进行调度工作。
工作方式:根据目标IP和端口转发到后端主机集群(服务器池)中某一台主机(如何转发请求,基于某种特定的算法)
LVS基于netfilter进行设计的。但是由于LVS有自己的会话表,故这可能会与iptables中会话表产生冲突,导致了二者无法完美并行。这样的后果就是会丧失部分安全功能
LVS由ipvsadm和ipvs两个部分组成,ipvsadm是用户命令工具,用于管理LVS集群服务;ipvs是LVS的内核功能模块,ipvs工作于netfilter的INPUT链
LVS工作模式分为
NAT模式
TUN模式
DR模式
调度算法(lvs scheduler)
负载均衡集群基于调度算法挑选后端RS进行调度
静态方法:根据算法本身进行调度
RR(轮询)、WRR(加权轮询)、SH(源地址hash,实现session保持)、DH(目的地址hash)
动态方法:根据算法以及各个RS的当前负载状态进行调度
LC(最小连接数)、WLC(加权最小连接)、SED(最短期望延迟)、NQ(永不排队)、LBLC、LBLCR
常用调度算法
rr:轮询 rr 算法就是将外部请求顺序轮流分配到集群中的node 上,但不考虑每台node 的负载情况
- wrr:加权轮询 wrr 算法在rr 算法的基础上会考察每台node的负载情况,并尝试让负较轻的node 承担更多请求
lc:最少连接算法可以让LVS 尝试把新的请求交给当前连接数最少的node ,直到此node 连接数不再属于最少为止
- wlc:加权最少连接 wlc 算法也有权重的干预。LVS 会根据每台node的权重并综合连接数控制转发行为
lblc:局部最少连接算法会加上针对源请求IP地址的路由估算,并尝试把请求发送到与源请求IP路由最近的node 上。此种方法一般用于远程或者是大规模的集群组。
- lblcr:带有复制的局部最少连接算法 lblcr 算法是在lblc 算法的基础上增加了一个node 列表,先依据lblc 算法计算出与源请求IP地址最近的一组node ,然后再决定把请求发送到最近一组中的最近的一台node 。若此node没有超载则将请求转发给这台node, 如果超载则依据”最少连接”原则找到最少连接的node并将此node 加入集群组中。并将请求转给此node
dh:目标地址散列算法,相当于随机
sh:原地址散列算法,相当于随机
名词解释
- DS:Director Server,目标服务器,即负载均衡器
- RS:Real Server,真实服务器,即后端服务器
- VIP:virtual IP是外部直接面向用户请求,作为用户请求的目标IP地址。
- DIP:Director Server IP.主要用于和内部主机通信的IP地址。
- RIP:Real Server IP 真实服务器ip
- CIP:Client IP,客户端IP
注:负载均衡器使用双网卡,一块使用外网ip的VIP,一块是与内部真实服务器通信的DIP
LVS三种工作模式
- 内容来自LVS介绍及工作原理图解
NAT
主要是修改目标IP地址为挑选出新的RS的IP地址。即请求进入负载均衡器时做DNAT,响应出负载均衡器时做SNAT。
1.当用户请求到达Director Server,此时请求的数据报文会先到达内核的PREROUTING链,此时报文的源IP是CIP,目标IP是VIP。
2.PREROUTING链检查发现数据包的目标IP是本机,将数据包送至INPUT链。
3.IPVS内核模块比对数据包请求的服务是否为集群服务,如果是,则修改数据包的目标IP为后端服务器的IP,然后将数据包发至POSTROUTING链,做DNAT转换。此时报文的源IP是CIP,目标IP是RIP
4.POSTROUTING链通过选路,将数据包发送到Real Server5.Real Server比对发现目标IP是自己的IP,开始建立响应报文发回给Director Server,此时报文的源IP是RIP,目标IP是CIP
6.Director Server在响应客户端之前,此时会将源IP地址修改为自己的IP地址,然后响应给客户端,做SNAT转换;此时报文的源IP是VIP,目标IP是CIP
特性:
1.RS必须使用私有地址,将RS的网关指向DIP
2.DIP和RIP必须是同一网段内
3.请求和响应报文都要经过Director Server,高负载场景中,Director Server会出现性能瓶颈
4.支持端口映射
5.RS可以使用任意操作系统
DR模型
将请求报文的目标MAC地址设定为天选出来的RS的MAC地址。即做MAC地址转换。
1.当用户请求到达Director Server,此时请求的数据报文huixiandao内核空间的PREROUTING链,此时报文的IP是CIP,目标IP是VIP
2.PREROUTING链检查发现数据包的目标IP是本机,将数据包送至INPUT链,
3.IPVS内核模块比对数据包请求的服务是否为集群服务,如果是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改为RIP的MAC地址,然后将数据包发至POETROUTING链中,此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址4.由于DS和RS实在同一网络中,所以两者之间的通信时通过二层协议来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server
5.RS发现请求报文的MAC地址是自己的MAC地址,就接受此报文,处理完成以后,将响应报文通过IO接口传送给eth0网卡,然后向外发出,不经过负载均衡器。此时源IP地址为VIP,目标IP是CIP
6.响应报文最终送至客户端
特性:
- 保证前端路由将目标地址为VIP的报文全部发送给DS,而不是RS。
解决方案:
(1).在前端路由做静态地址路由绑定,将对于VIP的地址仅路由到DS上。
存在问题:用户未必有权限操作路由
(2).arptables:在arp层次上实现arp解析时做防火墙规则,过滤RS响应arp请求,由iptables提供
(3).修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制不能响应对VIP地址的解析请求
2.RS可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以直接对RIP进行直接访问
3.RS和DS必须在同一物理网络中(即必须是同一物理网络)
4.所有的请求报文经由DS,但响应报文必须不能经过DS
5.不支持地址转换,即整个过程和不转换IP地址,只转换MAC地址。也不支持端口映射
6.RS可以使大多数操作系统
7.RS的网关绝对不允许指向DIP,因为不允许响应报文经过DS
8.RS的lo接口配置VIP的地址
- 保证前端路由将目标地址为VIP的报文全部发送给DS,而不是RS。
TUN模型
在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标地址为VIP)外部IP地址首部(源地址为DIP,目标地址为RIP)
- 当用户请求报文到达DS,此时请求的数据报文会先到内核的PREROUTING链。此时源IP是CIP,目标IP是VIP
- PREROUTING链检查发现数据包的目标IP是本机,将数据包送至INPUT链
- IPVS比对数据包请求的服务是否为集群服务,如果是,在请求报文的首部再次封装一层IP报文,封装源IP为DIP,目标IP是RIP,然后发至POSTROUTING链。此时源IP是为DIP,目标IP是RIP
- POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为外层封装多了一层IP首部,所以可以理解为此时通过隧道传输),此时源IP是DIP,目标IP是RIP
- RS收到报文后发现是自己的IP地址,就会将报文接受下来,拆除最外层的IP后,会发现里面还有一层IP首部,而且目标地址是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成滞后,通过lo接口送给eth0网卡,然后向外传递。此时的源IP地址为VIP,目标IP为CIP
- 响应报文送达至客户端
特性:
- RIP、VIP、DIP全为公网地址
- RS的网关不会也不可能指向DIP
- 所有的请求报文经由DS,但响应报文必须不能经过DS
- 不支持端口映射
- RS的系统必须支持隧道模型
LVS的基本操作
检查系统内核是否已经加载编译了lvs
若为编译到系统内核中需要手动进行装载,并安装ipvsadm管理工具
安装lvs命令工具
ipvsadm 工具
- 格式:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
- -A 添加lvs虚拟服务器
- -E 修改虚拟服务器
- -D 删除虚拟服务器
- -L | l 显示虚拟服务器配置列表
- -C 清除虚拟服务器列表中的所有记录
- -S 保存虚拟服务器配置规则
- -R 恢复虚拟服务器配置规则
- -Z 虚拟服务器列表计数器清零
- -a 在虚拟服务器中添加所管理的真实服务器
- -e 编辑真实服务器配置
- -d 删除真实服务器配置
- -r 指定rip真实服务器的ip地址
- -h 帮助
- -t 指定使用tcp
- -u 指定使用udp
- -f
- -n 不进行IP地址反向解析
- -s 指定调度算法,默认为wlc
- -p 使用持久连接,在TIMEOUT时间内来自同一个客户端的请求发送给同一台真实服务器
- -M 指定掩码
- -g 指定工作模式为dr直接路由模式(默认)
- -i 指定工作模式为tun隧道模式
- -m 指定工作模式为nat模式
- -w 为真实服务器设置权重
- -c 显示真实服务器的权重
- --timeout 显示tcp tcpfin udp 的timeout 值
- --daemon 显示同步守护进程状态
- --stats 显示统计信息
- --rate 显示速率信息
- --sort 对虚拟服务器和真实服务器排序输出
- --numeric -n 输出IP 地址和端口的数字形式 、
- --start-daemon 启动同步守护进程,后面可以是master 或backup
- --stop-daemon 停止同步守护进程
- 格式:ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
lvs虚拟服务器操作
添加lvs虚拟服务器及查看规则
ipvsadm -A -t 192.168.10.121:80 -s rr ipvsadm -L #或-l(小写L) ipvsadm -Ln #-n 不进行IP地址反解 #其他常用查看参数 # -c 显示当前的连接 # --stats 显示统计数据 # --rate 统计速率
修改lvs虚拟服务器
ipvsadm -E -t 192.168.10.121:80 -s wrr #不能直接修改虚拟服务器的ip
删除集群
ipvsadm -D -t 192.168.10.121:80
清空所有规则
ipvsadm -C
真实服务器管理
添加真实服务器RS到指定的虚拟服务器
ipvsadm -a -t 192.168.10.121:80 -r 192.168.20.10 -m -w 1 ipvsadm -a -t 192.168.10.121:80 -r 192.168.20.20 -m -w 2 #为虚拟服务器192.168.10.121添加真实服务器192.168.20.10与192.168.20.20 #192.168.20.10 使用NAT工作模式,权重为1 ##192.168.20.20 使用NAT工作模式,权重为2
删除真实服务器
ipvsadm -d -t 192.168.10.121:80 -r 192.168.20.10
配置保存与恢复
永久保存配置
ipvsadm -S -n > /etc/sysconfig/ipvsadm-config
配置恢复
ipvsadm -R < /etc/sysconfig/ipvsadm-config
搭建LVS-NAT实践
实验环境
lvs server:Centso7
- vip 192.168.20.121
- dip 192.168.10.121
lamp1 server:Centos7 192.168.10.10
lamp2 server:Centos7 192.168.10.11
注:防火墙、selinux均已关闭
拓扑图如下
LAMP服务器搭建
这里使用之前实验中已经搭建好的LAMP服务器,如果感兴趣可以参考LAMP环境搭建详细流程
修改两台LAMP服务器网卡配置,指定网关为DIP
修改主页如下,用以测试负载均衡集群调度
启动服务
LVS服务器配置
为lvs添加额外网卡并配置ip
注:vmnet2所在网段为192.168.20.0,网关为192.168.20.1
开启lvs服务器路由转发功能
安装ipvsamd管理工具
添加虚拟服务器
测试
永久保存lvs配置规则
搭建LVS-DR实践
实验环境
lvs server:Centso7
- vip 192.168.10.200
- dip 192.168.10.121
lamp1 server:Centos7 192.168.10.10
lamp2 server:Centos7 192.168.10.11
注:防火墙、selinux均已关闭
拓扑图如下:
修改所有RS(LAMP)的内核参数
为两台RS(LAMP)添加网卡子接口
为两台RS(LAMP)配置路由规则
删除lvs服务器的vip网卡,并配置网卡子接口与路由规则
ifconfig eth0:0 192.168.10.200 broadcast 192.168.10.200 netmask 255.255.255.255 up route add -host 192.168.10.200 dev eth0:0 #网卡子接口上添加外网能够访问的ip #配置相应的路由
清空上个实验ipvsadm配置
添加新的ipvsadm配置
测试