LVS负载均衡群集NAT模式
一、集群与分布式
1.1、集群的含义
- cluster,集群,群集,为解决某个特定问题将多台计算机组合起来形成的单个系统。
- 由多台主机构成,但对外只表现为一个整体
1.2、lvs模型
1.3、系统性能扩展方式
- scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务
- scale Out:水平扩展,增加设备,并行运行多个服务调度分配问题
单台计算机的性能是有上限的,不可能无限制地垂直扩展,多核cpu意味着即使是单台计算机也可以并行的。那么,为什么不一开始就并行化技术
1.4、群集的三种类型
- 负载均衡群集
- 高可用群集
- 高性能运算群集
1.4.1、负载均衡群集
LB:负载均衡多个主机组成,每个主机只承担一部分访问请求
- 提高应用系统的响应能力,尽可能处理更多的访问请求,减少延迟目标,获得高并发,高负载的整体性能
- LB的负载分配依赖于主节点的分流算法
1.4.2、高可用群集
HA;高可用,避免 SPOF
- 提高应用系统的可靠性,尽可能地减少中断时间为目标,确保服务的连续性,达到高可用的容错效果
- HA的工作方式包括双工和主从两种模式
1.4.3、高性能运算群集
高性能运算群集
HPC:高性能
- 提高应用系统的cpu运算速度,扩展硬件资源和分析能力为目标,获得相当于大型,超级计算机的高性能运算能力
- 高性能依赖于“分布式”运算、“并行运算”,通过专用硬件和软件将多个服务器的cpu、内存等资源整合在一起,实现只有大型,超级计算机才具备的计算能力
1.5、LVS的负载调度算法
1.5.1、轮询
- 将收到的访问请求按照顺序轮流分配给群集中的各个节点
- 均等的对待每台服务器,而不管服务器实际的连接数和系统负载
1.5.2、加权轮询
- 根据调度器设置的权重值来分发请求
- 权重值高的节点优先获得任务并且分配的请求越多
- 这样可以保证性能高的节点承担更多请求
1.5.3、最少连接
- 根据真实服务器已建立的连接数进行分配
- 将收到的访问请求优先分配给连接最少得节点
- 如果所有的服务器节点性能相近,采用这种方式可以更好地负载均衡
1.5.4、加权最少连接
- 在服务器节点的性能差异较大的情况下,调度器可以根据节点服务器负载自动调整权重
- 权重较高的节点将承担更大比例的活动连接负载
1.5.5、ip_hash
- 根据请求来源的IP地址进行hash计算,得到后端服务器
- 这样来自同一个ip的请求总是会落到同一台服务器上处理,以至于可以将请求上下文信息存储在这个服务器上
1.5.6、url_hash
- 按访问URl的hash结果来分配请求,使每个url定向到同一个后端服务器
- 后端服务器为缓存时比较有效
1.5.7、 fail
- 采用的不是内建负载均衡使用的轮换的均衡算法
- 而是可以根据页面大小、加载时间长短智能的进行负载均衡
- 也就是根据后端服务器时间来分配用户请求,响应时间短的优先分配
1.6、分布式系统
- 分布式存储: 将数据分散存储在多台独立的设备上 。Ceph,GlusterFS,FastDFS,MogileFS
- 分布式计算: 将该应用分解成许多小的部分,分配给多台计算机进行处理。 hadoop,Spark
- 分布式常见应用
- 分布式应用-服务按照功能拆分,使用微服务(单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值服务)
- 分布式静态资源–静态资源放在不同的存储集群上
- 分布式数据和存储–使用key-value缓存系统
- 分布式计算–对特殊业务使用分布式计算,比如Hadoop集群
1.7、集群和分布式
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
-
集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的。
-
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务。
1.8、集群设计原则
1.可扩展性—集群的横向扩展能力
2.可用性—无故障时间 (SLA service level agreement)
3.性能—访问响应时间
4.容量—单位时间内的最大并发吞吐量(C10K 并发问题)
1.9、集群设计实现
1.9.1、基础设施层面
-
提升硬件资源性能—从入口防火墙到后端 web server 均使用更高性能的硬件资源
-
多域名—DNS 轮询A记录解析
-
多入口—将A记录解析到多个公网IP入口
-
多机房—同城+异地容灾
-
CDN(Content Delivery Network)—基于GSLB(Global Server Load Balance)实现全局负载均衡,如:DNS
1.9.2、业务层面
-
分层:安全层、负载层、静态层、动态层、(缓存层、存储层)持久化与非持久化
-
分割:基于功能分割大业务为小服务
-
分布式:对于特殊场景的业务,使用分布式计算
1.10、负载均衡群集架构
1.第一层,负载调度器(Load Balancer或Director)
2.第二层,服务器池(Server Pool)
3.第三层,共享存储(Share Storage)
1.11、 LB Cluster 负载均衡集群
1.11.1、 按实现方式划分
- 硬件
F5 Big-IP(F5服务器负载均衡模块)
Citrix Netscaler
A10 A10
- 软件
lvs | Linux Virtual Server,阿里四层 SLB (Server Load Balance)使用 |
---|---|
nginx | 支持七层调度,阿里七层SLB使用 Tengine |
haproxy | 支持七层调度 |
ats | Apache Traffic Server,yahoo捐助给apache |
perlbal | Perl 编写 |
1.11.2、基于工作的协议层次划分
- 传输层(通用):DNAT 和 DPORT
LVS:
nginx:stream
haproxy:mode tcp - 应用层(专用):针对特定协议,常称为 proxy server
http:nginx, httpd, haproxy(mode http), …
fastcgi:nginx, httpd, …
mysql:mysql-proxy, mycat…
1.11.3、负载均衡的会话保持
1.session sticky:同一用户调度固定服务器
Source IP:LVS sh算法(对某一特定服务而言)
Cookie
2.session replication:每台服务器拥有全部session(复制)
session multicast cluster
3.session server:专门的session服务器(server)
Memcached,Redis
1.12、HA 高可用集群实现
keepalived:vrrp协议
Ais:应用接口规范
heartbeat
cman+rgmanager(RHCS)
coresync_pacemaker
二、 Linux Virtual Server简介
2.1、LVS介绍
LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名正明)