一、负载均衡
1、当请求来临时我们首先的解决方案是做资源优化。
2、当我们优化到极致的时候,我们就只能换更好性能的服务器来支撑访问。
3、当我们单台主机不足以支撑用户请求的时候,如果这些用户请求是可以被平行隔离的彼此之间没什么关系,各自都是独立的请求,这种情况我们可以将其分散开来,这样我们就可以多加几台主机进行扩展。我们替换更好性能的主机叫做向上扩展,而我们增加主机的扩展方式叫做向外扩展。即用更多的主机来处理这种可分离的小请求。向外扩展的这种解决方案我们就称之为cluster,即计算机集群。此处的集群我们称之为负载均衡集群。即load balancing cluster。
4、分散用户请求的问题解决了,但是还有一个问题就是有些应用是需要去追踪用户状态信息的。
5、对于我们web负载均衡集群来讲,集群中各节点需要用到共享存储,需要用到共同的数据库。但是对于我们记录客户端访问记录的服务端的session要怎么同步呢?即我们假如第一次访问访问到了集群中服务器1,服务器1记录了客户端的session,第二次访问到了集群中服务器2,这时候服务器2就没有session,这时候我们要怎么办呢?我们有三种方式
a、第一种方式,我们作为用户绑定,即只要来自于同一用户的访问始终发给同一台服务器。那么怎么去识别一个用户他的前前后后的请求是来自于同一个用户的呢?有两种方案
(1)、根据网络层的识别,即IP地址,只要来源请求是同一IP我就认为是同一用户
(2)、根据cookie,只要是明文的我们就可以看见里面的cookie,只要cookie是一个,那么我们就认为是同一个客户端。方案一是不怎么合理的,因为有可能是做了snat转换的。因此方案二才是最有效的。
b、第二种方式,session复制集群,即每一个服务器的session都传给集群中的其它主机,这时候我们就不用绑定服务器身份了,但是我们这儿就存在一个问题,假如每一个服务器上都有十万个用户访问,那么每一个服务器上就要保存十万个session,那么得要多大的空间呢?
每一台服务器生成的session不保存在自己的内存中而保存在一个内存服务器中,之所以要保存在内存存储服务器中是为了保证性能。所以每一台服务器上的进程需要访问或更新会话时都向这台内存存储服务器发送相应的请求,这个内存存储服务器就叫做session server。
c、第三种方式,假如共享存储,数据库服务器,session server单点故障的话要怎么办呢?所以我们需要做冗余
6、我们负载均衡前端需要有一个调度器,所有客户端的请求都交给他,然后由他将请求交给后面的集群中的节点。那么我们调度器要怎么调呢?他需要根据我们调度器的调度算法决定下一次要调到哪个服务器。
7、可以看到我们的调度器是最关键的主机,如果他挂了那么后面的集群也将不可用,因此调度器是非常重要的,所以我们需要做冗余。因此我们可以做双击热备,我们的ip地址在哪个主机上哪个主机就是活动主机,而备机就时刻查看着活动主机,并且我们的活动主机为了不让别人来抢自己上面的虚拟IP他会时候向别人发送信息说我还活着,这个就叫心跳信息,即告诉别人劳资心还跳着不要来抢,如果他的心跳发不到备节点,当几个心跳周期都没有发送的时候我们的备主机就会把虚拟IP抢到自己身上。
8、我们作为调度器来讲我们有两个组件,首先是IP地址,然后是服务,即调度服务。一个主机故障时把其所提供的服务转移到其它主机的操作方式我们称之为故障转移,也叫失效转移,即failover。而恢复过后转移回来的动作我们称之为failback。
二、Linux Cluster
1、Cluster:计算机集合,为解决某个特定问题组合起来形成的单个系统
2、Linux Cluster类型
a、LB:Load Balancing,负载均衡
b、HA:High Availiablity,高可用
A=MTBF/(MTBF+MTTR)
(0,1):90%,95%,99.5%,99.9%,99.99%,99.999%,99.9999%
c、HP:High Performance,高性能
超算主机集群排名网站:www.top500.org
d、分布式系统:
分布式存储
分布式计算
3、系统扩展方式
a、Scale UP:向上扩展
b、Scale Out:向外扩展
Cluster
三、LB Cluster
1、LB Cluster的实现
a、硬件:
F5 Big-IP
Citrix Netscaler
A10 A10
b、软件
lvs:Linux Virtual Server
nginx
haproxy
ats:apache traffic server
perlbal
pound
c、基于工作的协议层次划分
(1)、传输层(通用):(DPORT)
1)、lvs:
2)、nginx:(stream)
3)、haproxy:(mode tcp)
(2)、应用层(专用):(自定义的请求模型分类)
1)、proxy server:
http:nginx,httpd,haproxy(mode http),。。。
fastcgi:nginx,httpd,...
mysql:mysql-proxy,ProxySQL...
....
(3)、站点指标
PV:Page View
UV:Unique Vistor
IP:
d、会话保持
(1)、session sticky
Source IP
Cookie
(2)、session replication
session cluster
(3)、session server