内容简介:Zookeeper搭建集群
简介
ZooKeeper是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
ZooKeeper是作为分布式协调服务,是不需要依赖于Hadoop的环境,也可以为其他的分布式环境提供服务。
单节点安装
下载,解压,配置
# 可能是受Windows影响,首次接触Mac时创建了这个目录用于存放开源框架 cd ~/ProgramFiles # 个人感觉速度慢, 用迅雷下载该链接更快 curl -O http://apache.mirrors.tds.net/zookeeper/stable/zookeeper-3.4.6.tar.gz # 解压 tar xzvf zookeeper-3.4.6.tar.gz mv zookeeper-3.4.6 zookeeper346 cd zookeeper346/conf cp zoo_sample.cfg zoo.cfg vim zoo.cfg # 修改内容如下, 需手动创建定义的数据目录 dataDir=/Users/arccode/data/zk/nodes/zk0
启动
# zookeeper 可执行文件目录 cd ../bin ./zkServer.sh start
至此单节点配置,启动完成.
集群安装
集群中节点树结构
└── nodes ├── zk0 │ └── version-2 │ └── log.1 ├── zk1 │ ├── data │ │ ├── myid │ │ └── version-2 │ │ ├── acceptedEpoch │ │ ├── currentEpoch │ │ └── snapshot.0 │ └── logs │ └── version-2 │ └── log.100000001 ├── zk2 │ ├── data │ │ ├── myid │ │ └── version-2 │ │ ├── acceptedEpoch │ │ └── currentEpoch │ └── logs │ └── version-2 │ └── log.100000001 └── zk3 ├── data │ ├── myid │ └── version-2 │ ├── acceptedEpoch │ ├── currentEpoch │ └── snapshot.100000000 └── logs └── version-2 └── log.100000001
配置节点一
不解释, 直接上配置文件(/Users/arccode/ProgramFiles/zookeeper346/conf/zk1.cfg)
dataDir=/Users/arccode/data/zk/nodes/zk1/data dataLogDir=/Users/arccode/data/zk/nodes/zk1/logs clientPort=2181 # 集群实例 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890
根据dataDir,dataLogDir创建相应的目录并在data目录执行如下命令
echo 1 > myid
配置节点二
不解释, 直接上配置文件(/Users/arccode/ProgramFiles/zookeeper346/conf/zk2.cfg)
dataDir=/Users/arccode/data/zk/nodes/zk2/data dataLogDir=/Users/arccode/data/zk/nodes/zk2/logs clientPort=2182 # 集群实例 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890
根据dataDir,dataLogDir创建相应的目录并在data目录执行如下命令
echo 2 > myid
配置节点三
不解释, 直接上配置文件(/Users/arccode/ProgramFiles/zookeeper346/conf/zk3.cfg)
dataDir=/Users/arccode/data/zk/nodes/zk3/data dataLogDir=/Users/arccode/data/zk/nodes/zk3/logs clientPort=2183 # 集群实例 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890
根据dataDir,dataLogDir创建相应的目录并在data目录执行如下命令
echo 3 > myid
启动Zookeeper集群
# zookeeper可执行文件目录 cd bin ./zkServer.sh start zk1.cfg ./zkServer.sh start zk2.cfg ./zkServer.sh start zk3.cfg
查看Zookeeper集群中各个节点的状态
./zkServer.sh status zk1.cfg JMX enabled by default Using config: /Users/arccode/ProgramFiles/zookeeper346/bin/../conf/zk1.cfg Mode: follower ./zkServer.sh status zk2.cfg JMX enabled by default Using config: /Users/arccode/ProgramFiles/zookeeper346/bin/../conf/zk2.cfg Mode: leader ./zkServer.sh status zk3.cfg JMX enabled by default Using config: /Users/arccode/ProgramFiles/zookeeper346/bin/../conf/zk3.cfg Mode: follower
注: 可以考虑多种启动或停止zookeeper的情况进行状态查看, 可发现zookeeper的高可用(HA);
命令行操作
使用命令行client连接zookeeper并操作API
# 连接到任意节点 ./zkCli.sh -server 127.0.0.1:2182 # help 查看指令 ZooKeeper -server host:port cmd args connect host:port get path [watch] ls path [watch] set path data [version] rmr path delquota [-n|-b] path quit printwatches on|off create [-s] [-e] path data acl stat path [watch] close ls2 path [watch] history listquota path setAcl path acl getAcl path sync path redo cmdno addauth scheme auth delete path [version] setquota -n|-b val path # 查看/目录节点 ls / # 创建znode节点 create /config db.properties # 查看/下节点, ls / [config, zookeeper] # 查看节点内容, get /config db.properties cZxid = 0x300000011 ctime = Fri Nov 14 23:05:05 CST 2014 mZxid = 0x300000011 mtime = Fri Nov 14 23:05:05 CST 2014 pZxid = 0x300000011 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 13 numChildren = 0 # 修改节点内容, set /config db2.properties # 再次查看 get /config db2.properties cZxid = 0x300000011 ctime = Fri Nov 14 23:05:05 CST 2014 mZxid = 0x300000012 mtime = Fri Nov 14 23:08:10 CST 2014 pZxid = 0x300000011 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 14 numChildren = 0 # 删除节点, delete /config # 查看, ls / # 退出, quit
Java操作
源码
package com.ts.zookeeper; import java.io.IOException; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.KeeperException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; /** * Java 操作zookeeper API * */ public class Main { public static void main( String[] args ) throws IOException, InterruptedException, KeeperException { // 创建连接 ZooKeeper zk = new ZooKeeper("127.0.0.1:2182", 30000, new Watcher(){ // 监听的事件发生变化时, 调用该函数 public void process(WatchedEvent event) { System.out.println("Event emit -> " + event.getType()); } }); // 查看根目录, ls / System.out.println("[line: 29]command: ls / -> " + zk.getChildren("/", true)); // 创建数据节点config if(zk.exists("/config", true) == null) { zk.create("/config", "db.properties".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); System.out.println("创建数据节点config成功."); // 查看数据节点数据 System.out.println("[line: 38]command get /config: " + new String(zk.getData("/config", true, null))); // 查看根目录, ls / System.out.println("[line: 41]command: ls / -> " + zk.getChildren("/", true)); } // 修改数据节点 if(zk.exists("/config", true) != null) { zk.setData("/config", "db2.properteis".getBytes(), -1); // 查看数据节点数据 System.out.println("[line: 48]command get /config: " + new String(zk.getData("/config", true, null))); // 查看根目录, ls / System.out.println("[line: 50]command: ls / -> " + zk.getChildren("/", true)); } // 删除数据节点 if(zk.exists("/config", true) != null) { zk.delete("/config", -1); // 查看根目录, ls / System.out.println("[line: 57]command: ls / -> " + zk.getChildren("/", true)); } // 关闭连接 zk.close(); } }
结果
Event emit -> None [line: 29]command: ls / -> [zookeeper] Event emit -> NodeCreated Event emit -> NodeChildrenChanged 创建数据节点config成功. [line: 38]command get /config: db.properties [line: 41]command: ls / -> [config, zookeeper] Event emit -> NodeDataChanged [line: 48]command get /config: db2.properteis [line: 50]command: ls / -> [config, zookeeper] Event emit -> NodeDeleted Event emit -> NodeChildrenChanged [line: 57]command: ls / -> [zookeeper]
参考资料
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Elasticsearch 集群搭建和集群原理
- Zookeeper学习系列【二】Zookeeper 集群章节之集群搭建
- Spark集群环境搭建
- FastDFS集群搭建
- Zookeeper集群环境搭建
- 搭建Selenium 集群
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Persuasive Technology
B.J. Fogg / Morgan Kaufmann / 2002-12 / USD 39.95
Can computers change what you think and do? Can they motivate you to stop smoking, persuade you to buy insurance, or convince you to join the Army? "Yes, they can," says Dr. B.J. Fogg, directo......一起来看看 《Persuasive Technology》 这本书的介绍吧!