Zookeeper详细使用解析!分布式架构中的协调服务框架最佳选型实践 (2)

将Leader收集得到的最新历史事务日志,同步给集群中的所有Follower,只有当半数Follower同步成功,这个准Leader才能成为正式Leader.集群崩溃恢复正式完成

ZAB主从数据同步

Broadcast
Zookeeper常规情况下更新数据的时候,由Leader广播到所有的Follower:

客户端发出写入数据请求给任意的Follower

Follower把写入数据请求转发给Leader

Leader采取二阶段提交方式:(先保留提交日志,再提交数据)先发送Propose广播给Follower

Follower接收到Propose消息,写入日志成功后,返回ACK消息给Leader

Leader接收到半数以上的ACK消息,返回成功给客户端,并且广播commit请求给Follower

数据一致性: 强一致性 弱一致性 顺序一致性:Zookeeper,依靠事务ID和版本号,保证数据的更新和读取是有序的 Zookeeper应用场景

分布式锁: 应用Zookeeper的临时顺序节点,实现分布式锁

服务注册与发现: 利用Znode和Watcher,实现分布式服务注册与发现,如Dubbo

共享配置和状态信息: Redis的分布式解决方案Codls,利用Zookeeper存放数据路由表和codls-proxy节点元信息,同时colds-config发起的命令都会通过Zookeeper同步到各个存活的codls-proxy

高可用实现: Kafka,HBase,Hadoop都依靠Zookeeper同步节点信息,实现高可用

基于Docker创建Zookeeper 1.创建docker-compose.yml zoo: image: zookeeper restart: always hostname: zoo ports: - 2181:2181 environment: - ZOO_MY_ID: 1 - ZOO_SERVER: server.1(id)=zoo(IP):2888:3888 2.执行docker-compose up -d Zookeeper三种工作模式

单机模式: 存在单点故障

集群模式: 在多台服务器上部署Zookeeper集群

伪集群模式: 在同一台服务器上运行多个Zookeeper实例,仍然有单点故障问题,其中配置的端口号要错开

Zookeeper三种端口号

2181: 客户端连接Zookeeper集群使用的监听端口号

3888: 选举Leader使用

2888: 集群内机器通讯使用(Leader和Follower之间数据同步使用的端口号,Leader监听此端口)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjzgy.html