集群相关概念
集群
对于日益增长用户量,增加单一服务器的性能,不可能随之用户量而实现线性增长,且成本巨大,因此出现了集群系统,将多个普通服务器组织为一个单一的集群,然后多个服务器共同为外部提供服务,**实现用户请求的分而治之,**集群降低了成本,基本上,使得处理能力可以随之用户量实现线性增长
网站划分层次
- 垂直分层
- 接入层/安全层,如防火墙,
- 负载层/调度层,lvs/keepalived/haproxy
- 静态缓存层,如varnish,squid
- 静态web层,如httpd/nginx
- 静态资源层,,nfs网络文件系统,或分布式文件系统,fastdfs,glusterfs,存储照片等非结构化数据;
- 动态应用服务器,如tomcat,phpfpm等java或php网站程序,
- 动态会话缓存层,如redis,memcache,使得会话剥离于动态服务器,将tomcat等服务变成stateless,方便水平扩展
- 消息队列,如rabbitmq,kafka,做系统的解耦,流量削峰等
- 数据持久层,mysql,oracle等关系型数据库,存储结构化数据;
- 离线业务层,hadoop生态做大数据分析处理,
- 日志层,ELK做日志的收集,分析,展示
- 监控层,zabbix,全局各个层次的监控
- 持久集成/部署,gitlab,Jenkins,snarqube,代码的持续提交,测试,发布,回滚
- 自动化工具,ansible,pubbet
- 底层平台:
- 物理机器
- 私有云IAAS,kvm,openstack
- 容器云,docker,kubernetes
- 水平业务切分
- 微服务化,模块化,各服务通过restful api或rpc进行网络通信;
会话保持的方式
实现会话保持,有多种方式:可以在前端调度器的调度方法上实现;也可以在后端应用服务器实现,利用状态信息在节点间复制,或抽离出来放在高可用的会话服务器上;
- 调度方法上:
- sh:调度时,采用源地址hash方式,使得同一个ip的请求,总是发往一个后端服务
- cookie:调度时,基于cookie调度,实现会话保持
- 会话复制
- 所有服务器 都保存一份会话信息,相互复制,
- 会话服务器
- 将会话信息外置,于redis,memche
lvs简介
lvs全称linux virtual server 为章文嵩博士开发的一款负载均衡软件,为linux内核模块之一,内核空间管理命令为ipvsadm,配置使用可实现高可用的有keepalived软件。
lvs可以实现基于ip的负载调度(内核的ipvs模块)、基于内容的调度(内核的KTCPVS模块),如用于七层的web,cache的调度,且是基于内核实现,效率高,不过在开发中,http://www.linuxvirtualserver.org/software/ktcpvs/ktcpvs.html
官方网址
http://www.linuxvirtualserver.org/Documents.html
http://www.linuxvirtualserver.org/zh/index.html
http://kb.linuxvirtualserver.org/wiki/Main_Page
4种工作模型概括
- nat:可支持的并发不高
- tun:调度器和后端节点可以跨公网,适用于如公网cdn
- dr:默认工作模型,适用于本地局域网
- fullnat:不常用
10种调度算法概括
- rr:轮询
- wrr:加权轮询
- lc:最小连接调度
- wlc:默认调度算法,加权最小连接调度
- lblc:基于局部的最小连接,local-based least-connection
- lblcr:基于局部的带有复制的最小连接;local-based least-connection with-replication
- sh:源地址hash
- dh:目标地址hash
- sed:shorest expection delay,
- nq:never queue,第一轮均匀分配,后续sed