####二阶段提交(Two-Phase Commit)
投票和执行
+ 协调者向参与者发送事务内容,询问是否可以提交,各参与者节点执行事务并向协调者反馈
+ 如果所有参与者反馈yes,那么提交事务;如果有no或者超时,中断事务回滚。参与者执行完操作后再向协调者发送ack消息; 协调者收到ack消息,完

Paxos算法

提高分布式系统容错性的一致性算法

三个角色

Proposer(提案人),Acceptor(接收人),Learner(学习人)

一个提案被选定需要被半数以上的Acceptor接受

chubby的Quorum机制

过半机制

chubby分布式锁处理

  • 锁延迟,如果锁因为异常情况被释放,chubby会为锁保留一定时间,类似自旋等待
  • 锁序列器,锁的持有者向chubby请求一个锁序列器,包括锁名字,模式,序号,服务端检测验证

Zookeeper

所有机器通过选举确定Leader。Follower和Observer都能提供读服务,Observer机不参与Leader选举过程,也不参与过半写成功策略。

机器节点和数据节点

机器节点是集群中的机器,数据节点是数据模型中的数据单元-Znode,所有数据存储在内存中,数据模型就是一棵树Znode Tree

ZAB(Zookeeper Atomic Broadcast)原子广播协议

崩溃恢复(恢复模式下选举产生新的Leader)和消息广播,其中消息广播协议是基于具有FIFO特性的tcp协议来进行网络通信的,因此容易保证广播过程中消息接受与发送的顺序性


####安装单机伪分布式zk
```bash
cd /usr/local/src/
tar xvf zookeeper-3.4.11.tar.gz
mv zookeeper-3.4.11 ../zookeeper00
cd ../zookeeper00/
cd conf/
cp zoo_sample.cfg zoo.cfg

cd ../

mkdir {dataDir,dataLogDir}

cd dataDir/

vim myid # 配置该节点的id为1

cp zookeeper00 zookeeper01 -rf

cp zookeeper00 zookeeper02 -rf

<span id="config">
####节点1配置文件
其他节点修改clientPort端口号和dataDir,dataLogDir对应路径,创建对应的myid为2和3
```bash
[root@sjck-node03 conf]# cat zoo.cfg
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/zookeeper00/dataDir
dataLogDir=/usr/local/zookeeper00/dataLogDir
# the port at which the clients will connect
clientPort=2181
# master
server.1=172.16.67.131:2888:3888
server.2=172.16.67.131:2889:3889
server.3=172.16.67.131:2890:3890

####简单集群zk监控脚本
```bash
[root@sjck-node03 zk]# cd /home/soft/zk/
[root@sjck-node03 zk]# cat start.sh
#!/bin/bash
/usr/local/zookeeper00/bin/zkServer.sh start
/usr/local/zookeeper01/bin/zkServer.sh start
/usr/local/zookeeper02/bin/zkServer.sh start
[root@sjck-node03 zk]# cat stop.sh
#!/bin/bash
/usr/local/zookeeper00/bin/zkServer.sh stop
/usr/local/zookeeper01/bin/zkServer.sh stop
/usr/local/zookeeper02/bin/zkServer.sh stop
[root@sjck-node03 zk]# cat checkzk.sh
#!/bin/bash
/usr/local/zookeeper00/bin/zkServer.sh status
/usr/local/zookeeper01/bin/zkServer.sh status
/usr/local/zookeeper02/bin/zkServer.sh status
```
####集群zk状态监控
```bash
[root@sjck-node03 zk]# sh start.sh
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper00/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper01/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper02/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@sjck-node03 zk]# sh checkzk.sh
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper00/bin/../conf/zoo.cfg
Mode: follower
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper01/bin/../conf/zoo.cfg
Mode: leader
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper02/bin/../conf/zoo.cfg
Mode: follower
```
####常用监控命令
jps(Java Virtual Machine Process Status Tool)
查看java进程pid,-l输出完整package名,-v输出jvm参数
```bash
[root@sjck-node03 zk]# jps
7984 Jps
7746 QuorumPeerMain
7804 QuorumPeerMain
7773 QuorumPeerMain
```
####查看监听的端口
netstat -lntp |grep java

####连接
其他节点对应连接,2182,2183端口
```bash
[root@sjck-node03 bin]# ./zkCli.sh -server localhost:2181
```
####创建znode,其他节点连接查看数据是否同步
```bash
[zk: localhost:2181(CONNECTED) 0] create /data test-data
Created /data
[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper, data]
[zk: localhost:2181(CONNECTED) 2] get /data
```
####退出
```bash
[zk: localhost:2181(CONNECTED) 0] quit
```

zookeeper分布式算法和部署的更多相关文章

  1. Zookeeper的安装部署

    1.Zookeeper的安装部署 7.1 Zookeeper工作机制 7.1.1.Zookeeper集群角色 Zookeeper集群的角色:  Leader 和  follower (Observer ...

  2. Hadoop生态圈-zookeeper完全分布式部署

    Hadoop生态圈-zookeeper完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客部署是建立在Hadoop高可用基础之上的,关于Hadoop高可用部署请参 ...

  3. Centos6下zookeeper集群部署记录

    ZooKeeper是一个开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等. Zookeeper设计目的 最终一致性:client不论 ...

  4. zookeeper 单机集成部署

    概述 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等,是很多分布式的基础设置,比如dubbo,k ...

  5. Zookeeper安装和部署

    Zookeeper安装和部署:ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用 ...

  6. 分布式协调服务之Zookeeper集群部署

    一.分布式系统概念 在聊Zookeeper之前,我们先来聊聊什么是分布式系统:所谓分布式系统就是一个系统的软件或硬件组件分布在网络中的不同计算机之上,彼此间通过消息传递进行通信和协作的系统:简单讲就是 ...

  7. HBase集成Zookeeper集群部署

    大数据集群为了保证故障转移,一般通过zookeeper来整体协调管理,当节点数大于等于6个时推荐使用,接下来描述一下Hbase集群部署在zookeeper上的过程: 安装Hbase之前首先系统应该做通 ...

  8. zookeeper安装及部署

    安装及部署 一. 单机安装.配置 1.下载zookeeper二进制安装包 下载 curl -L -O http://apache.fayea.com/zookeeper/stable/zookeepe ...

  9. Zookeeper集群部署

    一. 部署前的准备工作 保证各个主机之间能够正常通信,最好是在同一网段. 修改host文件,加入IP和主机名的映射.方法为修改/etc/hosts和etc/hostname文件,不同的Linux发行版 ...

随机推荐

  1. js javascript变量提升

    var:变量提升(无论声明在何处,都会被提至其所在作用域的顶部) let:无变量提升(所在的块内,未到let声明时(即let声明之前),是无法访问该变量的(not defined)),let变量不能重 ...

  2. 【CodeForces】713 C. Sonya and Problem Wihtout a Legend

    [题目]C. Sonya and Problem Wihtout a Legend [题意]给定n个数字,每次操作可以对一个数字±1,求最少操作次数使数列递增.n<=10^5. [算法]动态规划 ...

  3. 导出数据excel表--身份证号后三位是0--〉还原

    导出数据excel表的身份证号后三位是0,怎么办? 数据导出前,在身份证号前加任意符号即可 例如: 结果

  4. solr笔记之安装部署到tomcat

    1. 下载 solr 去官网下载,下载的时候选清华的镜像源,这个页面:https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.1.0/ 在/ ...

  5. android 图片旋转 移动 放大缩小

    图片的变化主要是matrix的变化,对matrix不懂的可以先了解下matrxi. public class FunnyView extends View { /* * 手指按下时可能是移动 也可能是 ...

  6. Android Service使用简单介绍

    作为一个android初学者,经常对service的使用感到困惑.今天结合Google API 对Service这四大组件之一,进行简单使用说明. 希望对和我一样的初学者有帮助,如有不对的地方,也希望 ...

  7. 福建工程学院寒假作业第三周B题

    第二集 你说,你的女朋友就是你的电脑 TimeLimit:2000ms  MemoryLimit:128000KB 64-bit integer IO format:%lld   Problem De ...

  8. JAVA 之 Tomcat知识框架【转】

    一.Tomcat服务器(很熟悉) 1.Web开发概述 javaSE: javaEE:13种 javaME: JavaEE规范: 13种技术的总称.Servlet/Jsp JDBC JNDI JTA.. ...

  9. 005zabbix3.0报错记录

    一.问题描述 在zabbix_server添加变量时,出现了以下的报错,

  10. javascript你不知道的This

    <你不知道的javascript>这本书读了有好几遍了,似乎每一次读都有新发现,有些内容并不是一下子可以弄懂的,每次读似乎都能明白一些概念.再重读一下this关键字.这个概念非常灵活,也非 ...