3.0-集群和分布式及互联网架构

188 阅读26分钟

集群分布式及互联网架构

Linux Virtual Server

杂谈

2020的新的大纲和2019的都是匹配的

  • 用户层
用户 (不同地区,不同系统,不同硬件设备){	
	通过{无线/有线}网络访问网站
}
  • 服务层-用户量大,构建相对复杂的环境

    • CDN网络模块

      cdn(不同地区用户){
      	事先把静态页面缓存到cdn服务商的服务器上
      	用户访问页面
      	承担大部分的静态页面和图片请求,可以极大的降低服务器压力
      	 只有最新的资源和动态资源cdn服务器上是没有的,只有用户在访问这些资源的时候才需要访问互联网
      }
      
    • 外部-防火墙模块

      前端有防火墙模块,这个模块在企业中是必不可少的设备
      
      会购买专业的硬件防火墙,iptable只是个软件防火墙
      
      为了容错,硬件防火墙都是两道防火墙,并且是并行的
      # 并行:从互联网进入是两条线路,联通和电信两条线做负载,联通挂了还有电
      信的,并且每条线路后放一道防火墙
      # 这样进入到企业的内部必须先通过防火墙才可以
      # 到达防火墙后,需要让用户的请求进入企业的web服务器(apache/nginx)
      # 但是企业内部的服务有很多
      # 由很多小模块/服务构成,这些模块是分布在不同的服务器上的
      # 防火墙上的IP是真正大的公网IP
      
    • 内部-一级反向代理调度模块

      # 请求进入企业内部的时候需要调度器
      LVS/HAproxy 高可用四层负载
      # HAproxy(后面学,专业级的调度器
      # 避免单点失败,至少要两个调度器
      # 企业一般都是两个
      
      会配置vip
      # virtual IP
      用户访问的时候会访问虚拟的地址,可能会运行在第一台,也可能会运行在第二
      台机器上,一个飘动的地址
      # VIP具体在哪台上看配置只能运行在一台机器上
      不管哪台机器上,用户访问的时候,发请求是发到vip上的
      # 这个vip和DNS解析出来的IP不是同一个
      # DNS解析出来的IP是防火墙上的IP
      
      用DNT把防火墙上的公网IP映射成企业内部的VIP
      # 所以互联网上的用户根本看不到企业内部真正的地址,看到的都是防火墙的地# 用户访问防火墙的公网地址,公网地址映射成私网VIP地址,转发给LVS,通过
      调度模块往企业内部网络调度,再根据企业的各种服务进行各种资源的调度
      
      # 这个调度到内部的其他模块上,根据需要访问的数据
      
    • 内部-其他服务模块

      因为访问一个网站的时候有很多的页面,不同的页面代表不同的服务

    # 案例
    访问www.jd.com/xxx
    xxx对应的是不同的服务或者资源
    根据用户不同请求的URL,调度模块讲用户的请求调度到后端不同的服务上,后面会
    有很多不同的子服务
    
    不同服务模块
      基础模块
      	内部DNS模块
      	内部NTP模块
      	Harbor模块-容器仓库(类似yum仓库-放软件的)
      	时间同步模块等
      业务模块
      	nginx七层反向代理-复杂架构
      	LA/NMP门户网站模块-简单架构
      资源模块
      	静态资源模块
      		静态资源服务器-nginx
      		静态资源缓存服务器
      			jpg
      			html
      	动态资源模块
      		java-tomcat
      			java资源响应模块
      				mysql主从
      				mongoDB
      				redis
      			java组
      				单体应用组
      				生产者组
      				消费者组
      				微服务组
      		php-fpm
      存储模块
      	  	开源存储服务器-NFS,ceph
      	商业存储服务器-NAS,SAN
      健康性模块
      		分布式监控平台-promethous/zabbix
      生产模块
      		持续集成和持续部署-jenkins+gitlab
      记录模块
      		日志收集-ELK
      其他模块-目前无法分,这个应该是os层的
      		容器管理-docker,k8s(新)/openstack(老)
    
    • 内部-二级反向代理调度模块-调度后端资源

      # 案例
      访问www.jd.com/xxx
      xxx对应的是不同的服务或者资源
      根据用户不同请求的URL,调度模块讲用户的请求调度到后端不同的服务上,后面会有很多不同的子服务
      
      内部的调度采用nginx做反向代理
      # 一位用户的访问量很多,只是用一台LVS是承受不了访问的,要用nginx做更细节的调度,做第二次的反向代理的调度
      # 所以总的代理内部还有其他的调度
      

      案例:实现基于请求的动静分离

      静态资源放在一些服务器上
      动态资源放在一些服务器上
      # nginx更擅长这种动静调度,apache也可以但是不怎么用
      # 比如说要访问动态资源php,就往动态资源服务器上调度
      # 比如说要访问静态资源jpg,html,就往静态资源上调度
      
      
      调度到后端的静态资源缓存服务器/静态资源服务器
      # 比如说用户上传了一个图片,最后会放在一个集中的存储服务器上
      # 下次再访问会通过nginx进行静态调度,最终从存储服务器上得到静态页面
      
    • 内部-资源模块

      • 动态-fpm模块-fpm
      • 动态-java模块-tomcat

      根据不同业务的请求,通过LVS调度后,再通过nginx调度动态资源java资源,哪 个业务的java资源,不同业务的java资源跑在不同的组服务器上

      单体应用组
      生产者组
      消费者组
      微服务组
      

      一般来说,nginx一台调度动态资源,后面可能要5台甚至更多提供java组服务

      • java资源响应模块

        • mysql主从

        mysql是关系型数据库,性能比较差,可以用redis来提升整个服务器的性能,可以讲mysq的数据缓存到redis里

        • redis

        数据缓存服务器集群,用来提升关系型数据库性能

        将MySQL的数据缓存到redis的服务器上,将来用户要访问的时候可以从redis
        的缓存中的得到数据,而不需要在mysql中执行复杂的语句查询,因为mysql的
        语句查询速度是非常慢的
        
        redis是基于内存的,相当于一个大内存,一台存储在单点失败问题,所以要
        用集群,很多都是集群,tomcat,redis,mysql都是集群
        
        • 分布式注册中心-zookeeper

        类似NFS中的生产者和消费者,到底从哪个机器上的到这个服务

        现在流行的微服务概念,将一个大服务拆分的很细,由多个模块构成
        
        比如一个博客网站里面有很多功能功能,以前是放在一个机器上的,微服务的
        盖帘就是把这这些功能拆开,放到一个专门的模块里,放到不同的服务器上,
        这些功能是分散在不同大的服务器上很多很多,这样涉及到的主机就很多,用
        户在访问的时候,原来是在一个机器上,互相访问很简单,但是不同的机器之
        间怎么访问,就涉及到服务之间的相互访问,比如rpc,远程过程调用
        
        访问的话,就涉及到远程过程调用,怎么找你啊,就靠分布式的注册中心,zo
        okeeper
        
        这个应用可以把我们的服务先注册上去,那么要访问什么服务的时候,就可访
        问zookeeper,类似一个114查询台,告诉你哪个机器上提供了什么服务
        
        企业中要实现服务之间的通讯SOA,SOA是微服务的前身,SOA已经是前一代大
        的技术了,微服务是比SOA更小的粒度
        
        • 消息队列-kafka/rabbitMQ/rocketMQ
        各个服务之间要进行通讯,就要用到消息队列
        
        比如说有个服务器提供数据,另一个服务器使用数据,把提供数据的数据发送
        到消息队列上,另一个服务器去消息队列获取数据
        
        也是一个数据概念,用户将数据写进去,再读出来,只是用了一排队机制
        
    • 内部-健康性模块

      • 分布式监控平台-zabblix
      监控cpu磁盘利用率等
      
      但是这个小服务未来不是跑在主机上,而是跑在类似容器上,容器可以理解为一
      个小的虚拟机,但是容器比虚拟机更节约资源,相当于机器上的小应用,占用的
      资源特别小,一台机器上可以运行很多很多个小容器,小容器占用的资源比虚拟
      机小很多,在电脑上可以跑10个虚拟机,但是可以跑30-40个容器,粒度可以更
      小,更服务前面的微服务,不需要专门的放在一个虚拟机里,放在容器里就可以
      了
      
      就需要容器的管理,容器也是虚拟化的一个应用,openstack就是一个开源的虚
      拟化的管理软件,可以用来管理虚拟机,用openstack可以轻易的在很多服务器
      上创建虚拟机,迁移虚拟机,实现虚拟化的管理,vm虽然实现了虚拟化的,但是
      是单机方式管理,所以需要一个单机的虚拟化的管理服务器,但是openstack管
      理的是虚拟机,对资源消耗更大,因为每个虚拟机都需要专门的内核,每个虚拟
      机相当于一个物理机,有自己的一套内存,cpu,存储等,都是独立的,相对消
      耗资源,结果上面就跑一个小服务,相当于投入产出不成比例,跑的服务结果没
      有操作系统占用的资源多,相当于开了一个自重10吨的小货车,结果拉了一吨的
      货,成本过高,所以不用虚拟机的机制,用容器,消耗的资源更少,可以自重很
      轻,相当于1千斤的小车,但是可以跑一吨的大服务,本身特别省资源,并且可
      以跑很多,那么要管理容器的话,就要用到容器技术,容器技术主流的是docker
      ,docker只是解决了类似vm的单机,一台机器上可以用doker管理单机上的容器
      
      但是企业有很多的服务器,每个机器上都需要跑容器,那么多的容器管理,需要
      一个集中的,大规模的网络式的管理,用k8s管理分散在很多服务器上的容器
      
      之前钉钉用户量特别大,除了要增加物理服务器,还要扩容大量的容器,每个物
      理服务器上跑个20-30甚至更多的容器,容器要迁移和管理用k8s,这些是大力推
      广的技术,不代表很多企业都在用,很多的企业也在用openstack
      
    • 生产模块

      • 持续集成和持续部署-jenkins+github(放程序员开发的软件的)

        尤其互联网的时代来临,每个应用的生命周期相对来说更迭很快,要抢占市场,一切以市场为导向,要快速大的去做升级
        
        一天开发人员可能就会出好几个版本,上午下午晚上
        
        现在想让开发人员开发的软件要快速上线,就要用到持续集成和持续部署,要用到jenkins和gitlab这一套管理系统,gitlab是管理软件版本的,比如说原来是V1.1版,之后有V1.2版,所有版本都要有,每次阶段性的生成一个新版本,不断升级,gitlab就是一个仓库
        
        软件要部署到各个机器上,先把软件传给jenkins,之后在jenkins上制定部署策略,发布到生产和测试环境中,生产和发行分离
        
      • 记录模块

        • 日志管理-ELK

          企业里有很多的服务器,有大量的日志,可以说大数据时代里,日志就是黄
          金, 
          收集各种服务器上的数据加以分析,有专门的大数据分析工程师-很吃香
          
          有大数据运维的岗位很吃香,通过各种渠道把数据抓取过来,得到很多有商
          业价值的东西
          
          将来从个人发展来说可以偏重某个方向的可以深入学习
          
          方向:DBA,大数据,安全等方向深入研究
          
  • LNMP架构

    比如说搭建了一个企业的宣传页面,不用太复杂,用LN/AMP就够了
    
  • 跳板机

    用于远程连接的,比如在外出差,怎么远程做运维工作
    

总结:现在学的只是一部分,后面学的东西还有很多

Linux Virtual Server

LVS调度器,所有服务的入口

原理和复杂,配置很简单

1.集群和分布式

因为现在互联网访问会短时间爆发性增长,如果只是依靠摩尔定律两年性能翻番,太慢了

系统性能扩展方式:

  • Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务
  • Scale Out:水平扩展,向外扩展,增加设备,并行的运行多个服务调度分配问题,CLuster

垂直扩展不再使用:

随着计算机性能大的增长,其价格会成倍增长
单台计算机的性能是有上线的,不可能无限制地垂直扩展,而且性价比不高
多核cpu意味着即使是单台计算机也可以并行

问题:为什么不一开始就并行化技术

1.1 集群Cluster

Cluster:集群,为解决某个特定问题将多台计算机组合起来形成地单个系统(好几台机器对外是一个服务)

CLuster分为三种类型:

  • LB:load balancing,负载均衡

    多个主机组成,每个主机只承担一部分访问,就是均衡负载,具体怎么均衡,看策略

    案例:mysql主从复制,mysql主服务器负责写,其他从负责读

    案例:LVS负载均衡调度器,LVS接收用户的请求,把请求调度到后端的服务器上,每个服务器承担了部分的请求,这就是负载均衡调度器,如果就一台LVS,要针对LVS提供高可用性,解决LVS的单点失败问题,用keepalive来拯救LVS,弥补不LVS的高可用性问题,光靠LVS不行,必须要整合keepalive来解决高可用性问题,通常都是配合使用的,是个cp

  • HA:High Availiablity,高可用,避免SPOF(single Point Of failure)

    相关避免但单点失败的技术:
    raid
    读写分离-mysql读从服务器,mysql写主服务器,mysql主服务器down,从服务器升
    级,MHA技术-自动将其中一个从服务器提升为主服务器
    

    SLA:服务等级协议(简称:SLA,全称:service level agreement)

    是在一定开销下为保障服务的性能和可用性,服务提供商与用户定义地一种双方认可大的协定。通常这个开销是驱动提供服务质量地主要因素。再常规地领域中,重视设定所谓地三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一些列的惩罚措施,运维,最主要的目标就是达到这种服务水平

    MTBF:Mean Time BetweenFailure 平均无故障时间-正常时间

    MTTR:Mean Time To Restoration (repair) 平均恢复前时间-故障时间

    A=MTBF/(MTBF+MTTR) (0,1):99%,99.5%.99.9%,99.99%,99.999% 计算高可用性的比值

    1年=365天=8760小时
    99.9=8760*0.1%=8.76小时
    99.99=52.6分钟
    99.999=5.26分钟
    

    停机时间又分两种,一种是计划内停机时间(更换硬件),一种是计划外停机时间(故障),而运维主要关注计划外停机时间,互联网公司判断运维的kpi,就是SLA

  • HPC:High-performance computing,高性能www.top500.org

    这个和我们不相关,LB,HA和我们相关

    接下来学的LVS属于LB

1.2 分布式系统

分布式存储:Ceph,GlusterFS,FastFS,MogileFS

将不同的数据分散到不同的服务器上
	比如大众点评,传的图片将来怎么保存,如果都放到一台上面,服务器挂了怎么
	办,而且性能也不行,要解决容错和性能问题怎么办,用分布式存储
	大众点评6台服务器,比如上传了a.jpg,在3个服务器上各放一份
	b.jpg,再放3份,每个服务器都有一部分,每个服务器都有三分拷贝
	如果是视频,先拆分,拆成10M小块,第一个小块分放三分
	现在用的百度云用的就是这个原理,背后的算法也很复杂
	
大众点评早期使用的是MogileFS,现在用的不太多了,现在主流用Ceph

分布式计算:hadoop,Spark

当用户需要大量的计算,一个一个去算,太慢了,每个子服务器算一点

分布式常见应用

  • 分布式应用-服务按照功能拆分,使用微服务

  • 分布式静态资源-静态资源放在不同的存储集群上

  • 分布式数据和存储-使用key-value缓存系统

    redis搭建的集群-主要放key-value值
    	用户请求过来,如果现在又三台redis,请求与3取模,如果是1找第一台数据
    	但是存在一个问题,如果有一台挂了,三分之一数据就没了,存在单点失败问题
    	为了解决这个问题,redis有自己的技术,每个服务器用主从技术容错
    	redis真正企业中用要用到6台
    mysql的数据库,每个服务器放的是一样的东西
    
    redis和mysql类似主从,虽然用的软件不一样,但是逻辑上就那一套东西,只是软
    件选型和配置不太一样
    
  • 分布式计算-对特殊业务使用分布式计算,比如hadoop集群

以前说dns的时候涉及到分布式,虽然dns服务器都提供dns服务,但是提供的具体内容不一样

1.3集群和分布式

单机结构:1个全栈老实人累如狗
集群结构:2个全栈老实人凑合过-会涉及到扯皮问题,并且不精通
分布式:后端攻城狮+前端攻城狮-男女搭配干活不累-有很多岗位,并且互相不能代替
运维:发布程序,岗位和不同的岗位会有沟通
总结:随着发展,全能的人早期可能比较好,什么都能干,但是性能和容错并不好,
因为什么都要干,按照流程干,中期,一个人忙不过来,那就两个人干,实现荣作,
但是性能依旧不好,因为都觉得自己什么都能干,如何去配合很不好,后期,长久的
配合中,前后端分离,服务细化,实现分布式,每个人干一点,然后每个环节再集群
,实现容错,这样性能不错,容错也有了,但是成本比较高,所以初期全能可以,但
是后期一定要有所偏向,实现配合,纵深发展,将串/并流程分布式实现,并且每个
环节实现集群,以及主从容错之后根据业务量和规模以及预算,对整体进行平衡,将
关键的环节实现集群,对主节点实现主从容错

比如一个业务:电商网站
需要项目经理-管理整个项目
需要策划-规划网站如何布局-画出草图
需要美工-根据草图,画出整个UI,最终效果图就这样-给策划-策划觉得ok-交给前端页面工程师
需要前端开发-根据UI,用三件套来实现-虽然前端实现了,但是数据从那里来-数据从后端来
需要后端开发-有java/php等等,后端开发完了,要放数据
需要dba-专业的数据库团队来维护

整个网站就搭建起来了,但是搭起来了,需要运维来保证业务的正常使用
需要运维-

网站上线后信息从哪里来,需要写文章,宣传资料
需要编辑-一天要一个完成量

之后还要推广
需要seo-优化

之后还要运营/市场这个网站
需要运营

之后还需要销售团队
需要销售


所以:在企业中真正实现一个网站是非常麻烦和复杂的

分布式:比如说微服务,将会员积分模块拆出来作为一个服务,然后既有前端也有后
端,作为一个整体,实现会员管理,但是要把这个事做好,干脆也不分什么前端后端
了,直接就是全栈,干脆都干了,相对比较方便,不像前端后端有局限性

集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的

分布式:一个业务被拆成多个子夜吴,活着本身就是不同的业务,部署在多台服务器 上。分布式中,每台服务器实现的功能是有差别的,数据和代码也是不一样的,分布 式每台服务器功能加起来,才是完整的业务

分布式是以缩短单个任务的执行时间来提升效率的,而集群是通过提高单位时间执行 的任务数来提高效率的。

对于大型网站,访问用户很多,实现一个群集,在前面不是一个负载均衡服务器,后 面几台服务器完成同一个业务如果有用户进行相应业务访问时,负载均衡器根据后端 哪台服务器的负载情况,决定由哪台去完成响应,并且一台服务器跨了,其他服务器 可以顶上来。分布式的每个节点,都完成不同的业务,如果一个节点跨了,那么这个 业务可能就会失败,分布式本身没有容错功能

1.4 集群设计原则-了解

可扩展性-集群的横向扩展能力

可用性-无故障响应使劲按

性能-访问响应时间

容量-单位时间内的最大并发吞吐俩量(C10K并发问题)

1.5 集群设计实现

1.5.1 基础设施

提升硬件资源性能-从入口防火墙到后端we server均使用更高性能的硬件资源

上线服务器的时候,一定要和老板打报告,要更高性能的服务器,不然以后业务量大
起来,顶不住了,将来背锅的还是运维,如果老板不批的话,将来出问题了还有的说
,一定要超前一点配

多域名-DNS轮询A记录解析

比如京东,首页面有大量的html,css,js文件,并不都是由一个服务器提供的,很
多服务器,放在很多的域名下的

多入口-将A记录解析到多个公网IP入口

www.jd.com对应的IP可能不是一个IP,一个域名对应多个A记录

多机房-同城+异地容灾

大公司做同城容灾
超大公司异地容灾

CDN(Content Delivery Network)-基于GSLB(Global Server Load Balance)实现全局负载均衡,如DNS

1.5.2 业务层面

分层:安全层,负载层,静态层,动态层(缓存层,存储层)持久化和非持久化

安全层:防火墙
负载层:前面有调度
动静分离
缓存:redis
存储持久化:mysql

分隔:基于功能分隔大业务为小服务

大服务分割成小服务,并实现小服务的快速复制
使用容器技术,快速copy,生成小的相同的容器服务,并且把容器分发到各个服务器上
实现所谓的扩容

但是需要提前先分割业务

分布式:对特殊场景的业务使用分布式计算

1.6 LB Cluster负载均衡集群

1.6.1 按实现方式划分
  • 硬件

    F5 Big-IP

    非常有名,很多大公司,从防火墙进来后,就是F5 BIg-ip
    是一个调度器,功能和性能都特别好,也非常贵
    当时大众点评一个机器70多万,并且买一个还不行,要实现容错,光这一个铁盒子200万出去了
    互联网既挣钱又烧钱
    
    nginx被F5收购了,有一个就在F5工作,关于F5的相关可以问他
    

    Citrix Netsaler

    A10 A10

  • 软件

    LVS:linux virtual server,阿里四层SLB(load balance)使用

    nginx:支持七层调度,阿里七层SLB使用Tengine(nginx的二次开发版)

    nginx起家的功能是web服务器
    nginx功能很强,也可以做代理服务器
    
    所以,有的公司觉得通用就用他就可以了,从专业角度来说,在代理方面ha更专业
    

    haproxy:支持七层调度(专门的调度器,功能更全面)

    ats:Apache Traffic serer,yahoo捐助给apache

    perlbal:perl编写

    pound

1.6.2 基于工作的协议层次划分
所谓的四层,就是基于tcp/ip协议传输层以下的进行调度
实现端口号和IP地址调度
LVS只能实现传输层和传输层以下的调度,只能根据端口号和IP进行调度
cookie调度实现不了,因为cookie是应用层的

haproxy,nginx也能做四层的调度,但是这两个服务强大在应用层也能做,七层调度
可以针对某种协议调度,可以针对http调度,也可以针对php协议(fastcgi协议)都
可以做
  • 传输层(通用):DNAT和DPORT

    LVS:

    nginx:stream

    haproxy:mode tcp

  • 应用层(专用):针对特定协议,常称为proxy server

    http:nginx,httpd,haproxy(mode http),..

    fastcgi:nginx,httpd

    mysql:mysql-proxy

    mysql-proxy协议调度,mysql可以实现读写分离
    
1.6.3 负载均衡的会话保持
如何让用户得到同一个session信息
当用户请求发来时,用户被分配一个用户唯一标识的session
但是带来一个问题,用户发请求时,第一次访问a,第二次刷新页面,被调度器调度
到了第二台服务器上,则session信息就可以找不到了

1.session sticky:同一用户调度固定服务器

当用户发请求时,被调度到第一个服务器,生成一个session id,session 
id1通过cookie交给用户
有个send cookie的首播字段
当用户发起请求时,被调度到第二台服务器,b上没有session id 
,以为是个新客户,会分配一个新的session id2,原来的session id1就不用了
如果之后再调度到1,就又不认识了
这样就会导致频繁登陆的效果,为了解决这个问题,用session sticky
同一个请求往同一个服务器上调度
只要在调度器上能识别是哪个用户就可以了-阿里的内网登陆机制实现
对调度器来说,怎么知道你是同一个用户
c用户进入时,调度器(可能时ha,nginx,lvs三个其中之一)上
调度器上就会记录以下,我曾经把c调度到a上了,之后往同一个服务器上调度

如何识别出这次是c上次还是c呢,根据地址IP判断,但是根据ip地址判断是不是同一
个人,这个不准确
平时上网的时候,出去的使用用的都是同一个IP,教室里几百个人上网,出去用的都
是同一个ip,大量的用户认为都是c,这很不合理

这种昂是不准确,靠cookie,基于浏览器的,这个cookie是在浏览器里存的,当发请
求的时候,这个cookie会记录下来,下次同样的cookie来了就会往之前调度的服务器
上调度,更精准

教室里的人,哪怕1000个人去访问,但是浏览器的cookie是不一样的

有个要求,就是代理服务器能识别cookie
但是lvs识别不了,因为lvs是四层的,没有这个功能,lvs这个功能做不到

这种方式也有个缺点,大量的用户根据cookie进行调度
如果用户存在的服务器宕机了,下线了,cookie就失效了

之后有了另一种方法,session复制,产生了一个session id,不仅啊,上有,bc都有
不管发请求来了,都可以调度,但是又有个问题,abc上存放的内容都是一样的,比
较占用内存,一旦用户量比较大,每个服务器上都有一份,相当于拷贝了全部的内容
,每个服务器的压力很大的,但是session复制不适合大环境,三五台适合

还有一种方式用session 
server,session放在一个专门的服务器上,这个session不由自己生成,而是用专门
的数据库生成,用的比较多的就是redis,用户访问的时候,调度集中访问redis,进
而调度,但是又产生了一个新的问题,redis挂了,就凉了,redis实现容错,redis
集群,三个节点,每个节点只放其中一部分1/3,但是存在单点失败问题,再搭建从
节点,每个节点实现主从,后面做redis的时候就要用6个节点,tomcat都有这种技术
的

​ source IP:LVS sh算法(对某特定服务而言)

​ cookie

2.session replication:每台服务器拥有全部session

​ session multicast cluster

3.session server:专门的session服务器

​ Memcached,Redis

1.7 HA高可用集群实现

keepalived:vrrp协议

虽然lvs解决了高可用的lb问题,但是单点失败解决不了的,所以用keepalive
其他的方案,很少用到了,在centos5之前,但是centos67往后就不用了
Ais :应用接口规范
	heartest
	cman+rgmanager(RHCS)
	coresync_pacemaker