Day375&376.Zookeeper入门&单机安装&集群操作 -Zookeeper
科技
1300 人阅读
|
0 人回复
|
|
<
Zookeeper 进门
1.1 概述
Zookeeper是一个开源的散布式的,为散布式框架供给和谐效劳的 Apache 项目。
- 事情机造
- Zookeeper从设想形式角度去了解:
是一个基于察看者形式设想的散布式效劳办理框架,它卖力存储战办理各人皆体贴的数据,然后承受察看者的注册,一旦那些数据的形态发作变革,Zookeeper便将卖力告诉曾经正在Zookeeper上注册的那些察看者做出响应的反响。
1.2特性
1.3数据构造
ZooKeeper 数据模子的构造取 Unix 文件体系很相似,团体上能够看做是一棵树,每一个节面称做一个 ZNode。每个 ZNode 默许可以存储 1MB 的数据,每一个 ZNode 皆能够经由过程其途径独一标识。
1.4使用场景
供给的效劳包罗:同一定名效劳、同一设置办理、同一散群办理、效劳器节面静态高低线、硬背载平衡等。
正在散布式状况下,经常需求对使用/效劳停止同一定名,便于辨认。比方:IP没有简单记着,而域名简单记着
- 同一设置办理
- 散布式状况下,设置文件同步十分常睹。
- (1)普通请求一个散群中,一切节面的设置疑息是分歧的,好比 Kafka 散群。
- (2)对设置文件修正后,期望可以快速同步到各个节面上。
- 设置办理可交由ZooKeeper完成。
- (1)可将设置疑息写进ZooKeeper上的一个Znode。
- (2)各个客户端效劳器监听那个Znode。
- (3)一旦Znode中的数据被修正,ZooKeeper将告诉各个客户端效劳器。
- 同一散群办理
- 散布式状况中,及时把握每一个节面的形态是需要的。
- ZooKeeper能够完成及时监控节面形态变革
- (1)可将节面疑息写进ZooKeeper上的一个ZNode。
- (2)监听那个ZNode可获得它的及时形态变革。
正在Zookeeper中记载每台效劳器的会见数,让会见数起码的效劳器去向理最新的客户端恳求
1.5下载地点
- 1) 民网尾页:
https://zookeeper.apache.org/
- 2)
Zookeeper 本地装置
2.1 本地形式 装置
- 装置前筹办
- (1)装置 JDK
- (2)拷贝 apache-zookeeper-3.5.7-bin.tar.gz 装置包到 Linux 体系下
- (3)解压到指定目次
- tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
复造代码 - (4)修正称号
- mv apache-zookeeper-3.5.7 -bin/zookeeper-3.5.7
复造代码 - 设置修正
- (1)将/usr/local/zookeeper/zookeeper-3.5.7/conf 那个途径下的 zoo_sample.cfg 修正为 zoo.cfg;
- mv zoo_sample.cfg zoo.cfg
复造代码 - (2)翻开 zoo.cfg 文件,修正 dataDir 途径:
修正以下内乱容:
- dataDir=/usr/local/zookeeper/zkData
复造代码
- (3)正在/usr/local/zookeeper/zookeeper-3.5.7/那个目次上创立 zkData 文件夹
- 操纵 Zookeeper
- create -s /sanguo/weiguo/zhangliao "zhangliao"
复造代码
2.2 设置参数
Zookeeper中的设置文件zoo.cfg中参数寄义解读以下:
- tickTime = 2000:
通讯心跳时,Zookeeper 效劳器取客户端心跳工夫,单元毫秒
- initLimit = 10 :
Leader战Follower的初初通讯时限
Leader战Follower初初毗连时能容忍的最多心跳数(tickTime的数目)
- syncLimit = 5 :
LF 同步通讯时限
Leader战Follower之间通讯工夫假如超越syncLimit * tickTime,Leader以为Follwer逝世失落,从效劳器列表中删除Follwer。
- dataDir :
保存Zookeeper中的数据
留意:默许的tmp目次,简单被Linux体系按期删除,以是普通不用默许的tmp目次。
- clientPort = 2181 :
客户端毗连端心 ,凡是没有做修正。
Zookeeper 散群操纵
3.1 散群操纵
3.1.1 散群装置
- 散群计划
正在 hadoop102、hadoop103 战 hadoop104 三个节面上皆布置 Zookeeper。
考虑:假如是 10 台效劳器,需求布置几台 Zookeeper ?
- 解压装置
反复上里的单机装置历程
- 设置效劳器编号
- (1)正在创立 zkData
- (2)正在zkData 目次下创立一个 myid 的文件
正在文件中增加取 server 对应的编号(留意:高低没有要有空止,阁下没有要有空格)
留意:增加 myid 文件,必然要正在 Linux 内里创立,正在 notepad++内里极可能治码
- (3)拷贝设置好的 zookeeper 到其他机器上
并别离正在 hadoop103、hadoop104 上修正 myid 文件中内乱容为 3、4
- 设置zoo.cfg 文件
- (1)如上一样重定名zoo_sample.cfg 为zoo.cnf
- (2)翻开 zoo.cfg 文件
- #修正数据存储途径设置
- dataDir=/usr/local/zookeeper/zkData
复造代码 - #增长以下设置
- #######################cluster##########################
- server.1=192.168.109.101:2888:3888
- server.2=192.168.109.102:2888:3888
- server.3=192.168.109.103:2888:3888
复造代码
- (3)设置参数解读
- A 是一个数字,暗示那个是第几号效劳器;
散群形式下设置一个文件 myid,那个文件正在 dataDir 目次下,那个文件内里有一个数据便是 A 的值,Zookeeper 启动时读与此文件,拿到内里的数据取 zoo.cfg 内里的设置疑息比力从而判定究竟是哪一个 server。
- B 是那个效劳器的地点;
- C 是那个效劳器 Follower 取散群中的 Leader 效劳器交流疑息的端心;
- D 是万一散群中的 Leader 效劳器挂了,需求一个端心去从头停止推举,选出一个新的Leader,而那个端心便是用去施行推举时效劳器互相通讯的端心。
- (4)同步 zoo.cfg 设置文件
- 散群操纵
- (1)别离启动 Zookeeper
- bin/zkServer.sh start #s1
- bin/zkServer.sh start #s2
- bin/zkServer.sh start #s3
复造代码 - (2)检察形态
- [root@s1 zookeeper3.5.7]# sh bin/zkServer.sh status
- ZooKeeper JMX enabled by default
- Using config: /usr/local/zookeeper/zookeeper3.5.7/bin/../conf/zoo.cfg
- Client port found: 2181. Client address: localhost.
- Mode: follower
- [root@s2 zookeeper3.5.7]# sh bin/zkServer.sh status
- ZooKeeper JMX enabled by default
- Using config: /usr/local/zookeeper/zookeeper3.5.7/bin/../conf/zoo.cfg
- Client port found: 2181. Client address: localhost.
- Mode: follower
- [root@s3 zookeeper3.5.7]# sh bin/zkServer.sh status
- ZooKeeper JMX enabled by default
- Using config: /usr/local/zookeeper/zookeeper3.5.7/bin/../conf/zoo.cfg
- Client port found: 2181. Client address: localhost.
- Mode: leader
复造代码 3.1.2 推举机造(口试重面)
总结一句话,厥后者居上
3.1.3 ZK 散群启动截至剧本
3.2 客户端 号令止 操纵
3.2.1 号令止语法
号令根本语法功用描摹chmod u+x zk.sh显现一切操纵号令ls path利用 ls 号令去检察当前 znode 的子节面 [可监听]
-w 监听子节面变革
-s 附减次级疑息create一般创立
-s 露有序列
-e 暂时(重启大概超时消逝)get path获得节面的值 [可监听]
-w 监听节面内乱容变革
-s 附减次级疑息set设置节面的详细值stat检察节面形态delete删除节面deleteall递回删除节面
- 1) 启动客户端
- #!/bin/bash
- case $1 in
- "start"){
- for i in 192.168.109.101 192.168.109.102 192.168.109.103
- do
- echo ---------- zookeeper $i 启动 ------------
- ssh $i "sh /usr/local/zookeeper/zookeeper3.5.7/bin/zkServer.sh start"
- done
- };;
- "stop"){
- for i in 192.168.109.101 192.168.109.102 192.168.109.103
- do
- echo ---------- zookeeper $i 截至 ------------
- ssh $i "sh /usr/local/zookeeper/zookeeper3.5.7/bin/zkServer.sh stop"
- done
- };;
- "status"){
- for i in 192.168.109.101 192.168.109.102 192.168.109.103
- do
- echo ---------- zookeeper $i 形态 ------------
- ssh $i "sh /usr/local/zookeeper/zookeeper3.5.7/bin/zkServer.sh status"
- done
- };;
- esac
复造代码
- 2) 显现一切操纵号令
3.2.2 znode 节面数据疑息
- 2) 检察当前节面具体 数据
- czxid:
- 创立节面的事件 zxid每次修正 ZooKeeper 形态城市发生一个 ZooKeeper 事件 ID。事件 ID 是 ZooKeeper 中一切修正总的序次。
- 每次修正皆有独一的 zxid,假如 zxid1 小于 zxid2,那末 zxid1 正在 zxid2 前发作。
- ctime:
- znode 被创立的毫秒数(从 1970 年开端)
- mzxid:
- mtime:
- znode 最初修正的毫秒数(从 1970 年开端)
- pZxid:
- cversion:
- znode 子节面变革号,znode 子节面修正次数
- dataversion:
- aclVersion:
- ephemeralOwner:
- 假如是暂时节面,那个是 znode 具有者的 session id。假如没有是暂时节面则是 0。
- dataLength:
- numChildren:
3.2.3 节面范例 (持久/ 长久/ 有序号/ 无序号)
- 节面范例
- 1) 别离创立2 个一般节面 (永世节面 + 没有带序号)
- bin/zkCli.sh -server 192.168.109.101:2181
复造代码 留意:创立节面时,要赋值
- 3)创立带序号的节面 (永世节面 + 带序号)
- (1)先创立一个一般的根节面/sanguo/weiguo
假如本来出有序号节面,序号从 0 开端顺次递删。假如本节面下已有 2 个节面,则再排序时从 2 开端,以此类推。
- 4) 创立长久节面 (长久节面 + 没有带序号 or 带序号)
- create /sanguo "diaochan"
复造代码
- create -s /sanguo/weiguo/zhangliao "zhangliao"
复造代码
- create -e /sanguo/wuguo"zhouyu"
复造代码
3.2.4 监听器道理
客户端注册监听它体贴的目次节面,当目次节面发作变革(数据改动、节面删除、子目次节面增长删除)时,ZooKeeper 会告诉客户端。监听机造包管 ZooKeeper 保存的任何的数据的任何改动皆能快速的呼应到监听了该节面的使用法式。
- 1)节面的值变革监听
- (1)正在 192.168.109.103主机上注册监听/sanguo 节面数据变革
- create -e -s /sanguo/wuguo"zhouyu"
复造代码
- (2)正在 192.168.109.102主机上修正/sanguo 节面的数据
- (3)察看 192.168.109.103主机支到数据变革的监听
留意:正在192.168.109.102再屡次修正/sanguo的值,192.168.109.103上没有会再支到监听。由于注册一次,只能监听一次。念再次监听,需求再次注册。
- 2)节面的子节面变革监听(途径变革)
- (1)正在 192.168.109.103主机上注册监听/sanguo 节面的子节面变革
- set /sanguo/weiguo "simayi"
复造代码
- (2)正在 192.168.109.102 主机/sanguo 节面上创立子节面
- (3)察看 192.168.109.103主机支到子节面变革的监听
留意:节面的途径变革,也是注册一次,见效一次。念屡次见效,便需求屡次注册。
3.2.5 节面删除取检察
- WATCHER::
- WatchedEvent state:SyncConnected type:NodeDataChanged
- path:/sanguo
复造代码
- create /sanguo/jin "simayi"
复造代码 3.3 客户端 API 操纵
3.3.1 IDEA 状况
条件:包管 192.168.109.101、192.168.109.102、192.168.109.103效劳器上 Zookeeper 散群效劳端启动。
- 1) 创立一个 工程: :zookeeper
- 2) 增加pom
- WATCHER::
- WatchedEvent state:SyncConnected type:NodeChildrenChanged
- path:/sanguo
复造代码
- 3) 拷贝log4j.properties 文件到项目根目次
需求正在项目标 src/main/resources 目次下,新建一个文件,定名为“log4j.properties”,正在文件中挖进。
- 4 )创立包名com.achang.zk
- 5 )创立类称号zkClient
3.3.2 创立 ZooKeeper 客户端
3.3.3 创立子节面
测试:正在 192.168.109.101的 zk 客户端上检察创立节面状况
- <dependencies>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>RELEASE</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.logging.log4j</groupId>
- <artifactId>log4j-core</artifactId>
- <version>2.8.2</version>
- </dependency>
-
- <dependency>
- <groupId>org.apache.zookeeper</groupId>
- <artifactId>zookeeper</artifactId>
- <version>3.5.7</version>
- </dependency>
- </dependencies>
复造代码 3.3.4 获得 子节面 并 监听 节面 变革
- log4j.rootLogger=INFO, stdout
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%d %p [%c]- %m%n
- log4j.appender.logfile=org.apache.log4j.FileAppender
- log4j.appender.logfile.File=target/spring.log
- log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
- log4j.appender.logfile.layout.ConversionPattern=%d %p [%c]- %m%n
复造代码
- // 留意:逗号前后不克不及有空格
- private static String connectString = "192.168.109.101:2181,192.168.109.102:2181,192.168.109.103:2181";
- private static int sessionTimeout = 2000;
- private ZooKeeper zkClient = null;
- @Before
- public void init() throws Exception {
- zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {
- @Override
- public void process(WatchedEvent watchedEvent) {
- // 支到变乱告诉后的回调函数(用户的营业逻辑)
- System.out.println(watchedEvent.getType() + "--" + watchedEvent.getPath());
- // 再次启动监听
- try {
- List<String> children = zkClient.getChildren("/", true);
- for (String child : children) {
- System.out.println(child);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- });
- }
复造代码
- (2)正在 192.168.109.101的客户端上创立再创立一个节面/achang1,察看 IDEA 掌握台
- // 创立子节面
- @Test
- public void create() throws Exception {
- // 参数 1:要创立的节面的途径; 参数 2:节面数据 ; 参数 3:节面权限 ;参数 4:节面的范例
- String nodeCreated = zkClient.create("/achang","shuaige".getBytes(),Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
- }
复造代码
- (3)正在 192.168.109.101的客户端上删除节面/achang1,察看 IDEA 掌握台
- [zk: localhost:2181(CONNECTED) 16] get -s /achang
- shuaige
复造代码 3.3.5 判定 Znode 能否存正在
- // 获得子节面
- @Test
- public void getChildren() throws Exception {
- List<String> children = zkClient.getChildren("/", true);
- for (String child : children) {
- System.out.println(child);
- }
- // 延时壅闭
- Thread.sleep(Long.MAX_VALUE);
- }
复造代码 3.4 客户端背效劳端写数据流程
免责声明:假如进犯了您的权益,请联络站少,我们会实时删除侵权内乱容,感谢协作! |
1、本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,按照目前互联网开放的原则,我们将在不通知作者的情况下,转载文章;如果原文明确注明“禁止转载”,我们一定不会转载。如果我们转载的文章不符合作者的版权声明或者作者不想让我们转载您的文章的话,请您发送邮箱:Cdnjson@163.com提供相关证明,我们将积极配合您!
2、本网站转载文章仅为传播更多信息之目的,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证信息的正确性和完整性,且不对因信息的不正确或遗漏导致的任何损失或损害承担责任。
3、任何透过本网站网页而链接及得到的资讯、产品及服务,本网站概不负责,亦不负任何法律责任。
4、本网站所刊发、转载的文章,其版权均归原作者所有,如其他媒体、网站或个人从本网下载使用,请在转载有关文章时务必尊重该文章的著作权,保留本网注明的“稿件来源”,并自负版权等法律责任。
|
|
|
|
|
|
|
|