1. 讲在集群前
流量相关:
- ①、PV:PV(page view)即页面浏览量或点击量,是衡量一个网站或网页用户访问量。具体的说,PV值就是所有访问者在24小时(0点到24点)内看了某个网站多少个页面或某个网页多少次。PV是指页面刷新的次数,每一次页面刷新,就算做一次PV流量。
- ②、UV:UV(Unique Visitor)独立访客,统计1天内访问某站点的用户数(以cookie为依据);访问网站的一台电脑客户端为一个访客。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的。如果用户不保存cookies访问、清除了cookies或者更换设备访问,计数会加1。00:00-24:00内相同的客户端多次访问只计为1个访客。
- ③、IP:IP可以理解为独立IP的访问用户,指1天内使用不同IP地址的用户访问网站的数量,同一IP无论访问了几个页面,独立IP数均为1。但是假如说两台机器访问而使用的是同一个IP,那么只能算是一个IP的访问。
一般情况:PV > UV > IP
拓展:
IP和UV之间的数据不会有太大的差异,通常UV量和比IP量高出一点,每个UV相对于每个IP更准确地对应一个实际的浏览者。
UV大于IP
这种情况就是在网吧、学校、公司等,公用相同IP的场所中不同的用户,或者多种不同浏览器访问您网站,那么UV数会大于IP数。
UV小于IP
在家庭中大多数电脑使用ADSL拨号上网,所以同一个用户在家里不同时间访问您网站时,IP可能会不同,因为它会根据时间变动IP,即动态的IP地址,但是实际访客数唯一,便会出现UV数小于IP数。
性能扩展:
垂直扩展(纵向扩展)
为同样的计算资源池加入更多资源,比如增加更多内存、磁盘或是虚拟cpu,来应对增加的应用负载,典型案例:对称多处理机(SMP)
水平扩展(横向扩展):(对于服务器来说是增加服务器的数量)
需要向计算平台加入更多的机器或设备,来处理增长的需求。
2.集群概述
什么是集群?
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。
一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。
通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
简单总结为:一组协同工作但对外表现为一个整体的服务器组
集群系统的优点:
- 高可扩展性:如上所述,可以通过增加服务器数量达到性能扩展。
- 高可用性:集群中的一个节点失效,它的任务可以传递给其他节点。可以有效防止单点故障。
- 高性能:负载均衡集群允许系统同时接入更多的用户。
- 高性价比:可以采用廉价的硬件服务器构造高性能的系统。
拓展:负载和分布式的区别?
饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是负载均衡。
为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式。
一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是负载均衡
集群的分类:(LBC和HAC都是分布式集群)
- LBC:负载均衡集群
- HAC:高可用性集群
- HPC:高性能计算集群(科学计算集群)
第一类:LBC(load balancer Cluster):负载均衡集群
概念:由两个或两个以上的服务实体协调、配合完成一系列工作的模式,对外表现为一个整体。
目的:提高业务性能,降低单台服务器压力
特性:
- 不同节点之间相互独立,不共享任何硬件资源;通过一定算法将客户端的访问请求分配到集群的各个节点上,充分利用每个节点的资源。
- 负载均衡扩展了网络设备和服务器带宽,增加吞吐量,加强网络数据处理能力。
实现方式:通过软硬件实现负载均衡
硬件:单独的硬件设备(独立专门的操作系统)F5(BigIP) A10(Thunder系列) redware
软件级负载均衡:DNS、LVS、Nginx、RAC、Haproxy等
LVS:是Linux Virtual Server的缩写,名为Linux虚拟服务器,中国最早的纳入Linux内核的应用层程序
RAC:是real application clusters的缩写,名为实时应用集群,是Oracle 的负载调用软件
说明:
DNS将同一个域名解析为多个不同IP
缺点:DNS的解析缓存造成任务分配不均,导致单个服务器压力过大。
无法实现健康状态检查、缓存dns无法实现分配用户请求
算法:(算法是否合理)静态算法
RR(Round-Robin):轮询
WRR(wight-Round-Robin):权重(加权轮询)
结构:
负载调度器: Nginx 、LVS
应用层: Httpd、Nginx、Tomcat
共享存储服务器:NFS、SAMBA
层级:
硬件:
二层、四层、七层(二层效率远高于七层)
软件:
四层负载调度器:IP地址和端口区分
LVS RAC
七层负载调度器:URL地址关键词匹配
LVS 、mysql proxy、RAC
nginx
haproxy
区别:
触发条件不同
四层:工作在传输层,转发数据依靠的是三层的ip和四层的port
七层:工作在应用层。转发数据依靠URL或主机名{FQDN}
实现原理不同
四层负载调度器:TCP连接建立一次,客户端和RS主机之间(负载调度器只负责数据转发)
七层负载调度器:TCP连接建立两次,客户端和负载调度器;负载调度器和RS主机
应用场景不同
四层负载调度器:TCP应用为主 应用:OA、ERP
七层负载调度器:以HTTP协议为主,根据用户访问页面进行判断调度
安全性不同:七层安全性更高,但是效率比四层差
四层负载调度器:转发SYN攻击
七层负载调度器:拦截SYN攻击
LVS工作原理:ipvs(执行规则)/ipvsadm(命令编写:规则编辑器)
IPVS(负责数据包目标地址转换):钩子函数,内核机制,在请求没有到达目的地址之前,捕获并取得优先控制权的函数。
IPVSADM:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,谁是后端真实的服务器
名词:
- CIP:客户端IP
- DIP:负载调度器IP
- VIP:集群IP
- RIP:真实服务器IP
工作模式:
第一种:NAT 地址转换模式
实现原理
工作流程:
- 客户端将请求交给负载调度器,客户端发出数据包,此时这个数据包的源ip为CIP,目标ip为VIP(集群ip)
- 数据包到达负载调度器后,修改数据包的目标ip地址为真实服务器的ip,此时数据包的源ip为CIP,目标ip为RIP
- 将数据包发送给RS,之后RS响应将数据包发回给负载调度器,此时数据包的源ip为RIP,目标ip为CIP
- 负载调度器在转发时,会将源ip地址改为自己的VIP地址,然后再发给客户端,此时数据包的源ip为VIP,目标ip为CIP。
特点
- 负载调度器和真实服务器,必须位于同一网络
- 真实服务器的网关必须指向DIP
- 负载调度器必须位于客户端和真实服务器之间
- RIP通常都是私有地址,仅用于各个集群节点通信
- 支持端口映射
- 真实服务器可以使用任意操作系统、负载调度器必须是LINUX系统
缺点:
- 所有数据报文都要经过负载调度器、压力过大
第二种:DR:路由模式
实现原理
工作流程:
- 客户端发出数据包,源ip是CIP,目标ip是VIP
- 依靠路由把数据发送给负载调度器,负载调度器将数据包的源MAC地址修改为DIP(负载调度器)的MAC地址,将目标MAC地址修改为RIP的MAC地址,此时源ip和目标ip均未修改。
- 由于DS(负载调度器)和RS(真实服务器)在同一网络中,所以通过二层来传输,通过交换机再将数据包发到RS
- RS接收数据包之后,通过lo接口传送给ens33网卡向外发出,此时的源ip是VIP,目标ip为CIP。
- 最后通过路由发给客户端。
特点
- 负载调度器和真实服务器,必须位于同一网络
- 真实服务器的网关必须指向路由器
- 负载调度只处理入站请求
- RIP可以是私有地址,也可以是公网地址
- 真实服务器可以使用任意操作系统,负载调度器必须是LINUX系统
- 优点:负载调度器压力较小,支持100台左右的RS
- 缺点:配置相对复杂
第三种:TUN:隧道模式
实现原理
工作流程:
- 客户端发送数据包到负载调度器,此时数据包的源ip为CIP,目标ip为VIP。
- 负载调度器会在数据包的外面再次封装一层ip数据包,封装源ip为DIP,目标ip为RIP。此时源ip为DIP,目标ip为RIP。
- 之后负载调度器将数据包发给RS(因为在外层封装多了一层ip首部,所以可以理解为此时通过隧道传输),此时源ip为DIP,目标ip为RIP。
- RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口传送给ens33网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP。
- 之后将数据包发给客户端。
特点
- 所有真实服务器节点既要有RIP,又要有VIP,并且RIP、必须是公网ip
- 负载调度器和真实服务器必须支持隧道功能
- 负载调度器只处理入站请求
- 真实服务器一定不能使用负载调度集群做默认网关
- 不支持端口映射
- 优点:可跨互联网搭建集群
- 缺点:对网络环境要求较高
负载调度器算法
静态算法:只考虑算法本身,不考虑服务器状态
- rr(轮循):从1开始到n结束
- wrr(加权轮循):按权重比例进行调度,权重越大,负责的请求越多
- sh(源地址hash):实现会话绑定,保留之前建立的会话信息。将来自于同一个ip地址的请求发送给一个真实服务器。
- dh(目标地址hash):将同一个目标地址的请求,发送给同一个服务器节点。提高缓存命中率
动态算法:既要考虑算法本身,也要考虑服务器状态(原理:通过hash表记录连接状态----active/inactive)
- LC(最少连接):将新的连接请求分配给当前连接数最少的服务器。 公式:活动连接*256 非活动连接
- WLC(加权最少连接):最少连接的特殊模式。 公式:(活动连接*256 非活动连接)/权重
- SED(最短期望延迟):加权最少连接的特殊模式。 公式:(活动连接 1)*256/权重
- NQ (永不排队):sed的特殊模式,当某台真实服务器连接为0时,直接分配,不计算
- LBLC(基于局部性的最少连接):dh的特殊模式,既要提高缓存命中率,又要考虑连接数量。先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
- LBLCR(带复制的基于局部性的最少连接):LBLCR=LBLC 缓存共享机制
第二类:高可用集群(HA High availability Cluster)
目的:
- 最大限度的保证用户的应用程序持久、不间断的提供服务。(故障转移)
高可用性(HA,High Availablity)
- 是指通过尽量缩短系统停机时间(因日常的维护操作或突发的系统崩溃等),以提高系统和应用的可用性。一般是2个节点做出的HA集群,有很多通俗不科学的名称,比如“双机热备”,“双机互备”。 这样做的好处是当服务启动的时候,两台服务器一个作主(ser1),另外一个作从(ser2)。测试机每几秒会ping主机,当发现主机没有回应,就证明主机拓机了,那么从机马上会启动相应的服务,继续进行服务。这样就可保证服务部间断。
最大限度:(以下指的是一年内服务器的宕机时间,h—代表小时、m—代表分钟)
- 99% 87.6h
- 99.9% 8.8h
- 99.99% 53m
- 99.999% 5m
故障切换:
- 心跳检测:RS232串口线:串行电缆被认为是比以太网连接安全性稍好些的连接方式,因为hacker无法通过串行连接运行诸如telnet、ssh或rsh类的程序,从而可以降低其通过已劫持的服务器再次侵入备份服务器的几率。但串行线缆受限于可用长度,因此主、备服务器的距离必须非常短。
- 双机备份软件:Keepalived Rose Haproxy Heartbeat
特殊:
- 脑分裂:在一个网络或线缆故障时导致两个节点同时认为自已是唯一处于活动状态的服务器从而出现争用资源的情况,这种争用资源的场景即是所谓的“脑裂”,造成数据不完整,服务不可访问
解决方案:
- 设置参考ip,抢夺资源之前,都去ping参考ip(网关),ping不通时,不去抢资源,而是释放资源,将控制权交出去;
- 设置冗余线路,设置两条心跳线,两个网卡,第一个测时不同,再拿第二个去测。
- stonish(shoot the other node in the head 爆头):基于能够通过软件指令关闭某节点特殊的硬件设备,掐电源。
keepalive概述:
- 案例环境专为LVS和HA设计的一款健康检查工具
- 支持故障自动切换
- 支持节点健康状态检查
- 主备模式,共用同一个IP地址,但优先级不同