zookeeper环境搭建
zookeeper环境搭建
1.下载安装包
下载安装包
登录zookeeper官网:https://zookeeper.apache.org/
可以从官网上下载,流程如下
地址:https://zookeeper.apache.org/releases.html#download
地址:https://www.apache.org/dyn/closer.cgi/zookeeper/
地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
本人选择3.4.14版本
地址:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/
在服务器上通过wget进行下载(路径是/usr/local/zookeeper)
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
解压压缩包: tar -xzvf zookeeper-3.4.14.tar.gz
2.单机搭建
修改配置文件,在conf目录下执行命令
cp zoo_sample.cfg zoo.cfg
启动服务,在bin目录下执行
./zkServer.sh start …/conf/zoo.cfg
查看进程,代表启动成功(注意要先安装JDK)
JDK安装参考:https://blog.csdn.net/liujie379908/article/details/86515849
通过客户端登录
./zkCli.sh
连接成功后,显示如下
到此为止,单机版的zookeeper搭建成功了,可以愉快的玩耍了
3.集群环境搭建
单板ip | client端口号 |
---|---|
10.31.20.171 | 2181 |
10.31.20.171 | 2182 |
10.31.20.171 | 2183 |
本文使用一块单板来模拟集群中的部署情况
新建三个目录zoo1,zoo2,zoo3
在每个目录中下载安装包,解压
3.1配置zoo1服务
在zoo1中conf目录下执行命令
cp zoo_sample.cfg zoo1.cfg
配置zoo1.cfg文件
dataDir=/tmp/zookeeper-1
clientPort=2181
server.1=10.31.20.171:2888:3888
server.2=10.31.20.171:2889:3889
server.3=10.31.20.171:2890:3890
配置myid,在dataDir目录下创建myid文件,配置sid为1(与server.1对应)
3.2配置zoo2服务
在zoo2中conf目录下执行命令
cp zoo_sample.cfg zoo2.cfg
配置zoo2.cfg文件
dataDir=/tmp/zookeeper-2
clientPort=2182
server.1=10.31.20.171:2888:3888
server.2=10.31.20.171:2889:3889
server.3=10.31.20.171:2890:3890
配置myid,在dataDir目录下创建myid文件,配置sid为2
3.3配置zoo3服务
在zoo3中conf目录下执行命令
cp zoo_sample.cfg zoo3.cfg
配置zoo3.cfg文件
配置zoo2.cfg文件
dataDir=/tmp/zookeeper-3
clientPort=2183
server.1=10.31.20.171:2888:3888
server.2=10.31.20.171:2889:3889
server.3=10.31.20.171:2890:3890
配置myid,在dataDir目录下创建myid文件,配置sid为3
4.Cli客户端测试
启动服务
./zkServer.sh start ../conf/zoo1.cfg
./zkServer.sh start ../conf/zoo2.cfg
./zkServer.sh start ../conf/zoo3.cfg
查询集群中三个服务状态
./zkServer.sh status …/conf/zoo1.cfg
zoo1服务为follower,zoo2为leader,zoo3为follower
通过zkCli客户端进行操作zk服务
./zkCli.sh -server 10.31.20.171:2182
在leader上创建或者删除节点,会自动同步到从节点上
在从节点zoo1和zoo3上查看,/test-zk已经同步到从节点了
5.Java客户端测试
测试代码如下
public class App implements Watcher
{
private static final CountDownLatch countDownLatch = new CountDownLatch(1);
public static void main( String[] args )
{
try {
ZooKeeper zk = new ZooKeeper("10.31.20.171:2181,10.31.20.171:2182,10.31.20.171:2183",5000,new App());
System.out.println("ZooKeeper connect status:" + zk.getState());
countDownLatch.await();
String value1 = zk.create("/test-zk","0".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
String value2 = zk.create("/test-zk","0".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
System.out.println(value1);
System.out.println(value2);
System.out.println("main success");
System.in.read();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (KeeperException e) {
e.printStackTrace();
}
}
@Override
public void process(WatchedEvent watchedEvent) {
if (Event.KeeperState.SyncConnected == watchedEvent.getState()){
System.out.println("ZooKeeper connect status:" + watchedEvent.getState());
countDownLatch.countDown();
}
System.out.println("Receive watch event :"+ watchedEvent);
}
}