zookeeper
- 分布式系统的2PC和3PC
- 2PC
- 提交事务请求
- 执行事务提交
- 3PC
- CanCommit
- PreCommit
- DoCommit
- 2PC
- Paxos算法描述
- 阶段一:
- Propose提出一个提案M,向Acceptor的某个超过半数的子集的成员发送带M的请求Prepare
- Acceptor收到该M提案,如果M提案的id大于所有其批准的最大提案的id,则返回给Propose其批准过的最大id,并向其承诺不会再批准比M提案id更大的提案。
- 阶段二 :
- 在Acceptor收到prepare请求后,会返回一个响应,[M, V],这个V就是其批准过的最大提案id
- 阶段一:
- Hypertable
- Hypertable由四部分构成:Hyperspace、RangerServer、Master、DFS Broker
ZooKeeper
zookeeper是一个分布式数据一致性的解决方案,其可以保证:
顺序一致性、原子性、单一视图、可靠性、实时性。
zookeeper的分布式一致性协议是ZAB,ZAB主要包括两个模型:崩溃恢复和消息广播
一. 系统模型详解
- 描述:存在一个进程子集,其必定是进程组的子集,并且,任意两个进程子集,其交集必定非空。因此,ZAB系统模型具备以下特性:
- 完整性:即如果一个进程P1接收到另一个进程P2发出的消息M,则进程P2一定发送了消息M
- 前置性:如果一个进程收到了一个消息M2,如果消息M1是M2的前置消息,则该进程一定先接收到M1,再接收到M2。
- ZAB的消息广播和崩溃恢复具体表现三个阶段,即发现、同步、广播。这个循环是一个主进程周期。Follower向准Leader
- 发现阶段:leader选举的过程
- 同步阶段:判断Follower是否在当前循环内
- 广播阶段
docker-compose启动Zookeeper集群
- 拉取zk镜像:
docker pull zookeeper
- 编写docker-compose.yml文件
version: '2'
services:
zoo1:
image: zookeeper
restart: always
container_name: zoo1
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
zoo2:
image: zookeeper
restart: always
container_name: zoo2
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
zoo3:
image: zookeeper
restart: always
container_name: zoo3
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
- 启动docker-compose
COMPOSE_PROJECT_NAME=zk_test docker-compose up