####二阶段提交(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. input模拟

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. Debian最完美安装flash的教程//适用于所有linux版本

    话说不管是新手还是老手,都离不开flash.没有flash的支持,菜鸟们也少了一些把玩linux的动力. flash有很多安装的方法,不过性能相差很大.这里的缘由就不重要了. 下面我介绍在chromi ...

  3. CF745 C 并查集

    并查集由于政府不能连通我们可以先按给出的边建立连通块,再将不含有政府的点全部作为一个连通块,边数为(n-1)*n/2然后 贪心地将该连通块与[含政府的.且包含点数最多的]连通块相连,然后由于新增了一些 ...

  4. CF835 C 前缀和

    100*100规模上第一象限坐标系上有1e5规模的点,每个点随时间在同一个值域内(最大10)周期递增,但初始值不同,给出一个矩阵和时间询问此时范围内点的值的和. 预处理初始时刻不同权值下的二维前缀和, ...

  5. js刷题:leecode 25

    原题:https://leetcode.com/problems/reverse-nodes-in-k-group/ 题意就是给你一个有序链表.如1->2->3->4->5,还 ...

  6. MSSQL ADO.NET

    为什么要学ADO.NET 之前我们所学的只能在查询分析器里查看数据,操作数据,我们让普通用户去学sql,所以我们搭建了一个界面(Web/Winform) 让用户方面的操作数据库中的数据 什么是ADO. ...

  7. SQL server(到主机的TCPIPl连接失败的问题)

    1 首先要做的是在sql新建查询里输入 exec sys.sp_readerrorlog 0, 1, 'listening' 运行后 会显示你的sql 正在运行的tcp/ip接口 看看是否和你java ...

  8. PHP对象4: final 不允许重写方法或不允许继承类

    final用在方法中,能继承方法, 不允许重写方法 final用在类声名中, 此类就不能继承 <?php class A{ final function say(){ say 'Ok<br ...

  9. python并发编程之threading线程(一)

    进程是系统进行资源分配最小单元,线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.进程在执行过程中拥有独立的内存单元,而多个线程共享内存等资源. 系列文章 py ...

  10. linux设备驱动模型-浅析-转

    1.  typeof typeof并非ISO C的关键字,而是gcc对C的一个扩展.typeof是一个关键字(类似sizeof),用于获取一个表达式的类型. 举个简单的例子: char tt; typ ...