企业群集应用概述
群集的含义
- Cluster,集群、群集
- 由多台主机构成,但对外只表现为一个整体
问题
互联网应用中,随着站点对硬件性能、相应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心,而且有可能发生单点故障
解决方法
- 使用价格昂贵的小型机、大型机
- 使用普通服务器构建服务群集
企业群集分类
根据群集所针对的目标差异,可以分为三类:
- 负载均衡群集
- 高可用群集
- 高性能运算群集
负载均衡群集(LB)
- 提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能
- LB的负载分配依赖于主节点的分流算法,分流也就是分发流量
- 算法除了分流还有其他的比如轮询、加权轮询和最小连接等
目的:分压,对内提高服务器性能;对外提高用户体验感
LVS+keepalived、nginx+keepalived
高可用群集
- 提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果
- HA的工作方式包括双工和主从两种模式
冗余备份,解决单点故障——keepalived
高性能运算群集
- 提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
- 高性能依赖于“分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力
读写分离
负载均衡群集架构
负载均衡群集是目前企业用的最多的群集类型
结构
硬件防火墙的IP默认是无法ping通的
第一层:负载调度器(代理)
第二层:服务器池(nginx upstream 后端各个服务器的位置,即ip地址)
第三层:共享存储(NFS、GFS)
如图所示:
1.负载接受客户请求、请求分发给资源池
2.服务器池等待调度器分配任务
3.共享存储给与前端负载调度/服务器池提供存储空间
在企业中:
1.属于企业架构中前端的部分
2.负载调度器:对外,由调度器服务器提供一个VIP作为统一入口,对内,按照分流算法分发流量的请求给服务器池
3.服务器池接收、响应/处理负载调度的任务
4.共享存储为服务器提供存储空间
工作模式
群集的负载调度技术有三种工作模式:
- 地址转换(NAT、SNAT、DNAT)
- IP隧道(TUN)
- 直接路由
1、NAT模式(地址转换)
- 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
- 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式
2、TUN模式(IP隧道)
- 采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的Internet连接直接回应客户机,而不再经过负载调度器
- 服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信
- VPN实现了两重加密,隧道加密和数据加密,在私网和公网都会被应用
- IP隧道的所有服务器都在公网模式下
3、DR模式(直接路由)
- 采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
- 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
LVS虚拟服务器
由来
- 针对Linux内核的负载均衡解决方案
- 1998年5月,由我国章文嵩博士创建
- 官方网站:http://www.linuxvirtualserver.org/
现在LVS已经是Linux内核中的一部分了,在CentOS7系统中,可以手动加载ip_vs模块,并查看当前系统中ip_vs模块的版本信息
modprobe ip_vs
cat /proc/net/ip_vs #确认内核对LVS的支持
LVS负载调度算法
- 轮询(RR)
将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器),均等地对待每一台服务器,而不会因为服务器实际的连接数和系统负载而改变 - 加权轮询(WRR)
根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多。保证性能强的服务器承担更多的访问流量 - 最少连接(LC)
根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点 - 加权最少连接(WLC)
在服务器节点的性能差异较大时,可以为真实服务器自动调整权重,性能较高的节点将承担更大比例的活动连接负载
ipvsadm工具
概述
从2.4版本开始,Linux内核默认支持LVS,要使用LVS只需要安装一个LVS的管理工具:ipvsadm。
LVS的结构主要分为两部分:
- 工作在内核空间的IPVS模块。LVS的能力实际上都是由IPVS模块实现的
- 工作在用户空间的ipvsadm管理工具。其作用是向用户提供一个命令接口,用于将配置的虚拟服务、真实服务等传给IPVS模块