集群概念:
由两个或两个以上的服务实体协调、配合完成一系列工作的模式,对外表现为一个整体。
特点
分配用户请求
故障转移
共享存储
结构:
agent 负载调度器
业务层 服务器池
存储 共享存储
1.垂直扩展
为同样的计算资源池加入更多资源,比如增加更多内存、磁盘或是虚拟cpu,来应对增加的应用负载
2.水平扩展
需要向计算平台加入更多的机器或设备,来处理增长的需求
向上拓展:对硬件的升级、更换、提升
缺点:
性能:提升是有限度的
弊端:
DNS没有对后端设备健康状态进行检测的能力,也就是说当WEB2设备出现故障之后,DNS还是根据自己缓存的记录把任务分配到WEB2上。
dns的缺陷:无法实现健康状态检查
缓存dns无法实现分配用户请求
DNS的解析缓存造成任务分配不均,导致单个服务器压力过大。
算法:
RR(Round-Robin):轮询
WRR(weightd-Round-Robin):权重(加权轮询)
使用agent代理机制,可以对后端设备的健康状态进行检测,有效提高的工作效率。
最基础的一个集群拓扑:
负载均衡集群(LBC Load Balance Cluster)
作用:减轻单台服务器压力
Load Balancing负载均衡,不同节点之间相互独立,不共享任何资源;通过一定算法将客户端的访问请求平分到群集的各个节点上,充分利用每个节点的资源。负载均衡扩展了网络设备和服务器带宽,增加吞吐量,加强网络数据处理能力。
实现:
软件:LVS RAC
硬件:F5
1.分担系统的负载
2.监控节点的运行情况
在一个网络下,可以搭建多个负载均衡集群来实现压力的分散:
区别:
硬件后期的维护,比较好,但是价格偏高
软件灵活性比较大,价格相对便宜
高可用集群(HA):保证服务器的不间断运行
为应用程序提供持久访问
出现故障自由切换
实现访问web1和web2无论哪一个,得到的结果都是一样的,不会有偏差
为了使用web1和web2内容一致:
使用的机制是:心跳检测
方法实现:
RS232串口线(心跳线)
每隔几秒钟发个数据包,看对方是否(存活)有回应,无回应,则判断目标出现问题
现有网卡
通过两个服务器之间的eth2端口进行检测(每隔一段时间发送数据包进行确认)
eth0是给用户访问使用的
服务器可用性要求标准:
99% | 2个9 | 1年 | 87.6小时(停机) |
99.9% | 3个9 | 1年 | 8.8小时(停机) |
99.99% | 4个9 | 1年 | 53分钟(停机) |
99.999% | 5个9 | 1年 | 3-5分钟(停机) |
如果心跳线出现故障:
两台主机都认为对方出现故障(死亡),都会抢着接替对方工作,处理响应客户的请求,抢夺共享的资源、数据。(这种现象称之为“脑裂”)
带来的后果:数据不完整、甚至是灾难级
在脑裂的情况下:
两台主机都认为对方已死亡,都会对共享存储服务器,读取、写入数据,这样同时对一个文件,进行写入,会造成数据丢失,完整性遭到破坏。
对服务造成影响:导致访问不可达
正常情况下web1在工作,web2不工作,在脑裂情况下,双方主机都认为对方已死亡,这时,web2服务器会抢夺web1的IP地址,给自己配置,在同一个网络下,由于web1和web2使用相同的IP,会造成网络故障,用户不能正常访问服务器。
解决方案:
预防为主:增加冗余心跳线
强制隔离:
两台服务器都连接电源交换机,当web2检测出web1出问题时,想要接替工作,又为了避免脑裂情况出现,这时,web2会发送一条指令给电源交换机,这时电源交换机会将连接web1的电源线断掉,这样就不会出现web1和web2冲突的现象
Stonish:爆头
Shoot in other node in the head
用工具实现:ipfail
为两个服务器设置参考IP(一般是网关IP)
当两台服务器认为对方出问题时,这时会ping 设置的参考IP,如果参考IP都ping不通,这时服务器会判定问题不是出在对方服务器,是自己内部出了问题,这时,会检测自己内部,并作出相应的动作
高可用集群软件:
高性能运算集群:
A包含10个子任务:a1 a2 a3 .......a10
每个子任务完成需要1小时
负载均衡集群:(单位时间内处理的子任务)
1台计算机完成任务需要10小时(处理10个子任务)
10台计算机完成任务需要10小时(总共处理100个子任务)
高性能运算集群:(缩短单个任务的执行时间,来提升效率)
1台计算机完成任务需要10小时(处理10个子任务)
10台计算机完成任务需要1小时(总共处理10个子任务)
高性能集群概念:
高性能计算集群就是将一个大的运算任务拆分,每一个节点计算其中一部分运算内容,最后再将每台计算机的处理结果汇总,得到我们想要的答案,这种运算方式就是高性能运算集群。
3PB的数据需要处理,这时AGENT会告诉客户端,如何分发到每个存储服务器为100G,之后,客户端会找AGENT2,询问AGENT2如何处理这些分发的数据,这时AGNET2会分别去到每个节点上运行
程序以运算处理数据,当数据被处理完之后,会将数据汇总,反馈给客户端,这个过程就是高性能运算集群。
负载调度器:
硬件:F5 citrix array
软件:
四层负载调度器 四层交换机
效率高
LVS Linux virtual server
七层负载调度器 七层交换机
mysql proxy
nginx
haproxy
高级特性
四层交换机:IP+端口
七层交换机:URL或主机名或页面内容包含的高级特性
区别:
1.触发条件不同
四层:工作在传输层,转发数据依靠的是三层的ip和四层的port
七层:工作在应用层。转发数据依靠URL或主机名
2.实现原理不同
四层负载调度器:TCP连接建立一次,客户端和RS主机之间
四层交换机工作原理:(转发作用)
七层负载调度器:TCP连接建立两次,客户端和负载调度器;负载调度器和RS主机
七层交换机工作原理:(起到代理服务器的角色)
七层交换机可以根据客户发起的访问请求,做出判断,给客户相应的内容反馈!
3.应用场景不同
四层负载调度器:TCP应用为主 OA ERP
七层负载调度器:以HTTP协议为主
4.安全性不同
四层负载调度器:转发***
七层负载调度器:拦截***
IPVS:钩子函数,内核机制,在请求没有到达目的地址之前,捕获并取得优先控制权的函数。
IPVSADM:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,谁是后端真实 的服务器
LVS概述:
首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
举例:
解释:当外网客户端,将请求提交到负载调读器的外网卡上,这时网卡会对请求进行处理,将请求提交到内核所提供的的INPUT函数模块上 ,这个函数正常情况下,会将客户申请访问本地80端口的应用请求转发给本地应用所安装HTTP服务器上面,但是我们真正的目的是,想让负载调度器将用户的请求转发到后端的web网站节点上面去,这时我们就需要IPVS,IPVS在这里扮演的是钩子函数角色(正常情况下,所接受的请求会被转发到本地的相应服务上面,但是IPVS所扮演的钩子函数角色会在请求被转发到本地服务上面之前,将数据请求包文强制拿过来,自己先查看,如果发现用户是访问集群节点的话,会通过eth2端口,因为IPVS会保存一定的策略,自己能够判断,然后会相应的把请求转交给web1,第二次给web2,依次轮询。。。)
这时,我们会有疑问,IPVS内核模块为什么会知道把请求分别转发给web1、web2,这是因为是有IPVSadm工具来实现的
CIP:client IP 客户端IP
DIP:director IP 负载调度器内网口IP
VIP:virtual IP 虚拟IP 集群IP
RIP:realserver IP 服务器节点IP 真实服务器IP
NAT:地址转换
注意:
1.最多支持10台左右RS
2.集群节点(director和RS)必须在同一个网络中
3.RS的网关必须位于客户端和RS之间
4.RS可以用任意的操作系统
5.RS网关必须设置为director
DR:路由模式
优点:
大大减轻了负载调度器的压力
可以支持更多的服务器节点RS
注意:
1.RS必须和director在一个网络
2.RS可以设置公网IP或私网IP(当负载调度器坏了的话,可以直接让客户访问通过公网IP访问集群)
3.负载调度器只负责入站请求
4.集群节点的网关不能使用director
TUN:隧道模式
优点:
不受地理位置限制
注意:
1.所有节点都要有公网IP,RS并且必须配置在RIP上
2.RS一定不能使用负载调度器作为默认网关
4.必须支持隧道功能
负载调度器算法:
静态算法:只考虑算法本身,不考虑服务器状态
rr (轮循):从1开始到n结束(N=RS个数)、无状态的的调度算法,不考虑服务器性能
wrr (加权轮循):按权重比例进行调度,权重越大,负责的请求越多(权重=优先级)
sh (源地址hash):源地址散列或源地址hash,实现会话绑定,保留之前建立的会话信息。将来自于同一个ip地址的请求发送给一个真实服务器。
dh (目标地址hash):将同一个目标地址的请求,发送给同一个服务器节点。提高缓存命中率
动态算法:既要考虑算法本身,也要考虑服务器状态(原理:通过hash表记录连接状态----active/inactive)
LC (最少连接):将新的连接请求分配给当前连接数最少的服务器。。。公式:活动连接*256+非活动连接
WLC(加权最少连接):最少连接的特殊模式。。。公式:(活动连接*256+非活动连接)/权重
SED(最短期望延迟):加权最少连接的特殊模式。。。。公式:(活动连接 +1)*256/权重
NQ (永不排队):sed的特殊模式,当某台真实服务器连接为0时,直接分配,不计算
LBLC(基于局部性的最少连接):dh的特殊模式,既要提高缓存命中率,又要考虑连接数量。先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
LBLCR(带复制的基于局部性的最少连接):LBLCR=LBLC+缓存共享机制
实验:基于NAT模式负载集群搭建
拓扑展示:
背景:需要五台虚拟机,图中IP为展示使用,以下操作,不一样
在共享存储服务器上面配置NFS
在RS1和RS2上面分别安装Apache服务
RS1的网页页面通过挂载NFS服务器上面的首页
mount -t nfs 192.168.115.179:/share /var/www/html/
挂载之后、启动Apache服务之后,失败
chcon -R -h -t httpd_sys_content_t /var/www/html/
之后就好了
RS1的网关指向负载调度器的内网口IP
route add default gw 192.168.115.175
RS2的网页由自己创建,两个服务首页不同,方便区分
RS2的网关指向负载调度器的内网口IP
负载调度器:(双网卡)
开启路由转发功能
并执行sysctl -p刷新
安装IPVSadm软件
检查ipvsadm是否安装成功
配置
外网客户端验证:(每刷新一次,页面会一次出现)
基于DR模式的负载集群:
原理拓扑展示:
实验拓扑展示:
图上IP地址仅供参考:
ARP工作原理:
arp_ignore:接收到其他主机的ARP请求后的响应级别
后面参数设置的如果是0:
只要本机配置有响应的IP地址就响应
后面参数设置的如果是1:
仅响应请求的目的地址配置在请求到达的网络接口上
arp_announce:设置ARP通告的级别
0:通告网络本机所有接口的任何地址信息
2:仅向目标网络通告网络与其相匹配的网络信息
配置:
负载调度器:
配置ifcfg0:1映射子端口,地址为集群IP(210)
优化环境配置:(/etc/sysctl.conf)
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
sysctl -p
查询IPVS是否安装:
grep -i "ip_vs" /boot/config-2.6.32-431.el6.x86_64
安装ipvsadm
rpm -ivh ipvsadm-1.26-2.el6.x86_64.rpm
设置增加负载调度器,默认使用轮询
ipvsadm -A -t 192.168.115.210:80 -s rr
设置使用DR模式
ipvsadm -a -t 192.168.115.210:80 -r 192.168.115.178:80 -g
ipvsadm -a -t 192.168.115.210:80 -r 192.168.115.173:80 -g
ipvsadm -L -n
service ipvsadm save
共享存储服务器:
RS1配置:
配置本地回环接口IP
优化环境变量(/etc/sysctl.conf)
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
安装Apache服务,并将NFS服务器上面的主页内容挂在过来
mount -t nfs 192.168.115.179:/share /var/www/html/
设置一条路由,凡是请求跟集群地址(115.210)相关的信息的时候,都会交给本地回环接口处理
route add -host 192.168.115.210 dev lo:0
RS2配置:
配置本地回环映射端口:
优化环境:
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
sysctl -p
安装Apache服务,手动创建一个主页,区分内容,以便达到实验效果
设置一条路由,凡是请求跟集群地址(115.210)相关的信息的时候,都会交给本地回环接口处理
route add -host 192.168.115.210 dev lo:0
客户端验证:直接访问集群的IP,进行访问,刷新会依次轮询显示页面
ipvsadm命令参数选项详细含义如下所示:
-A (--add-service) 在内核的虚拟服务器列表中添加一条新的虚拟IP记录。也就是增加一台新的虚拟服务器。虚拟IP也就是虚拟服务器的IP地址。
-E (--edit-service) 编辑内核虚拟服务器列表中的一条虚拟服务器记录
-D (--delete-service) 删除内核虚拟服务器列表中的一条虚拟服务器记录
-C (--clear) 清除内核虚拟服务器列表中的所有规则
-R (--restore) 恢复虚拟服务器规则
-S (--save) 保存虚拟服务器规则,输出为-R 选项可读的格式
-a (--add-server) 在内核虚拟服务器列表的一条记录里添加一条新的Real Server记录。也就是在一个虚拟服务器中增加一台新的Real Server
-e (--edit-server) 编辑一条虚拟服务器记录中的某条Real Server记录
-d (--delete-server) 删除一条虚拟服务器记录中的某条Real Server记录
-L|-l –list 显示内核中虚拟服务器列表
-Z (--zero) 虚拟服务器列表计数器清零(清空当前的连接数量等)
--set tcp tcpfin udp 设置连接超时值
-t 说明虚拟服务器提供的是tcp服务,此选项后面跟如下格式:
[virtual-service-address:port] or [real-server-ip:port]
-u 说明虚拟服务器提供的是udp服务,此选项后面跟如下格式:
[virtual-service-address:port] or [real-server-ip:port]
-f fwmark 说明是经过iptables标记过的服务类型
-s 此选项后面跟LVS使用的调度算法
有这样几个选项: rr|wrr|lc|wlc|lblc|lblcr|dh|sh
默认的调度算法是: wlc
-p [timeout] 在某个Real Server上持续的服务时间。也就是说来自同一个用户的多次请求,将被同一个Real Server处理。此参数一般用于有动态请求的操作中,timeout 的默认值为360 分钟。例如:-p 600,表示持续服务时间为600分钟。
-r 指定Real Server的IP地址,此选项后面跟如下格式:
[real-server-ip:port]
-g (--gatewaying) 指定LVS 的工作模式为直接路由模式(此模式是LVS 默认工作模式)
-i (-ipip) 指定LVS 的工作模式为隧道模式
-m (--masquerading) 指定LVS 的工作模式为NAT模式
-w (--weight) weight 指定Real Server的权值
-c (--connection) 显示LVS目前的连接信息 如:ipvsadm -L -c
-L --timeout 显示“tcp tcpfin udp”的timeout值,如:ipvsadm -L --timeout
-L --daemon 显示同步守护进程状态,例如:ipvsadm -L –daemon
-L --stats 显示统计信息,例如:ipvsadm -L –stats
-L --rate 显示速率信息,例如:ipvsadm -L --rate
-L --sort 对虚拟服务器和真实服务器排序输出,例如:ipvsadm -L --sort
注: 保存添加的虚拟ip记录和ipvsadm的规则可以使用service ipvsadm save,还可以用-S或--save。清除所有记录和规则除了使用-C,还以使用--clear。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。