集群:集群基础概念

来源:互联网 发布:国内编程语言排行 编辑:程序博客网 时间:2024/06/07 00:37

集群:集群基础概念


       如果用用LAMP,http搭建一个论坛,没有用长连接,是无状态的,同时有200个请求,其中有50个请求是动态的,150个请求是静态的。Apache工作在prefork模型,每一个进程占用2M内存,每一个动态的进程占用的内存是10M。

        资源占用计算:

        500M+150*2m = 800M

        随着用户的增加,增加到1000个用户,假如这个1000请求里面里面,有800个是静态请求(图片,css),200个动态请求(查询数据库)。动态查询数据库比较慢。

       资源占用计算:

        800*2+200*10 =3.6G

       假如1000个进程,2个CPU,每个CPU平均要处理500个请求。

 

研究显示,响应速度超过3秒,客户会流失60%。

面对这种硬件吃紧的情况,怎么办?

有2种方式:

(1)Scale On:  向上扩展

 换一个更强的服务器,换一个32G内存,8个CPU。



       换来的新的服务器是旧的服务器的4倍,是不是网站的性能会增加4倍呢?研究显示,不是线程增加的,因为CPU多了之后,会增加调度和资源请求等方面的消耗。此外,这种方式的缺点还有扩展的时候需要整体迁移。

(2)Scale out: 向外扩展

再加服务器,不需要整体迁移,只需要加入服务器。如果再加3台服务器,怎么让请求分配到这3台服务器呢?

DNS A记录,一个域名可以有N个记录:

www.magedu.com   IN A  172.16.100.1

www.magedu.com   IN A  172.16.100.2

www.magedu.com   IN A  172.16.100.3

…….

通过DNS的负载均衡能力。

这种方式有什么缺陷呢?

为了增加DNS的查询效率,会加缓存,这样一个请求查询,

会缓存的,然后第二个请求来,直接从缓存里取,会访问同一

台服务器,所以我们不能依赖这种机制实现负载均衡(LoadBalanceing:LB)。

那应该怎么办?

怎样让请求平均的分发到服务器上?

必须依赖一个前端组件,放一个特殊设备。

请求通过该设备(使用某种算法),将用户请求分发到各台服务器。

Round Robit: 轮询

不但要兼顾公平,还要兼顾效率。

WRR: 加权

如果服务器1的性能是服务器2的2倍,应该多分发请求给服务器


以上,叫负载均衡集群(LB)。

 

但上述集群还存在问题:

如果一个用户发一个图片到服务器1,下次改用户再访问该图片,但

访问的是服务器2,该用户能访问到该图片吗?

怎么实现用户在那个服务器发的帖子,访问那台服务器都能看

到?

独立出一个服务器,做MySQL数据库服务器,所有的web服务器都

从该MySQL服务器中取数据。把图片放到某个服务器硬盘上,帖子

中只保持帖子的连接。MySQL是不能保持图片的。

代码每台服务器上放一份,每次修改代码的时候,是不是所有

服务器都要重新发布一份?会很麻烦

可以把其中一台主机目录做成一个文件共享服务,

主服务器更新的时候,都会通知从服务器,从服务器

都会自动更新。

 

Rsync: 文件同步工具,在同步前,会检测哪些文件已经更新的,只同步更新的,而且支持远程复制。

那rsync多少时间更新一次?

在主服务器上,如果有更新,会通过inotify机制,通知从服务器,自动更新。

文件是否发生改变,是内核管理。

 


随着用户量的增加,负载均衡服务器会成为瓶颈,

该怎么办?

功能切分,每一个小功能做一个集群。

负载均衡服务器主服务器挂了,会启用备份的。

怎么知道服务器挂了?切换时间是多长?

主服务器会把自己的心跳信息每个一秒钟外发一次,

如果从服务器没有收到主服务器的心跳信息,则取而代之。

这种集群叫高可用集群(HA: High Availability)

 

怎么实现Web服务器集群的高可用呢?

负载均衡定时对Web服务器进行health check:健康检查

连续检查3次,如果不正常,剔除;

但继续检查,如果发现主机重新上线,重新加回。

 

 

负载均衡集群和高可用集群的异同点?

负载均衡是为了提高并发处理能力为着眼点;

高可用集群是为了提高服务可用性为着眼点的。

可用性: 在线时间/(在线时间+故障时间)

99%相当高了,但是还有3天不在线,如果是淘宝

是不可接受的。

99.9%,1年只有0.3天不在线;

99.99%, 1年只有0.003天不在线。

如果做高可用集群,是不是备用的服务器就处在空闲了?

加入公司恰好好提高web和mail服务,就要4

台服务器,这样就造成一般的资源浪费。

再提供一个IP地址,如果web或者mail其中一个发送故障,

把其中一个服务的IP移到另外一个服务器。

 

相当于一台服务器启用了3个服务。假如由加了一个服务pop3,

如果其中一个服务挂了,可以往优先级高的服务器

迁移。

服务器之间的心跳信息通过多播或者组播传递。

推选一个DC(协调员),负载处理协调事务,如果DC挂了,再推选

一个新DC.

83分钟

DAS: Direct Attached Storage, 直接附加存储

NAS: Network Attached Storage,网络附加存储

怎么避免2个不同的主机上的进程修改同一个

NAS上的文件不出错呢?

NAS会代为持有锁,如果有一个主机的一个线程正在写NAS的

某个文件,此时还有另一台主机发起写请求,NAS会阻塞后者

UltraSCSI: 320Mbps/8=40M

 

DAS:  100M 以太网带宽有12.5M

    1000M以太网有1000/8=125M

SAS: 6Gbps/8

 

Split-brain: 脑裂,某一台主机假死,但另外一台

主机以为前者真死了,把IP夺过来了,开始往NAS

写数据库,这是2台主机都往NAS写数据。

解决的方法是是第二台主机在夺IP的同时,

通过电源交换机关闭第一台主机,这叫

STONITH(Shoot the other node in the head)。

 

HP(HPC)

  High Performance

  向量机

  并行处理集群

     分布式文件系统

     将大任务切割为小任务,分别进行处理的机制

     如Hadoop

 

 



0 0
原创粉丝点击