| 副标题[/!--empirenews.page--] ZooKeeper  是大型分布式系统中可靠的协调系统,它以树状结构存储数据,以领导选举和信息同步机制保证了集群的高可用性,以事件通知机制协助事件订阅者及时捕获数据的变化,可协助实现  Dubbo、Kafka 等架构。本文以 CentOS 和 Windows 为例,总结了 ZooKeeper  集群的部署操作,并以自带的脚本命令操作其数据。 
 1.概述 ZooKeeper 是 Hadoop  的一个子项目,是大型分布式系统中可靠的协调系统。分布式应用程序以此实现更高级别的服务,可用于分布式系统的配置维护、名字服务、分布式同步、组服务等: 用于 Dubbo: 作为配置中心; 用于 Kafka: 作为 Broker/Producer/Consumer 共享的配置中心。 官网首页: https://zookeeper.apache.org/ 官网文档: https://zookeeper.apache.org/doc/current/ 1.1 ZAB协议 
 集群间通过 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机制),当节点内容或其子节点有变化时,客户端会收到通知。 
 
    高性能:多读少写的情况下,速度很快;存储于内存中,并有持久存储中的事务日志和快照;高可用性(无中心化结构可避免单点故障): 个别节点故障不影响整体使用;监视机制: 客户端可以监视一个结点(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) # https://archive.apache.org/dist/zookeeper/ # https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/ wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz sudo rm -rf /opt/zookeeper-3.4.11 sudo tar -zxf zookeeper-3.4.11.tar.gz -C /opt sudo chown -R root:root /opt/zookeeper-3.4.11 sudo rm -rf /opt/zookeeper-3.4.11/bin/*.cmd 
 2.2 设置环境变量 ## sudo vim /etc/profile ## 所有用户有效 export ZOOKEEPER_HOME=/opt/zookeeper-3.4.11 export PATH=$PATH:$ZOOKEEPER_HOME/bin 
 文件保存后,Linux用户重新登录后生效。 2.3 准备目录与配置文件 # sudo vim $ZOOKEEPER_HOME/bin/zkInit.sh # sudo -E sh $ZOOKEEPER_HOME/bin/zkInit.sh for INDEX in {1..3}; do     sudo rm -rf $ZOOKEEPER_HOME/{data,logs}/$INDEX     sudo mkdir -p $ZOOKEEPER_HOME/{data,logs}/$INDEX     echo $INDEX | sudo tee $ZOOKEEPER_HOME/data/$INDEX/myid > /dev/null      # zoo.cfg 参考: grep -v "^#" $ZOOKEEPER_HOME/conf/zoo_sample.cfg     cat > $ZOOKEEPER_HOME/conf/zoo-$INDEX.cfg << EOF tickTime=2000 ## ZooKeeper 的最小时间单位(ms) initLimit=10 ## 投票选举新 leader 的初始化时间(以 tickTime 为单位) syncLimit=5 ## Leader 检测 Follower 可用性心跳的超时时间(以 tickTime 为单位) clientPort=218$INDEX ## 客户端用来连接 ZooKeeper 的端口 dataDir=$ZOOKEEPER_HOME/data/$INDEX ## 数据目录(存储内存数据库快照) dataLogDir=$ZOOKEEPER_HOME/logs/$INDEX ## 日志目录(存储事务日志) server.1=localhost:2281:2291 server.2=localhost:2282:2292 server.3=localhost:2283:2293 EOF done 
 其中的 clientPort=218$INDEX 是提供给客户端连接的端口(2181,2182,2183); (编辑:我爱故事小小网_铜陵站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |