目录
群集
群集技术介绍
群集技术,就像冗余部件可以使你免于硬件故障一样,群集技术则可以使你免于整个系统的瘫痪以及操作系统和应用层次的故障。一台服务器集群包含多台拥有共享数据存储空间的服务器,各服务器之间通过内部局域网进行互相连接;当其中一台服务器发生故障时,它所运行的应用程序将被与之相连的服务器自动接管;在大多数情况下,集群中所有的计算机都拥有一个共同的名称,集群系统内任意一台服务器都可被所有的网络用户所使用。
群集系统是一种由一组互连的整机构成的并行或分布系统,可作为统一的计算资源使用。服务器群集技术使用多台服务器组成服务器集合,可以提供相当高性能的不停机服务。
在这个结构中,每台服务器都分担着一部分计算任务,由于集合了多台服务器的性能,整体的计算实力被增加了。与此同时,每台服务器还承担一些容错任务,当其中一台服务器出现故障时, 系统会在软件的支持下将这台服务器从系统中隔离出去,通过各服务器之间的负载转嫁机制完成新的负载分担,同时向系统管理人员发出警报。
再者,在某个应用软件的峰值处理期间内,对该应用的需求会变得过高,那么使用简单的操作命令就可以把同一节点的应用包转移到其他节点从而减轻该节点的工作负荷,来满足已增加的需求。
群集系统就是通过功能整合和故障过渡实现了系统的高可用性和可靠性。服务器群集技术提供了高度的可用性、伸缩性与易管理性:
高度的可用性:群集被设计具有避免单点故障发生的能力。应用程序能够跨计算机进行分配, 以实现并行运算与故障恢复,并提供更高的可用性。
可伸缩性:加入更多的处理器或计算机提高群集的计算能力。当现有服务器能力有限时,可以通过增加 CPU、内存、甚至一台或几台服务器来扩展系统的能力。在服务器群集技术出现之前,用户通过增加 CPU、内存来进行扩展,但是 CPU、内存的扩展只能在一台服务器上进行,因此扩展是有极限的。而服务器群集技术可以通过在现有系统上增加服务器来进行扩展,增加的服务器将与原有的服务器紧密地集成在一起,为客户端提供高性能的应用服务。
易管理性:群集以单一系统映射的形式来面向最终用户、应用程序及网络,同时,也为管理员提供单一的控制点,而这种单一控制点则可能是远程的。
服务器群集技术的实现可以有几种不同的方式,考虑到用户的需求,大体可以分为以高可用性为主要目的的高可用性方案,和以提高性能为主要目的、同时亦可以提供高可用性的方案。这种划分同时也反映出群集技术在PC Server上发展的两个阶段,既高可用性的两节点群集和提高性能的多节点群集。在今后PC Server群集发展的计划中将要实现更多节点的具有更高扩展能力的群集方案,这样在提供高可用性和高性能的同时,还可以通过节点数目的扩展,更加有效的保护客户的投资。
群集技术类型
在集群的类型通常有3种:
LB:Load Banlancing(负载)
HA:High Availability(高可用)
HP:High Performace(高性能)
LB负载均衡群集:负载均衡集群中有一个分发器或者叫调度器,我们将其称之为Director,它处在多台服务器的上面,分发器根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来响应客户端发送的请求,从而解决高并发的问题。在扩展中可非常容易的使用scale out扩展,从而实现集群的伸缩性,在业内常见开源解决方案有lvs、haprox、nginx、ats;
总结:以提高应用系统的响应能力,尽可能处理更多的访问请求,减少延迟为目标,获得高并发,高负载的整体性能。
HA高可用群集:又可以称为故障冗余群集,故障转移群集。高可用集群是服务的可用性比较高, 当我们某台服务器死机后不会造成我们的服务不可用。其工作模式则是将一个具有故障的服务转交给一个正常工作的服务器,从而达到服务不会中断。一般来说我们集群中工作在前端(分发器)的服务器都会对我们的后端服务器做一个健康检查,如果发现我们服务器当机就不会对其在做转发, 衡量标准:可用性=在线时间/(在线时间+故障处理时间),就是通常我们说的可用性99%、99.9%、99.99%等等,在业内常见开源解决方案有 heartbeat、keepalived等等;
总结:以提高应用系统的可靠性,尽可能地减少中断时为目标,确保服务的连续性,达到高可用的容错效果。
HP:高性能的集群。是当某一个任务量非常大的时候,我们做一个集群共同来完成这一个任务。这种处理方式我们称为并行处理集群,并行处理集群是将大任务划分为小任务,分别进行处理的机制,常常用于大数据分析,海量资源整合,目前比较出名的就是Hadoop。
总结:以提高应用系统的CPU运算速度,扩展硬件资源和分析能力为目标,获得相当于大型,超级计算机的高性能运算。
集群的分层结构
第一层:负载调度器(load balancer或director),访问群集的唯一入口,对外使用所有服务器共有的VIP(virtual ip)地址,也称为群集IP地址。
第二层:节点层(real server pool),服务器池群集所提供的应用服务由服务器池承担,其中的每个节点具有独立的RIP(real IP 真实地址),只处理调度服务器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。
第三层:共享存储层或数据库层,共享存储为服务器池中的所有节点提供稳定,一致的文件存取服务,确保整个群集的统一性。
LVS群集
1、概述
Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。我国章文嵩博士在1998年五月创建,默认编译为ip_vs内核模块,而在linux kernel的2.6版本之后kernel是直接支持ipvs的
优势:LVS承受负载能力高、稳定、占用服务器资源小
缺点:适配场景、配置较麻烦、不支持节点的健康检查机制;
官网:http://www.linuxvirtualserver.org/zh/lvs1.html
2、LVS详解:
LVS内核模型:
调度条件:基于IP(效率最高)、基于端口、基于内容
3、LVS的三种工作模式
1).地址转换:NAT模式,负载调度器作为所有服务器的网关,服务器节点使用私有IP地址(隐蔽性高),与负载调度器位于同一个物理网络,安全性高于其他两种方式。但是负载调度器是整个架构的瓶颈;
2).IP隧道:TUN模式,采用开放是的网络结构,负载调度器仅作为客户机的访问入口,个节点通过各自的Internet连接回应客户机,而不再经过负载调度器。服务器节点分散在互联网的不同位置,具有独立的公网IP地址,通过专用的IP隧道与负载调度器互通。安全性低,性能高;
3).直接路由:DR模式,采用半开放式的网络结构,与TUN模式结构类似,但各节点并不是分散在各地,而是与调度服务器位于同一个物理网络。负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。性能最高,安全性较高;
4、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:无需队列。如果有台realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机有空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,采用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。
5).基于局部性的最少链接LBLC:基于“局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用去Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选
出一个可用的服务器,将请求发送到该服务器。
6).带复制的基于局部性最少连接LBLCR:“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
LVS-NAT模式工作原理
1、工作原理:
(第 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原理。
2、NAT模式优缺点:
1).LB负载均衡调度器有比较大的瓶颈。
2).只需要在LB上配置一个公网IP地址就可以了。
3).LB之间暴露在公网中,安全性低。
4).每台内部的节点服务器的网关地址必须是调度器LB的内网地址。
5).NAT模式支持对IP地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。
部署LVS-NAT模式群集
例如就按这个拓补图来部署
配置LVS服务器
3-1、配置双网卡的ip地址
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@localhost network-scripts]# vim ifcfg-ens33
[root@localhost network-scripts]# vim ifcfg-ens37
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500(vm3)
inet 192.168.6.10 netmask 255.255.255.0 broadcast 192.168.6.255
ens37: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500(vm5)
inet 20.0.0.1 netmask 255.255.255.0 broadcast 20.0.0.255
3-2、加载ip_vs内核模块
[root@localhost network-scripts]# modprobe ip_vs
[root@localhost network-scripts]# lsmod | grep ip_vs
ip_vs 141092 0
nf_conntrack 111302 8 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c 12644 2 xfs,ip_vs
3-3、启用内核包转发
在/etc/sysctl.conf中添加包转发选项
[root@localhost network-scripts]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
重新加载选项
[root@localhost network-scripts]# sysctl -p
net.ipv4.ip_forward = 1
3-4、安装 ipvsadm管理器
[root@localhost network-scripts]# mount /dev/cdrom /media/
[root@localhost network-scripts]# rm -rf /etc/yum.repos.d/*
[root@localhost network-scripts]# vim /etc/yum.repos.d/yum.repo
[yum]
baseurl=file:///media
enabled=1
gpgcheck=0
[root@localhost network-scripts]# yum -y install ipvsadm
4、配置 LVS 调度策略
4-1、创建群集ip与端口号
[root@localhost network-scripts]# ipvsadm -A -t 20.0.0.1:80 -s rr
参数选项说明:
-A 创建群集
-C 清除策略
-D 删除群集
-t 群集ip与端口号,群集IP是群集提供给客户端访问,用于接收客户端访问请求的IP地址。
-s 调度算法
轮询(round robin)rr :给每个节点服务器发送一个访问请求,不判断节点服务器的资源占用状态。
加权轮询(weighted round robin)wrr :根据节点服务器的硬件配置和使用率,判断优先给谁访问请求。
最少连接数(least connections)lc :根据节点服务器的连接数,选择连接数最少的分配访问请求。
加权最少连接数(weighted least connections)wlc :根据节点服务器的硬件配置和使用率,和最少连接数分配访问请求。
4-2、添加节点服务器
[root@localhost network-scripts]# ipvsadm -a -t 20.0.0.1:80 -r 192.168.6.20:80 -m -w 1
[root@localhost network-scripts]# ipvsadm -a -t 20.0.0.1:80 -r 192.168.6.30:80 -m -w 1
参数说明:
-a 添加节点服务器
-d 删除节点服务器
-r 节点服务器ip与端口号
-m NAT模式
-g DR模式
-i TUN模式
-w 权重,优先级,优先级相同时,按照列表顺序发送访问请求,优先级高的先获得访问请求。
4-3、保存规则列表
[root@localhost network-scripts]# ipvsadm-save
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.6.20:http -m -w 1
-a -t localhost.localdomain:http -r 192.168.6.30:http -m -w 1
4-4、查看规则列表
[root@localhost network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.6.10:80 rr
-> 192.168.6.20:80 Masq 1 0 0
-> 192.168.6.30:80 Masq 1 0 0
4-5、查看调度列表
[root@localhost network-scripts]# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
4-6、删除节点服务器
[root@localhost network-scripts]# ipvsadm -d -t 192.168.6.10:80 -r 192.168.6.20:80
[root@localhost network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.6.10:80 rr
-> 192.168.6.30:80 Masq 1 0 0
注:删除节点时,不需要输入后面的工作类型和权重。
4-7、删除群集
[root@localhost network-scripts]# ipvsadm -D -t 192.168.6.10:80
[root@localhost network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
注:删除群集时,只需要指定群集 IP 和端口号,不需要输入算法。
5、配置节点服务
分别安装配置httpd-1和httpd-2服务器在配置文件中添加keepalive off选项
[root@localhost network-scripts]# ipvsadm -A -t 192.168.6.10:80 -s rr
[root@localhost network-scripts]# ipvsadm -a -t 192.168.6.10:80 -r 192.168.6.20:80 -m -w 1
[root@localhost network-scripts]# ipvsadm -a -t 192.168.6.10:80 -r 192.168.6.30:80 -m -w 1
[root@localhost network-scripts]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.6.10:80 rr
-> 192.168.6.20:80 Masq 1 0 0
-> 192.168.6.30:80 Masq 1 0 0
配置完lvs后不要重启,否则添加的节点服务器就会掉。导致不能访问
systemctl stop ipvsadm
systemctl start ipvsadm
配置节点服务器(两台)(vm3)——请指定网关地址
vim /etc/*/*/*ens33
GATEWAY=192.168.6.10
GATEWAY=192.168.6.20
systemctl restart network
ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
vm2 inet 192.168.6.20 netmask 255.255.255.0 broadcast 192.168.6.255
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
vm2 inet 192.168.6.30 netmask 255.255.255.0 broadcast 192.168.6.255
mount /dev/cdrom /media
rm -rf /etc/yum.repos.d/*
vim /etc/yum.repos.d/yum.repo
[yum]
name=yum
baseurl=file:///media
enabled=1
gpgcheck=0
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
添加:
keepalive off
[root@localhost ~]# vim /var/www/html/index.html
httpd1 httpd2
[root@localhost ~]# systemctl restart httpd
6、客户端访问测试
[root@www 桌面]# ifconfig (vm5)——请指定网关地址
按F5刷新页面
7、配置NFS共享目录
配置IP地址:192.168.6.1
[root@localhost ~]# mkdir /data
[root@localhost ~]# vim /etc/exports
data *(rw)
[root@localhost ~]# systemctl restart nfs
8、在httpd-1和httpd-2服务器上挂载共享目录
[root@localhost ~]# mount 192.168.6.1:/data /var/www/html
9、重新创建测试页面
在nfs服务器上创建测试页:
[root@localhost ~]# cd /data
[root@localhost data]# ls
[root@localhost data]# vim index.html
10、客户端测试
按F5刷新后看到的是相同的页面,我们可以通过 LVS 的调度表查看转发信息