设为首页 - 加入收藏 朝阳站长网 (http://www.0421zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 2019 vivo 水平 一篇
当前位置: 首页 > 赌圣 > 外闻 > 正文

ZooKeeper 原理与赌圣集群部署

发布时间:2019-07-26 22:57 所属栏目:[外闻] 来源:kefeng.wang博客
导读:ZooKeeper 是大型分布式系统中可靠的协调系统,它以树状结构存储数据,以领导选举和信息同步机制保证了集群的高可用性,以事件通知机制协助事件订阅者及时捕获数据的变化,可协助实现 Dubbo、Kafka 等架构。本文以 CentOS 和 Windows 为例,总结了 ZooKeep

ZooKeeper 是大型分布式系统中可靠的协调系统,它以树状结构存储数据,以领导选举和信息同步机制保证了集群的高可用性,以事件通知机制协助事件订阅者及时捕获数据的变化,可协助实现 Dubbo、Kafka 等架构。本文以 CentOS 和 Windows 为例,总结了 ZooKeeper 集群的部署操作,并以自带的脚本命令操作其数据。

ZooKeeper 原理与赌圣集群部署

1.概述

ZooKeeper 是 Hadoop 的一个子项目,是大型分布式系统中可靠的协调系统。分布式应用程序以此实现更高级别的服务,可用于分布式系统的配置维护、名字服务、分布式同步、组服务等:

用于 Dubbo: 作为配置中心;

用于 Kafka: 作为 Broker/Producer/Consumer 共享的配置中心。

官网首页: https://zookeeper.apache.org/

官网文档: https://zookeeper.apache.org/doc/current/

1.1 ZAB协议

ZooKeeper 原理与赌圣集群部署

集群间通过 ZAB(ZooKeeper Atomic Broadcast)协议保持数据一致性,该协议包括两个阶段:

1.1.1 领导选举(Leader Election)

选举出一个 Leader(所有写操作传送给 Leader),其他机器被称为 Follower;

当前 Leader 崩溃或失去大多数 Follower 后,会选举出新的 Leader;

1.1.2 信息同步(Atomic broadcast)

用于同步 Leader 与 Follower 之间的信息,保证数据一致。

1.2 内部原理

https://zookeeper.apache.org/doc/current/zookeeperOver.html

存储方式与标准文件系统非常相似,每个节点称作 znode,本身包含数据,还可以拥有子节点。

客户端以TCP连接一台节点,该节点故障时,客户端会切换至其他节点。

客户端可以订阅某些节点的事件(watcher机制),当节点内容或其子节点有变化时,客户端会收到通知。

ZooKeeper 原理与赌圣集群部署

  • 高性能:多读少写的情况下,速度很快;存储于内存中,并有持久存储中的事务日志和快照;
  • 高可用性(无中心化结构可避免单点故障): 个别节点故障不影响整体使用;
  • 监视机制: 客户端可以监视一个结点(node),当结点断开或有修改时,客户端会收到通知;
  • 顺序一致性: 来自客户端的更新将按照它们发送的顺序进行应用。
  • 原子性: 保证数据完整、一致,更新成功或失败,没有部分结果。
  • 单系统映像: 无论赌圣连接到哪个赌圣,客户端都会看到相同的服务视图。
  • 可靠性: 一旦更新被应用,它将一直持续到客户覆盖更新。
  • 及时性: 系统的客户观点在一定的时间范围内保证是最新的。

1.3 系统要求

ZooKeeper 以 Java 版本运行,Java 版本要求为 1.6+;

支持的操作系统包括: GNU/Linux, Solaris, FreeBSD, Windows。

2.Linux 下安装

https://zookeeper.apache.org/doc/current/zookeeperStarted.html

2.1 下载并解压(35M)

  1. #?https://archive.apache.org/dist/zookeeper/?
  2. #?https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/?
  3. wget?https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz?
  4. sudo?rm?-rf?/opt/zookeeper-3.4.11?
  5. sudo?tar?-zxf?zookeeper-3.4.11.tar.gz?-C?/opt?
  6. sudo?chown?-R?root:root?/opt/zookeeper-3.4.11?
  7. sudo?rm?-rf?/opt/zookeeper-3.4.11/bin/*.cmd?

2.2 设置环境变量

  1. ##?sudo?vim?/etc/profile?##?所有用户有效?
  2. export?ZOOKEEPER_HOME=/opt/zookeeper-3.4.11?
  3. export?PATH=$PATH:$ZOOKEEPER_HOME/bin?

文件保存后,Linux用户重新登录后生效。

2.3 准备目录与配置文件

  1. #?sudo?vim?$ZOOKEEPER_HOME/bin/zkInit.sh?
  2. #?sudo?-E?sh?$ZOOKEEPER_HOME/bin/zkInit.sh?
  3. for?INDEX?in?{1..3};?do?
  4. ????sudo?rm?-rf?$ZOOKEEPER_HOME/{data,logs}/$INDEX?
  5. ????sudo?mkdir?-p?$ZOOKEEPER_HOME/{data,logs}/$INDEX?
  6. ????echo?$INDEX?|?sudo?tee?$ZOOKEEPER_HOME/data/$INDEX/myid?>?/dev/null?
  7. ?
  8. ????#?zoo.cfg?参考:?grep?-v?"^#"?$ZOOKEEPER_HOME/conf/zoo_sample.cfg?
  9. ????cat?>?$ZOOKEEPER_HOME/conf/zoo-$INDEX.cfg?<
  10. tickTime=2000?##?ZooKeeper?的最小时间单位(ms)?
  11. initLimit=10?##?投票选举新?leader?的初始化时间(以?tickTime?为单位)?
  12. syncLimit=5?##?Leader?检测?Follower?可用性心跳的超时时间(以?tickTime?为单位)?
  13. clientPort=218$INDEX?##?客户端用来连接?ZooKeeper?的端口?
  14. dataDir=$ZOOKEEPER_HOME/data/$INDEX?##?数据目录(存储内存数据库快照)?
  15. dataLogDir=$ZOOKEEPER_HOME/logs/$INDEX?##?日志目录(存储事务日志)?
  16. server.1=localhost:2281:2291?
  17. server.2=localhost:2282:2292?
  18. server.3=localhost:2283:2293?
  19. EOF?
  20. done?

其中的 clientPort=218$INDEX 是提供给客户端连接的端口(2181,2182,2183);

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章