集群介绍:
集群的分类:
高可用集群 HA high availability
避免单节点故障
软件:keepalived
负载均衡集群 LB load balance
提高负载,提高并发量
软件:nginx反向代理 lvs
硬件负载均衡器 F5(BigIP)和redware
HPC高性能运算集群
分布式存储集群
极大的提升存储容量,提供数据高可用,保证数据安全
软件:ceph
传统的Web访问模型
请求步骤:
- 用户发起请求
- 服务器接受请求
- 服务器处理请求(压力最大)
- 服务器响应请求
缺点:
单点故障;
单台服务器资源有限(客户端则是无限的);
单台服务器处理耗时长(客户等待时间过长);
传统模型优化——单点故障解决方案
- 优化方案一:部署一台备份服务器,宕机直接切换
该方案可以有效解决服务器故障导致的单点故障,但且服务器利用率低、成本高,切换不及时,且无法解决服务器业务压力问题。 - 优化方案二:部署多台服务器,根据DNS的轮询解析机制去实现用户分发
优势是用户处理速度得到了提升,但是当其中一台故障,dns并不会知道它故障了,依然将请求分给这个服务器,导致一部分用户访问不了业务。
完美的解决方案请往下看 ↓:
并行处理解决方案
- DNS轮询解析方案
- 多机阵列——集群模式
图中,前面两台服务器负责接受请求和分发请求,它自己并不处理请求,将请求分发给后面的业务服务器来处理。业务服务器处理完请求后,将请求发还给分发器,再由分发器将请求发送给客户,因此分发器还承担了响应请求的任务。
由此可见之前传统模型中服务器端需要承担的服务器接收请求和响应请求都交给分发器处理了,而业务压力最大的处理请求则交给业务服务器完成。
分发器和dns虽然都是进行了分发的工作,但不同点在于分发器是自己部署的服务器,而DNS都是使用的运营商的,因此可以调整分发器的逻辑判断规则。
重点
大家知道Nginx作为反向代理服务器可以实现负载均衡,同时也可以作为静态文件服务器,它的特点就是并发支持大,单机可同时支持3万并发,现在很多网站都把Nginx作为网关入口来统一调度分配后端资源。但是 如果Nginx宕机了,就会导致整个后台服务无法使用;或者当并发量真的非常大时,达到十万级别时,一台Nginx还是有极限的,所以这个时候就需要针对Nginx进行 主从备份 保证服务高可用、集群来分担并发压力。目前,Nginx在这两块主要有以下几种解决方案,我先给大家介绍集群:
主从备份在这里
集群
终于说到集群了
计算机集群简称集群,是一种计算机系统, 它通过一组松散集成的计算机软件或硬件连接起来高度紧密地协作完成计算工作。在某种意义上,他们可以被看作是一台计算机。 (百度解释)
将多个物理机器组成一个逻辑计算机,实现负载均衡和容错。
组成要素:
- VIP: 给分发器的一个虚IP
- 分发器:nginx
- 数据服务器:web服务器
Nginx集群原理
在Nginx集群中Nginx扮演的角色是:分发器。
任务:接受请求、分发请求、响应请求。
功能模块:
- ngx_http_upstream_module:基于应用层(七层)分发模块
- ngx_stream_core_module:基于传输层(四层)分发模块(1.9开始提供该功能)
Nginx集群的实质:
Nginx集群其实是:虚拟主机(多个)+反向代理+upstream分发模块组成的。
虚拟主机:负责接受和响应请求。
反向代理:带领用户去数据服务器拿数据。
upstream:告诉nginx去哪个数据服务器拿数据。
如果有多台NGINX想实现负载均衡的话,
- 每台nginx都有公网地址,在域名处设置同个域名多个指向,最简单实现轮洵。但故障切负会慢一点。
- 一台公网nginx通过upstream功能,轮洵、ip、url多方式分发到内网多台nginx。但公网的nginx如果down机的话,内网全段。
(详情看↑图二) - 一对公网nginx加三个公网ip,通过keepalive实现高可用,再upstream到内网(就是我们上面讲的主从备份)。
一般来说,上面1、2、3种方法基本可以解决,建议用2或3;
如果并发量真的巨大的话,一般就要借助硬件F5等设备做负载均衡,跟DNS、CDN等服务商合作做域名解析转发、缓存配置,这也是目前大多数大厂的架构配置。
数据走向(请求处理流程)
- 虚拟主机接受用户请求
- 虚拟主机去找反向代理(问反向代理去哪拿数据)
- 反向代理让去找upstream
- upstream告诉一个数据服务器IP
- Nginx去找数据服务器,并发起用户的请求
- 数据服务器接受请求并处理请求
- 数据服务器响应请求给Nginx
- Nginx响应请求给用户
集群 原文参考 ←有如何配置