当前位置: 首页 > news >正文

网站建设企业营销网站建设课程设计内容

网站建设企业营销,网站建设课程设计内容,如何查询域名服务商,软件工程项目管理文章目录 原理选举机制#xff08;重点#xff09;情况1#xff1a;正常启动集群情况2#xff1a;集群启动完#xff0c;中途有机器挂了 监听器客户端向服务端写入数据客户端向服务端Leader节点写入客户端向服务端Follower节点写入 Paxos算法#xff08;每个节点都可以提… 文章目录 原理选举机制重点情况1正常启动集群情况2集群启动完中途有机器挂了 监听器客户端向服务端写入数据客户端向服务端Leader节点写入客户端向服务端Follower节点写入 Paxos算法每个节点都可以提议者ZAB协议算法 - Paxos算法的改良 - 集群仅能一位提议者即Leader认识崩溃恢复Leader挂重新选举数据恢复 CAP理伦 脚本集群统一启动、关闭、状态查看脚本 源码分析粗略辅助源码持久化序列化 服务端启动流程服务端选举Leader流程Leader、Follower数据同步流程服务端Leader启动Zk过程服务端Follower启动Zk过程客户端连接Zk服务端过程 原理 选举机制重点 情况1正常启动集群 集群正常总固定票数 conf/zoo.cfg里面的server.的配置行数   特点 一旦选举出领导leader除非作为leader的zookeeper挂了否则不会在重新选举其他新进的zookeeper集群都作为追随者Following存活的zookeeper机器必须【集群正常总固定票数】的一半以上才会进行选举leader角色否则一直是Lookingzookeeper可以给自己投票一旦每个人的票数都一样交换myid查看后谁大就把投自己的票改投成myid最大的那个 集群中5台zookeeper机器依次启动后选举领导的整个过程 情况2集群启动完中途有机器挂了 #mermaid-svg-Mplhmxitr7iKbAaE {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Mplhmxitr7iKbAaE .error-icon{fill:#552222;}#mermaid-svg-Mplhmxitr7iKbAaE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Mplhmxitr7iKbAaE .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Mplhmxitr7iKbAaE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Mplhmxitr7iKbAaE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Mplhmxitr7iKbAaE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Mplhmxitr7iKbAaE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Mplhmxitr7iKbAaE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Mplhmxitr7iKbAaE .marker.cross{stroke:#333333;}#mermaid-svg-Mplhmxitr7iKbAaE svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Mplhmxitr7iKbAaE .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Mplhmxitr7iKbAaE .cluster-label text{fill:#333;}#mermaid-svg-Mplhmxitr7iKbAaE .cluster-label span{color:#333;}#mermaid-svg-Mplhmxitr7iKbAaE .label text,#mermaid-svg-Mplhmxitr7iKbAaE span{fill:#333;color:#333;}#mermaid-svg-Mplhmxitr7iKbAaE .node rect,#mermaid-svg-Mplhmxitr7iKbAaE .node circle,#mermaid-svg-Mplhmxitr7iKbAaE .node ellipse,#mermaid-svg-Mplhmxitr7iKbAaE .node polygon,#mermaid-svg-Mplhmxitr7iKbAaE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Mplhmxitr7iKbAaE .node .label{text-align:center;}#mermaid-svg-Mplhmxitr7iKbAaE .node.clickable{cursor:pointer;}#mermaid-svg-Mplhmxitr7iKbAaE .arrowheadPath{fill:#333333;}#mermaid-svg-Mplhmxitr7iKbAaE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Mplhmxitr7iKbAaE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Mplhmxitr7iKbAaE .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-Mplhmxitr7iKbAaE .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-Mplhmxitr7iKbAaE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Mplhmxitr7iKbAaE .cluster text{fill:#333;}#mermaid-svg-Mplhmxitr7iKbAaE .cluster span{color:#333;}#mermaid-svg-Mplhmxitr7iKbAaE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Mplhmxitr7iKbAaE :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 触发选举条件【满足其一】 1. 有新zookeeper服务器启动加入 2. 中途在集群中的有zookeeper机器断联 #mermaid-svg-8iVjlvw4lUYaRsi4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8iVjlvw4lUYaRsi4 .error-icon{fill:#552222;}#mermaid-svg-8iVjlvw4lUYaRsi4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8iVjlvw4lUYaRsi4 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-8iVjlvw4lUYaRsi4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8iVjlvw4lUYaRsi4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8iVjlvw4lUYaRsi4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8iVjlvw4lUYaRsi4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8iVjlvw4lUYaRsi4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8iVjlvw4lUYaRsi4 .marker.cross{stroke:#333333;}#mermaid-svg-8iVjlvw4lUYaRsi4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8iVjlvw4lUYaRsi4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8iVjlvw4lUYaRsi4 .cluster-label text{fill:#333;}#mermaid-svg-8iVjlvw4lUYaRsi4 .cluster-label span{color:#333;}#mermaid-svg-8iVjlvw4lUYaRsi4 .label text,#mermaid-svg-8iVjlvw4lUYaRsi4 span{fill:#333;color:#333;}#mermaid-svg-8iVjlvw4lUYaRsi4 .node rect,#mermaid-svg-8iVjlvw4lUYaRsi4 .node circle,#mermaid-svg-8iVjlvw4lUYaRsi4 .node ellipse,#mermaid-svg-8iVjlvw4lUYaRsi4 .node polygon,#mermaid-svg-8iVjlvw4lUYaRsi4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8iVjlvw4lUYaRsi4 .node .label{text-align:center;}#mermaid-svg-8iVjlvw4lUYaRsi4 .node.clickable{cursor:pointer;}#mermaid-svg-8iVjlvw4lUYaRsi4 .arrowheadPath{fill:#333333;}#mermaid-svg-8iVjlvw4lUYaRsi4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8iVjlvw4lUYaRsi4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8iVjlvw4lUYaRsi4 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-8iVjlvw4lUYaRsi4 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-8iVjlvw4lUYaRsi4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8iVjlvw4lUYaRsi4 .cluster text{fill:#333;}#mermaid-svg-8iVjlvw4lUYaRsi4 .cluster span{color:#333;}#mermaid-svg-8iVjlvw4lUYaRsi4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8iVjlvw4lUYaRsi4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 选举过程情景 1. 集群中的Leader没挂维持现状依然是Leader机器为Leader 2. 集群中的Leader挂了Leader选举规则谁任期Epoch大选谁、任期一致谁事务ID修改次数大就选谁、事务ID也一致谁身份证号大就选谁 监听器 流程 zookeeper客户端告知服务端需要监听某某节点的数据变化服务端一旦节点发生变化就将变化通知内容推送给客户端 #mermaid-svg-egpIWPsyutzHDX0h {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-egpIWPsyutzHDX0h .error-icon{fill:#552222;}#mermaid-svg-egpIWPsyutzHDX0h .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-egpIWPsyutzHDX0h .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-egpIWPsyutzHDX0h .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-egpIWPsyutzHDX0h .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-egpIWPsyutzHDX0h .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-egpIWPsyutzHDX0h .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-egpIWPsyutzHDX0h .marker{fill:#333333;stroke:#333333;}#mermaid-svg-egpIWPsyutzHDX0h .marker.cross{stroke:#333333;}#mermaid-svg-egpIWPsyutzHDX0h svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-egpIWPsyutzHDX0h .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-egpIWPsyutzHDX0h .cluster-label text{fill:#333;}#mermaid-svg-egpIWPsyutzHDX0h .cluster-label span{color:#333;}#mermaid-svg-egpIWPsyutzHDX0h .label text,#mermaid-svg-egpIWPsyutzHDX0h span{fill:#333;color:#333;}#mermaid-svg-egpIWPsyutzHDX0h .node rect,#mermaid-svg-egpIWPsyutzHDX0h .node circle,#mermaid-svg-egpIWPsyutzHDX0h .node ellipse,#mermaid-svg-egpIWPsyutzHDX0h .node polygon,#mermaid-svg-egpIWPsyutzHDX0h .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-egpIWPsyutzHDX0h .node .label{text-align:center;}#mermaid-svg-egpIWPsyutzHDX0h .node.clickable{cursor:pointer;}#mermaid-svg-egpIWPsyutzHDX0h .arrowheadPath{fill:#333333;}#mermaid-svg-egpIWPsyutzHDX0h .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-egpIWPsyutzHDX0h .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-egpIWPsyutzHDX0h .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-egpIWPsyutzHDX0h .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-egpIWPsyutzHDX0h .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-egpIWPsyutzHDX0h .cluster text{fill:#333;}#mermaid-svg-egpIWPsyutzHDX0h .cluster span{color:#333;}#mermaid-svg-egpIWPsyutzHDX0h div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-egpIWPsyutzHDX0h :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. 首先要有一个main线程 2. 在main线程中创建Zookeeper客户端这时就会创建两个线 程一个负责网络连接通信(connet)),一个负责监听(listener) 3. 通过connectz线程将注册的监听事件发送给Zookeeper服务端 4. 在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中 5. Zookeeper服务端监听到有数据或路径变化就会将这个消息发送给Zookeeper客户端的listener线程 6. listener线程内部调用了process0方法处理后续业务逻辑 #mermaid-svg-ka6b71vIyEnnXca2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ka6b71vIyEnnXca2 .error-icon{fill:#552222;}#mermaid-svg-ka6b71vIyEnnXca2 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ka6b71vIyEnnXca2 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-ka6b71vIyEnnXca2 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ka6b71vIyEnnXca2 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ka6b71vIyEnnXca2 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ka6b71vIyEnnXca2 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ka6b71vIyEnnXca2 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ka6b71vIyEnnXca2 .marker.cross{stroke:#333333;}#mermaid-svg-ka6b71vIyEnnXca2 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ka6b71vIyEnnXca2 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ka6b71vIyEnnXca2 .cluster-label text{fill:#333;}#mermaid-svg-ka6b71vIyEnnXca2 .cluster-label span{color:#333;}#mermaid-svg-ka6b71vIyEnnXca2 .label text,#mermaid-svg-ka6b71vIyEnnXca2 span{fill:#333;color:#333;}#mermaid-svg-ka6b71vIyEnnXca2 .node rect,#mermaid-svg-ka6b71vIyEnnXca2 .node circle,#mermaid-svg-ka6b71vIyEnnXca2 .node ellipse,#mermaid-svg-ka6b71vIyEnnXca2 .node polygon,#mermaid-svg-ka6b71vIyEnnXca2 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ka6b71vIyEnnXca2 .node .label{text-align:center;}#mermaid-svg-ka6b71vIyEnnXca2 .node.clickable{cursor:pointer;}#mermaid-svg-ka6b71vIyEnnXca2 .arrowheadPath{fill:#333333;}#mermaid-svg-ka6b71vIyEnnXca2 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ka6b71vIyEnnXca2 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ka6b71vIyEnnXca2 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-ka6b71vIyEnnXca2 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-ka6b71vIyEnnXca2 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ka6b71vIyEnnXca2 .cluster text{fill:#333;}#mermaid-svg-ka6b71vIyEnnXca2 .cluster span{color:#333;}#mermaid-svg-ka6b71vIyEnnXca2 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ka6b71vIyEnnXca2 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 常见的监听事件 1. 监听数据的变化 get 节点 -w 2. 监听子节点增删的变化 ls 节点 -w 监听数据的变化 监听子节点增删的变化 客户端向服务端写入数据 客户端向服务端Leader节点写入 流程 Leader会传递给Follower去写入如果 超半数的zookeeper都写入成功则Leader服务端机器会告诉客户端数据写入成功 剩下Follower还未写入的Leader会慢慢通知他们写入反正最终zookeeper服务端集群内所有机器都写入成功 客户端向服务端Follower节点写入 流程 Follower会先将 客户端的写入请求转给LeaderLeader自己将写入请求先执行在将这个写入请求分发给集群内所有Follower机器 所有集群中超过半数的zookeeper都写入成功则Leader会告知当初最开始那台Follower机器说明此次写入成功然后由该台Follower告知客户端集群此次写入成功 Paxos算法每个节点都可以提议者 Paxos算法 基于消息传递且具有高度容错特性的一致性算法。快速正确的在一个分布式系统保持数据值一致保证无论发生任何异常都不会破坏系统的一致性   Propose提议 任务编号   Proposal提案 任务编号任务内容 #mermaid-svg-pwNYm8Tl7MaUvGYM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pwNYm8Tl7MaUvGYM .error-icon{fill:#552222;}#mermaid-svg-pwNYm8Tl7MaUvGYM .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-pwNYm8Tl7MaUvGYM .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-pwNYm8Tl7MaUvGYM .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-pwNYm8Tl7MaUvGYM .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-pwNYm8Tl7MaUvGYM .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-pwNYm8Tl7MaUvGYM .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-pwNYm8Tl7MaUvGYM .marker{fill:#333333;stroke:#333333;}#mermaid-svg-pwNYm8Tl7MaUvGYM .marker.cross{stroke:#333333;}#mermaid-svg-pwNYm8Tl7MaUvGYM svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-pwNYm8Tl7MaUvGYM .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-pwNYm8Tl7MaUvGYM .cluster-label text{fill:#333;}#mermaid-svg-pwNYm8Tl7MaUvGYM .cluster-label span{color:#333;}#mermaid-svg-pwNYm8Tl7MaUvGYM .label text,#mermaid-svg-pwNYm8Tl7MaUvGYM span{fill:#333;color:#333;}#mermaid-svg-pwNYm8Tl7MaUvGYM .node rect,#mermaid-svg-pwNYm8Tl7MaUvGYM .node circle,#mermaid-svg-pwNYm8Tl7MaUvGYM .node ellipse,#mermaid-svg-pwNYm8Tl7MaUvGYM .node polygon,#mermaid-svg-pwNYm8Tl7MaUvGYM .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-pwNYm8Tl7MaUvGYM .node .label{text-align:center;}#mermaid-svg-pwNYm8Tl7MaUvGYM .node.clickable{cursor:pointer;}#mermaid-svg-pwNYm8Tl7MaUvGYM .arrowheadPath{fill:#333333;}#mermaid-svg-pwNYm8Tl7MaUvGYM .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-pwNYm8Tl7MaUvGYM .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-pwNYm8Tl7MaUvGYM .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-pwNYm8Tl7MaUvGYM .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-pwNYm8Tl7MaUvGYM .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-pwNYm8Tl7MaUvGYM .cluster text{fill:#333;}#mermaid-svg-pwNYm8Tl7MaUvGYM .cluster span{color:#333;}#mermaid-svg-pwNYm8Tl7MaUvGYM div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-pwNYm8Tl7MaUvGYM :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Paxos角色Zookeeper系统中所有节点节点可以拥有多角色 提议者proposer 接受者acceptor 学习者learner #mermaid-svg-28lfFkXnd525EjGN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-28lfFkXnd525EjGN .error-icon{fill:#552222;}#mermaid-svg-28lfFkXnd525EjGN .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-28lfFkXnd525EjGN .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-28lfFkXnd525EjGN .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-28lfFkXnd525EjGN .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-28lfFkXnd525EjGN .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-28lfFkXnd525EjGN .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-28lfFkXnd525EjGN .marker{fill:#333333;stroke:#333333;}#mermaid-svg-28lfFkXnd525EjGN .marker.cross{stroke:#333333;}#mermaid-svg-28lfFkXnd525EjGN svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-28lfFkXnd525EjGN .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-28lfFkXnd525EjGN .cluster-label text{fill:#333;}#mermaid-svg-28lfFkXnd525EjGN .cluster-label span{color:#333;}#mermaid-svg-28lfFkXnd525EjGN .label text,#mermaid-svg-28lfFkXnd525EjGN span{fill:#333;color:#333;}#mermaid-svg-28lfFkXnd525EjGN .node rect,#mermaid-svg-28lfFkXnd525EjGN .node circle,#mermaid-svg-28lfFkXnd525EjGN .node ellipse,#mermaid-svg-28lfFkXnd525EjGN .node polygon,#mermaid-svg-28lfFkXnd525EjGN .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-28lfFkXnd525EjGN .node .label{text-align:center;}#mermaid-svg-28lfFkXnd525EjGN .node.clickable{cursor:pointer;}#mermaid-svg-28lfFkXnd525EjGN .arrowheadPath{fill:#333333;}#mermaid-svg-28lfFkXnd525EjGN .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-28lfFkXnd525EjGN .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-28lfFkXnd525EjGN .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-28lfFkXnd525EjGN .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-28lfFkXnd525EjGN .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-28lfFkXnd525EjGN .cluster text{fill:#333;}#mermaid-svg-28lfFkXnd525EjGN .cluster span{color:#333;}#mermaid-svg-28lfFkXnd525EjGN div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-28lfFkXnd525EjGN :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Paxos主要阶段 准备阶段提议者向接受者发送一个提议编号接受者如果收到的提议编号比自己已经接受的提议编号大接受该提议并返回自己已经接受的提议编号和值 提议阶段提议者收到了大多数接受者的接受提议者向所有接受者发送一个提议包括提议编号和值。 学习阶段一旦某值被大多数接受者接受学习者就可以学习到这个值并应用到系统中 #mermaid-svg-9K0zK51ZauBrdkoG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9K0zK51ZauBrdkoG .error-icon{fill:#552222;}#mermaid-svg-9K0zK51ZauBrdkoG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9K0zK51ZauBrdkoG .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-9K0zK51ZauBrdkoG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9K0zK51ZauBrdkoG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9K0zK51ZauBrdkoG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9K0zK51ZauBrdkoG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9K0zK51ZauBrdkoG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9K0zK51ZauBrdkoG .marker.cross{stroke:#333333;}#mermaid-svg-9K0zK51ZauBrdkoG svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9K0zK51ZauBrdkoG .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9K0zK51ZauBrdkoG .cluster-label text{fill:#333;}#mermaid-svg-9K0zK51ZauBrdkoG .cluster-label span{color:#333;}#mermaid-svg-9K0zK51ZauBrdkoG .label text,#mermaid-svg-9K0zK51ZauBrdkoG span{fill:#333;color:#333;}#mermaid-svg-9K0zK51ZauBrdkoG .node rect,#mermaid-svg-9K0zK51ZauBrdkoG .node circle,#mermaid-svg-9K0zK51ZauBrdkoG .node ellipse,#mermaid-svg-9K0zK51ZauBrdkoG .node polygon,#mermaid-svg-9K0zK51ZauBrdkoG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9K0zK51ZauBrdkoG .node .label{text-align:center;}#mermaid-svg-9K0zK51ZauBrdkoG .node.clickable{cursor:pointer;}#mermaid-svg-9K0zK51ZauBrdkoG .arrowheadPath{fill:#333333;}#mermaid-svg-9K0zK51ZauBrdkoG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9K0zK51ZauBrdkoG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9K0zK51ZauBrdkoG .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-9K0zK51ZauBrdkoG .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-9K0zK51ZauBrdkoG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9K0zK51ZauBrdkoG .cluster text{fill:#333;}#mermaid-svg-9K0zK51ZauBrdkoG .cluster span{color:#333;}#mermaid-svg-9K0zK51ZauBrdkoG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9K0zK51ZauBrdkoG :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 接受者收到提案者空白提案请求时的原则 不在接受提案ID小于等于当前收到的 不在接受提案落档中提案ID小于当前的 不违背以前做出的承诺 Paxos算法完美情况 Paxos算法弊端 ZAB协议算法 - Paxos算法的改良 - 集群仅能一位提议者即Leader 认识 概念 只有一台客户端(Leader)负责处理外部的写事务请求然后Leader客户端将数据同步到其他Follower节点。即Zookeeper只有一个Leader可以发起提案 #mermaid-svg-QfZUNRnVPmLQkrgC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QfZUNRnVPmLQkrgC .error-icon{fill:#552222;}#mermaid-svg-QfZUNRnVPmLQkrgC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QfZUNRnVPmLQkrgC .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-QfZUNRnVPmLQkrgC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QfZUNRnVPmLQkrgC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QfZUNRnVPmLQkrgC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QfZUNRnVPmLQkrgC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QfZUNRnVPmLQkrgC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QfZUNRnVPmLQkrgC .marker.cross{stroke:#333333;}#mermaid-svg-QfZUNRnVPmLQkrgC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QfZUNRnVPmLQkrgC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QfZUNRnVPmLQkrgC .cluster-label text{fill:#333;}#mermaid-svg-QfZUNRnVPmLQkrgC .cluster-label span{color:#333;}#mermaid-svg-QfZUNRnVPmLQkrgC .label text,#mermaid-svg-QfZUNRnVPmLQkrgC span{fill:#333;color:#333;}#mermaid-svg-QfZUNRnVPmLQkrgC .node rect,#mermaid-svg-QfZUNRnVPmLQkrgC .node circle,#mermaid-svg-QfZUNRnVPmLQkrgC .node ellipse,#mermaid-svg-QfZUNRnVPmLQkrgC .node polygon,#mermaid-svg-QfZUNRnVPmLQkrgC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QfZUNRnVPmLQkrgC .node .label{text-align:center;}#mermaid-svg-QfZUNRnVPmLQkrgC .node.clickable{cursor:pointer;}#mermaid-svg-QfZUNRnVPmLQkrgC .arrowheadPath{fill:#333333;}#mermaid-svg-QfZUNRnVPmLQkrgC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QfZUNRnVPmLQkrgC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QfZUNRnVPmLQkrgC .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-QfZUNRnVPmLQkrgC .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-QfZUNRnVPmLQkrgC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QfZUNRnVPmLQkrgC .cluster text{fill:#333;}#mermaid-svg-QfZUNRnVPmLQkrgC .cluster span{color:#333;}#mermaid-svg-QfZUNRnVPmLQkrgC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QfZUNRnVPmLQkrgC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ZAB模式 消息广播 崩溃恢复 #mermaid-svg-Om3Ciw0C3pSjS1gS {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Om3Ciw0C3pSjS1gS .error-icon{fill:#552222;}#mermaid-svg-Om3Ciw0C3pSjS1gS .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Om3Ciw0C3pSjS1gS .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Om3Ciw0C3pSjS1gS .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Om3Ciw0C3pSjS1gS .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Om3Ciw0C3pSjS1gS .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Om3Ciw0C3pSjS1gS .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Om3Ciw0C3pSjS1gS .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Om3Ciw0C3pSjS1gS .marker.cross{stroke:#333333;}#mermaid-svg-Om3Ciw0C3pSjS1gS svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Om3Ciw0C3pSjS1gS .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Om3Ciw0C3pSjS1gS .cluster-label text{fill:#333;}#mermaid-svg-Om3Ciw0C3pSjS1gS .cluster-label span{color:#333;}#mermaid-svg-Om3Ciw0C3pSjS1gS .label text,#mermaid-svg-Om3Ciw0C3pSjS1gS span{fill:#333;color:#333;}#mermaid-svg-Om3Ciw0C3pSjS1gS .node rect,#mermaid-svg-Om3Ciw0C3pSjS1gS .node circle,#mermaid-svg-Om3Ciw0C3pSjS1gS .node ellipse,#mermaid-svg-Om3Ciw0C3pSjS1gS .node polygon,#mermaid-svg-Om3Ciw0C3pSjS1gS .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Om3Ciw0C3pSjS1gS .node .label{text-align:center;}#mermaid-svg-Om3Ciw0C3pSjS1gS .node.clickable{cursor:pointer;}#mermaid-svg-Om3Ciw0C3pSjS1gS .arrowheadPath{fill:#333333;}#mermaid-svg-Om3Ciw0C3pSjS1gS .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Om3Ciw0C3pSjS1gS .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Om3Ciw0C3pSjS1gS .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-Om3Ciw0C3pSjS1gS .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-Om3Ciw0C3pSjS1gS .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Om3Ciw0C3pSjS1gS .cluster text{fill:#333;}#mermaid-svg-Om3Ciw0C3pSjS1gS .cluster span{color:#333;}#mermaid-svg-Om3Ciw0C3pSjS1gS div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Om3Ciw0C3pSjS1gS :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} ZAB针对事务处理过程两阶段 广播事务阶段 广播事务提交操作 #mermaid-svg-XrMMb7BeyfCrGYAB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-XrMMb7BeyfCrGYAB .error-icon{fill:#552222;}#mermaid-svg-XrMMb7BeyfCrGYAB .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XrMMb7BeyfCrGYAB .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-XrMMb7BeyfCrGYAB .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XrMMb7BeyfCrGYAB .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XrMMb7BeyfCrGYAB .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XrMMb7BeyfCrGYAB .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XrMMb7BeyfCrGYAB .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XrMMb7BeyfCrGYAB .marker.cross{stroke:#333333;}#mermaid-svg-XrMMb7BeyfCrGYAB svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XrMMb7BeyfCrGYAB .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XrMMb7BeyfCrGYAB .cluster-label text{fill:#333;}#mermaid-svg-XrMMb7BeyfCrGYAB .cluster-label span{color:#333;}#mermaid-svg-XrMMb7BeyfCrGYAB .label text,#mermaid-svg-XrMMb7BeyfCrGYAB span{fill:#333;color:#333;}#mermaid-svg-XrMMb7BeyfCrGYAB .node rect,#mermaid-svg-XrMMb7BeyfCrGYAB .node circle,#mermaid-svg-XrMMb7BeyfCrGYAB .node ellipse,#mermaid-svg-XrMMb7BeyfCrGYAB .node polygon,#mermaid-svg-XrMMb7BeyfCrGYAB .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XrMMb7BeyfCrGYAB .node .label{text-align:center;}#mermaid-svg-XrMMb7BeyfCrGYAB .node.clickable{cursor:pointer;}#mermaid-svg-XrMMb7BeyfCrGYAB .arrowheadPath{fill:#333333;}#mermaid-svg-XrMMb7BeyfCrGYAB .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XrMMb7BeyfCrGYAB .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XrMMb7BeyfCrGYAB .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-XrMMb7BeyfCrGYAB .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-XrMMb7BeyfCrGYAB .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XrMMb7BeyfCrGYAB .cluster text{fill:#333;}#mermaid-svg-XrMMb7BeyfCrGYAB .cluster span{color:#333;}#mermaid-svg-XrMMb7BeyfCrGYAB div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-XrMMb7BeyfCrGYAB :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 1. 客户端发起一个写操作请求 2. Leader服务器将客户端的请求转化为事务Proposal提案同时为每个Proposal分配一个全局的ID,即zxid 3. Leader服务器为每个Follower服务器分配一个单独的队列然后将需要广播的Proposal依次放到队列中去并且根据FIFO策略进行消息发送 4. Follower接收到Proposal后会首先将其以事务日志的方式写入本地磁盘中写入成功后向Leader反馈一个Ack响应消息 5. Leader接收到超过半数以上Follower的Ack响应消息后即认为消息发送成功可以发送commit消息 6. Leaderl向所有Follower广播commit消息同时自身也会完成事务提交。Follower接收到commit消息后会将上一条事务提交 此图对应的是上图的流程图 崩溃恢复 #mermaid-svg-KdJzV2paFIJHuQAU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-KdJzV2paFIJHuQAU .error-icon{fill:#552222;}#mermaid-svg-KdJzV2paFIJHuQAU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KdJzV2paFIJHuQAU .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-KdJzV2paFIJHuQAU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KdJzV2paFIJHuQAU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KdJzV2paFIJHuQAU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KdJzV2paFIJHuQAU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KdJzV2paFIJHuQAU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KdJzV2paFIJHuQAU .marker.cross{stroke:#333333;}#mermaid-svg-KdJzV2paFIJHuQAU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KdJzV2paFIJHuQAU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-KdJzV2paFIJHuQAU .cluster-label text{fill:#333;}#mermaid-svg-KdJzV2paFIJHuQAU .cluster-label span{color:#333;}#mermaid-svg-KdJzV2paFIJHuQAU .label text,#mermaid-svg-KdJzV2paFIJHuQAU span{fill:#333;color:#333;}#mermaid-svg-KdJzV2paFIJHuQAU .node rect,#mermaid-svg-KdJzV2paFIJHuQAU .node circle,#mermaid-svg-KdJzV2paFIJHuQAU .node ellipse,#mermaid-svg-KdJzV2paFIJHuQAU .node polygon,#mermaid-svg-KdJzV2paFIJHuQAU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-KdJzV2paFIJHuQAU .node .label{text-align:center;}#mermaid-svg-KdJzV2paFIJHuQAU .node.clickable{cursor:pointer;}#mermaid-svg-KdJzV2paFIJHuQAU .arrowheadPath{fill:#333333;}#mermaid-svg-KdJzV2paFIJHuQAU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-KdJzV2paFIJHuQAU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-KdJzV2paFIJHuQAU .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-KdJzV2paFIJHuQAU .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-KdJzV2paFIJHuQAU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-KdJzV2paFIJHuQAU .cluster text{fill:#333;}#mermaid-svg-KdJzV2paFIJHuQAU .cluster span{color:#333;}#mermaid-svg-KdJzV2paFIJHuQAU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-KdJzV2paFIJHuQAU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Zab协议崩溃恢复同时满足的要求 1. 已经产生提交Proposal的提案过半数都AckFollower必须执行 2. 未提交的提案直接丢弃 - 未proposal给follower的提案 Leader挂重新选举 #mermaid-svg-VufR84guyLDTcZ51 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-VufR84guyLDTcZ51 .error-icon{fill:#552222;}#mermaid-svg-VufR84guyLDTcZ51 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VufR84guyLDTcZ51 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-VufR84guyLDTcZ51 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VufR84guyLDTcZ51 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VufR84guyLDTcZ51 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VufR84guyLDTcZ51 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VufR84guyLDTcZ51 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VufR84guyLDTcZ51 .marker.cross{stroke:#333333;}#mermaid-svg-VufR84guyLDTcZ51 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VufR84guyLDTcZ51 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VufR84guyLDTcZ51 .cluster-label text{fill:#333;}#mermaid-svg-VufR84guyLDTcZ51 .cluster-label span{color:#333;}#mermaid-svg-VufR84guyLDTcZ51 .label text,#mermaid-svg-VufR84guyLDTcZ51 span{fill:#333;color:#333;}#mermaid-svg-VufR84guyLDTcZ51 .node rect,#mermaid-svg-VufR84guyLDTcZ51 .node circle,#mermaid-svg-VufR84guyLDTcZ51 .node ellipse,#mermaid-svg-VufR84guyLDTcZ51 .node polygon,#mermaid-svg-VufR84guyLDTcZ51 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VufR84guyLDTcZ51 .node .label{text-align:center;}#mermaid-svg-VufR84guyLDTcZ51 .node.clickable{cursor:pointer;}#mermaid-svg-VufR84guyLDTcZ51 .arrowheadPath{fill:#333333;}#mermaid-svg-VufR84guyLDTcZ51 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VufR84guyLDTcZ51 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VufR84guyLDTcZ51 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-VufR84guyLDTcZ51 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-VufR84guyLDTcZ51 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VufR84guyLDTcZ51 .cluster text{fill:#333;}#mermaid-svg-VufR84guyLDTcZ51 .cluster span{color:#333;}#mermaid-svg-VufR84guyLDTcZ51 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VufR84guyLDTcZ51 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 新Leader满足要求 1. 新Leader必须都是己经提交了Proposall的Follower服务器节点 2. 新选举的Leader节点中含有最大的zxid)这样做的好处是可以避免Leader服务器检查Proposal的提交和丢弃工作 数据恢复 #mermaid-svg-43BQ4akTgqfSCJlU {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-43BQ4akTgqfSCJlU .error-icon{fill:#552222;}#mermaid-svg-43BQ4akTgqfSCJlU .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-43BQ4akTgqfSCJlU .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-43BQ4akTgqfSCJlU .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-43BQ4akTgqfSCJlU .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-43BQ4akTgqfSCJlU .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-43BQ4akTgqfSCJlU .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-43BQ4akTgqfSCJlU .marker{fill:#333333;stroke:#333333;}#mermaid-svg-43BQ4akTgqfSCJlU .marker.cross{stroke:#333333;}#mermaid-svg-43BQ4akTgqfSCJlU svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-43BQ4akTgqfSCJlU .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-43BQ4akTgqfSCJlU .cluster-label text{fill:#333;}#mermaid-svg-43BQ4akTgqfSCJlU .cluster-label span{color:#333;}#mermaid-svg-43BQ4akTgqfSCJlU .label text,#mermaid-svg-43BQ4akTgqfSCJlU span{fill:#333;color:#333;}#mermaid-svg-43BQ4akTgqfSCJlU .node rect,#mermaid-svg-43BQ4akTgqfSCJlU .node circle,#mermaid-svg-43BQ4akTgqfSCJlU .node ellipse,#mermaid-svg-43BQ4akTgqfSCJlU .node polygon,#mermaid-svg-43BQ4akTgqfSCJlU .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-43BQ4akTgqfSCJlU .node .label{text-align:center;}#mermaid-svg-43BQ4akTgqfSCJlU .node.clickable{cursor:pointer;}#mermaid-svg-43BQ4akTgqfSCJlU .arrowheadPath{fill:#333333;}#mermaid-svg-43BQ4akTgqfSCJlU .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-43BQ4akTgqfSCJlU .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-43BQ4akTgqfSCJlU .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-43BQ4akTgqfSCJlU .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-43BQ4akTgqfSCJlU .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-43BQ4akTgqfSCJlU .cluster text{fill:#333;}#mermaid-svg-43BQ4akTgqfSCJlU .cluster span{color:#333;}#mermaid-svg-43BQ4akTgqfSCJlU div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-43BQ4akTgqfSCJlU :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 数据恢复 新Leader选举 开始接收客户端请求前首先确认事务日志的所有过半同意的提案已经commit 某个Follower同步完成Leader的提案后才会将其加入到真正可用的Follower列表中 CAP理伦 分布式系统最多同时满足CAP其中的两项不可能三项同时满足   Zookeeper满足的是CP的两项要求 #mermaid-svg-vG177mwDa1kJHDqG {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-vG177mwDa1kJHDqG .error-icon{fill:#552222;}#mermaid-svg-vG177mwDa1kJHDqG .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-vG177mwDa1kJHDqG .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-vG177mwDa1kJHDqG .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-vG177mwDa1kJHDqG .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-vG177mwDa1kJHDqG .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-vG177mwDa1kJHDqG .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-vG177mwDa1kJHDqG .marker{fill:#333333;stroke:#333333;}#mermaid-svg-vG177mwDa1kJHDqG .marker.cross{stroke:#333333;}#mermaid-svg-vG177mwDa1kJHDqG svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-vG177mwDa1kJHDqG .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-vG177mwDa1kJHDqG .cluster-label text{fill:#333;}#mermaid-svg-vG177mwDa1kJHDqG .cluster-label span{color:#333;}#mermaid-svg-vG177mwDa1kJHDqG .label text,#mermaid-svg-vG177mwDa1kJHDqG span{fill:#333;color:#333;}#mermaid-svg-vG177mwDa1kJHDqG .node rect,#mermaid-svg-vG177mwDa1kJHDqG .node circle,#mermaid-svg-vG177mwDa1kJHDqG .node ellipse,#mermaid-svg-vG177mwDa1kJHDqG .node polygon,#mermaid-svg-vG177mwDa1kJHDqG .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-vG177mwDa1kJHDqG .node .label{text-align:center;}#mermaid-svg-vG177mwDa1kJHDqG .node.clickable{cursor:pointer;}#mermaid-svg-vG177mwDa1kJHDqG .arrowheadPath{fill:#333333;}#mermaid-svg-vG177mwDa1kJHDqG .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-vG177mwDa1kJHDqG .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-vG177mwDa1kJHDqG .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-vG177mwDa1kJHDqG .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-vG177mwDa1kJHDqG .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-vG177mwDa1kJHDqG .cluster text{fill:#333;}#mermaid-svg-vG177mwDa1kJHDqG .cluster span{color:#333;}#mermaid-svg-vG177mwDa1kJHDqG div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-vG177mwDa1kJHDqG :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} CAP 一致性Consistency集群之间的数据保持一致 可用性Available系统服务一直可用且保证用户每个操作能在有限时间返回结果 分区容错性Partition Tolerance遇到网络分区故障仍然能对外提供可用服务 #mermaid-svg-kyJgS1a8FyRq9Don {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-kyJgS1a8FyRq9Don .error-icon{fill:#552222;}#mermaid-svg-kyJgS1a8FyRq9Don .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-kyJgS1a8FyRq9Don .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-kyJgS1a8FyRq9Don .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-kyJgS1a8FyRq9Don .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-kyJgS1a8FyRq9Don .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-kyJgS1a8FyRq9Don .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-kyJgS1a8FyRq9Don .marker{fill:#333333;stroke:#333333;}#mermaid-svg-kyJgS1a8FyRq9Don .marker.cross{stroke:#333333;}#mermaid-svg-kyJgS1a8FyRq9Don svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-kyJgS1a8FyRq9Don .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-kyJgS1a8FyRq9Don .cluster-label text{fill:#333;}#mermaid-svg-kyJgS1a8FyRq9Don .cluster-label span{color:#333;}#mermaid-svg-kyJgS1a8FyRq9Don .label text,#mermaid-svg-kyJgS1a8FyRq9Don span{fill:#333;color:#333;}#mermaid-svg-kyJgS1a8FyRq9Don .node rect,#mermaid-svg-kyJgS1a8FyRq9Don .node circle,#mermaid-svg-kyJgS1a8FyRq9Don .node ellipse,#mermaid-svg-kyJgS1a8FyRq9Don .node polygon,#mermaid-svg-kyJgS1a8FyRq9Don .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-kyJgS1a8FyRq9Don .node .label{text-align:center;}#mermaid-svg-kyJgS1a8FyRq9Don .node.clickable{cursor:pointer;}#mermaid-svg-kyJgS1a8FyRq9Don .arrowheadPath{fill:#333333;}#mermaid-svg-kyJgS1a8FyRq9Don .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-kyJgS1a8FyRq9Don .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-kyJgS1a8FyRq9Don .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-kyJgS1a8FyRq9Don .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-kyJgS1a8FyRq9Don .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-kyJgS1a8FyRq9Don .cluster text{fill:#333;}#mermaid-svg-kyJgS1a8FyRq9Don .cluster span{color:#333;}#mermaid-svg-kyJgS1a8FyRq9Don div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-kyJgS1a8FyRq9Don :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 为什么Zookeeper不满足A 极端情况下服务端会丢弃一些客户端请求 进行Leader选举时集群不可用 脚本 集群统一启动、关闭、状态查看脚本 zk.sh #!/bin/bash # 运行此脚本前必须把当前机器人的公私密钥给到目标运行机器 要不然每次运行此脚本时都会叫你输入每台目标机器的密码 # 命令1本机生成RSA公私密钥ssh-keygen -t rsa # 命令2将密钥传给目标三台机器即192.168.19.107、192.168.19.108、192.168.19.109 ssh-copy-id root目标机器IPfor currentHostName in 192.168.19.107 192.168.19.108 192.168.19.109 doecho zookeeper【${currentHostName}】【$1】case $1 instart) {ssh $currentHostName cd /opt/module/zookeeper-3.9.1 sh bin/zkServer.sh start};;stop) {ssh $currentHostName cd /opt/module/zookeeper-3.9.1 sh bin/zkServer.sh stop};;status) {ssh $currentHostName cd /opt/module/zookeeper-3.9.1 sh bin/zkServer.sh status};;*) {echo 未知命令仅支持start|stop|status}esacdone 源码分析粗略 辅助源码 持久化 数据存储 集群中的数据会在内存树、磁盘中各存一份   接口 快照【org.apache.zookeeper.server.persistence.SnapShot】、事务记录【org.apache.zookeeper.server.persistence.TxnLog】   事务日志txnlog ZooKeeper会将所有的写操作以事务的形式记录在事务日志中这些写操作包括创建节点、更新节点数据、删除节点等。事务日志是一个追加写的日志文件用于记录每个写操作的详细信息。通过事务日志ZooKeeper可以保证数据的一致性和持久性   快照snapshot ZooKeeper定期会生成一个快照文件用于保存当前内存中所有节点的状态。快照文件包含了所有节点的数据和元数据信息。当ZooKeeper服务器启动时会首先加载最新的快照文件然后通过回放事务日志来恢复到最新的状态。   Zookeeper启动数据恢复流程 先加载最新的快照文件然后通过回放事务日志来将数据恢复到最新的状态 序列化 接口 序列化、反序列化【org.apache.jute.Record】 服务端启动流程 入口类 org.apache.zookeeper.server.quorum.QuorumPeerMain#main 服务端选举Leader流程 Leader、Follower数据同步流程 概括 Follower必须去看Leader保持一致而不是Leader跟Follower保持一致   【Follower】Learner org.apache.zookeeper.server.quorum.Learner#registerWithLeader   【Leader】LearnerHandler org.apache.zookeeper.server.quorum.LearnerHandler#run #mermaid-svg-bPKGUQvFvXbGIl6U {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-bPKGUQvFvXbGIl6U .error-icon{fill:#552222;}#mermaid-svg-bPKGUQvFvXbGIl6U .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-bPKGUQvFvXbGIl6U .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-bPKGUQvFvXbGIl6U .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-bPKGUQvFvXbGIl6U .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-bPKGUQvFvXbGIl6U .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-bPKGUQvFvXbGIl6U .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-bPKGUQvFvXbGIl6U .marker{fill:#333333;stroke:#333333;}#mermaid-svg-bPKGUQvFvXbGIl6U .marker.cross{stroke:#333333;}#mermaid-svg-bPKGUQvFvXbGIl6U svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-bPKGUQvFvXbGIl6U .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-bPKGUQvFvXbGIl6U .cluster-label text{fill:#333;}#mermaid-svg-bPKGUQvFvXbGIl6U .cluster-label span{color:#333;}#mermaid-svg-bPKGUQvFvXbGIl6U .label text,#mermaid-svg-bPKGUQvFvXbGIl6U span{fill:#333;color:#333;}#mermaid-svg-bPKGUQvFvXbGIl6U .node rect,#mermaid-svg-bPKGUQvFvXbGIl6U .node circle,#mermaid-svg-bPKGUQvFvXbGIl6U .node ellipse,#mermaid-svg-bPKGUQvFvXbGIl6U .node polygon,#mermaid-svg-bPKGUQvFvXbGIl6U .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-bPKGUQvFvXbGIl6U .node .label{text-align:center;}#mermaid-svg-bPKGUQvFvXbGIl6U .node.clickable{cursor:pointer;}#mermaid-svg-bPKGUQvFvXbGIl6U .arrowheadPath{fill:#333333;}#mermaid-svg-bPKGUQvFvXbGIl6U .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-bPKGUQvFvXbGIl6U .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-bPKGUQvFvXbGIl6U .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-bPKGUQvFvXbGIl6U .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-bPKGUQvFvXbGIl6U .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-bPKGUQvFvXbGIl6U .cluster text{fill:#333;}#mermaid-svg-bPKGUQvFvXbGIl6U .cluster span{color:#333;}#mermaid-svg-bPKGUQvFvXbGIl6U div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-bPKGUQvFvXbGIl6U :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 差异化同步 回滚同步 提交同步 全量同步 同步方式 DiffLeader、Follower都一样无需任何操作 Trunc FollowerFollower的事务ID比Leader大则Follower回滚成跟Leader一致 CommitLeader的事务ID比Follower大则Leader同步提案给Follower执行成一致 Follower没任何数据则Leader以Snap方式同步执行恢复给Follower 服务端Leader启动Zk过程 核心 org.apache.zookeeper.server.quorum.Leader#startZkServer 服务端Follower启动Zk过程 核心 org.apache.zookeeper.server.quorum.Follower#followLeader 客户端连接Zk服务端过程 核心入口 org.apache.zookeeper.ZooKeeperMain#main 刚兴趣的同行可以进群沟通交流内置机器人供大家愉快
http://www.pierceye.com/news/842182/

相关文章:

  • 做推广赚钱的网站如何制作网站策划书
  • 微信公众号商城网站开发能不能不用虚拟主机建设网站
  • iis 网站目录权限vps网站无法通过ip访问
  • 重庆关键词优化咸阳seo培训
  • 专业网站建设分类标准嘉兴网络项目建站公司
  • 做婚礼网站的公司简介网页打不开怎么办页面无法显示
  • 怎么套用模板做网站白嫖二级域名
  • 网站如何进行备案建立平台的步骤
  • 济南免费网站建设网站用什么软件编写
  • 网站如何注册微信公众平台 类型站长要维护网站
  • 美食类网站模板有的网站为什么打不开怎么回事
  • 平面设计网站导航1万元可以注册公司吗
  • 做网站接口多少钱怎样做旅游网站
  • dw制作旅游网站教程天津市区县档案部门网站建设指导意见
  • 关于网站建设的大学pinthis wordpress
  • 济宁 做网站企业做外贸网站常用术语
  • 国内优秀的设计网站推荐网页设计工作室赚钱吗
  • 商汇通网站广州白云学校网站建设
  • 茶叶企业建设网站php网站开发基础
  • 深圳网站建设 猴王网络地方信息网站源码
  • 微网站后台内容设置erp系统定制
  • 图片点击切换网站模板网站开发 北京外包公司
  • 网站正在建设中 免费东莞手机网站设计公司
  • 旅游网站开发成本包括企业管理控制系统
  • 青浦做网站中美最新局势分析
  • 高端网站建设公司哪家公司好有关网站开发的知识
  • 西宁做网站_君博示范cpa做电影网站侵权吗
  • 云梦网站开发什么是网络营销市场营销学
  • 六安建六安建设网站徐州招标信息网
  • 公司做一个网站内容如何设计方案效果图网址