阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

ZooKeeper伪分布式集群安装及使用

414次阅读
没有评论

共计 17287 个字符,预计需要花费 44 分钟才能阅读完成。

1. zookeeper 介绍

ZooKeeper 是一个为分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper 本身可以以 Standalone 模式安装运行,不过它的长处在于通过分布式 ZooKeeper 集群(一个 Leader,多个 Follower),基于一定的策略来保证 ZooKeeper 集群的稳定性和可用性,从而实现分布式应用的可靠性。

ZooKeeper 是作为分布式协调服务,是不需要依赖于 Hadoop 的环境,也可以为其他的分布式环境提供服务。

2. zookeeper 单节点安装 Standalones 模式

系统环境:
•Linux Ubuntu 12.04.2 LTS 64bit server
•Java: 1.6.0_29 64-Bit Server VM

•下载 zookeeper
~ mkdir /home/conan/toolkit
~ cd /home/conan/toolkit
~ wget http://apache.dataguru.cn/zookeeper/stable/zookeeper-3.4.5.tar.gz
~ tar xvf zookeeper-3.4.5.tar.gz
~ mv zookeeper-3.4.5 zookeeper345
~ cd zookeeper345
~ ls -l
drwxr-xr-x  2 conan conan    4096 Aug 12 04:34 bin
-rw-r–r–  1 conan conan  75988 Aug 12 04:34 build.xml
-rw-r–r–  1 conan conan  70223 Aug 12 04:34 CHANGES.txt
drwxr-xr-x  2 conan conan    4096 Aug 12 04:34 conf
drwxr-xr-x 10 conan conan    4096 Aug 12 04:34 contrib
drwxr-xr-x  2 conan conan    4096 Aug 12 04:34 dist-maven
drwxr-xr-x  6 conan conan    4096 Aug 12 04:34 docs
-rw-r–r–  1 conan conan    1953 Aug 12 04:34 ivysettings.xml
-rw-r–r–  1 conan conan    3120 Aug 12 04:34 ivy.xml
drwxr-xr-x  4 conan conan    4096 Aug 12 04:34 lib
-rw-r–r–  1 conan conan  11358 Aug 12 04:34 LICENSE.txt
-rw-r–r–  1 conan conan    170 Aug 12 04:34 NOTICE.txt
-rw-r–r–  1 conan conan    1770 Aug 12 04:34 README_packaging.txt
-rw-r–r–  1 conan conan    1585 Aug 12 04:34 README.txt
drwxr-xr-x  5 conan conan    4096 Aug 12 04:34 recipes
drwxr-xr-x  8 conan conan    4096 Aug 12 04:34 src
-rw-r–r–  1 conan conan 1315806 Aug 12 04:34 zookeeper-3.4.5.jar
-rw-r–r–  1 conan conan    833 Aug 12 04:34 zookeeper-3.4.5.jar.asc
-rw-r–r–  1 conan conan      33 Aug 12 04:34 zookeeper-3.4.5.jar.md5
-rw-r–r–  1 conan conan      41 Aug 12 04:34 zookeeper-3.4.5.jar.sha1

•修改配置文件 conf/zoo.cfg

~ mkdir /home/conan/zoo/zk0
~ cp conf/zoo_sample.cfg conf/zoo.cfg

~ vi conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/conan/zoo/zk0
clientPort=2181

非常简单,我们已经配置好了的 zookeeper 单节点

启动 zookeeper

~ bin/zkServer.sh
JMX enabled by default
Using config: /home/conan/zoo/zk0/zookeeper345/bin/../conf/zoo.cfg
Usage: bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}
conan@conan:~/zoo/zk0/zookeeper345$ bin/zkServer.sh start
JMX enabled by default
Using config: /home/conan/zoo/zk0/zookeeper345/bin/../conf/zoo.cfg
Starting zookeeper … STARTED

#zk 的服务显示为 QuorumPeerMain
~ jps
5321 QuorumPeerMain
5338 Jps

# 查看运行状态
~ bin/zkServer.sh status
JMX enabled by default
Using config: /home/conan/zoo/zk0/zookeeper345/bin/../conf/zoo.cfg
Mode: standalone

单节点的时,Mode 会显示为 standalone

停止 ZooKeeper 服务

~ bin/zkServer.sh stop
JMX enabled by default
Using config: /home/conan/zoo/zk0/zookeeper345/bin/../conf/zoo.cfg
Stopping zookeeper … STOPPED

3. zookeeper 伪分布式集群安装

所谓“伪分布式集群”就是在,在一台 PC 中,启动多个 ZooKeeper 的实例。“完全分布式集群”是每台 PC,启动一个 ZooKeeper 实例。

由于我的测试环境 PC 数量有限,所以在一台 PC 中,启动 3 个 ZooKeeper 的实例。

创建环境目录

~ mkdir /home/conan/zoo/zk1
~ mkdir /home/conan/zoo/zk2
~ mkdir /home/conan/zoo/zk3

# 新建 myid 文件
~ echo “1” > /home/conan/zoo/zk1/myid
~ echo “2” > /home/conan/zoo/zk2/myid
~ echo “3” > /home/conan/zoo/zk3/myid

分别修改配置文件
修改:dataDir,clientPort
增加:集群的实例,server.X,”X”表示每个目录中的 myid 的值

~ vi /home/conan/toolkit/zookeeper345/conf/zk1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/conan/zoo/zk1
clientPort=2181
server.1=192.168.1.201:2888:3888
server.2=192.168.1.201:2889:3889
server.3=192.168.1.201:2890:3890

~ vi /home/conan/toolkit/zookeeper345/conf/zk2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/conan/zoo/zk2
clientPort=2182
server.1=192.168.1.201:2888:3888
server.2=192.168.1.201:2889:3889
server.3=192.168.1.201:2890:3890

~ vi /home/conan/toolkit/zookeeper345/conf/zk3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/conan/zoo/zk3
clientPort=2183
server.1=192.168.1.201:2888:3888
server.2=192.168.1.201:2889:3889
server.3=192.168.1.201:2890:3890

3 个节点的 ZooKeeper 集群配置完成,接下来我们的启动服务。

启动集群

~ /home/conan/toolkit/zookeeper345/bin/zkServer.sh start zk1.cfg
~ /home/conan/toolkit/zookeeper345/bin/zkServer.sh start zk2.cfg
~ /home/conan/toolkit/zookeeper345/bin/zkServer.sh start zk3.cfg

~ jps
5422 QuorumPeerMain
5395 QuorumPeerMain
5463 QuorumPeerMain
5494 Jps

# 查看节点状态
~ /home/conan/toolkit/zookeeper345/bin/zkServer.sh status zk1.cfg
JMX enabled by default
Using config: /home/conan/toolkit/zookeeper345/bin/../conf/zk1.cfg
Mode: follower

~ /home/conan/toolkit/zookeeper345/bin/zkServer.sh status zk2.cfg
JMX enabled by default
Using config: /home/conan/toolkit/zookeeper345/bin/../conf/zk2.cfg
Mode: leader

~ /home/conan/toolkit/zookeeper345/bin/zkServer.sh status zk3.cfg
JMX enabled by default
Using config: /home/conan/toolkit/zookeeper345/bin/../conf/zk3.cfg
Mode: follower

我们可以看到 zk2 是 leader,zk1 和 zk3 是 follower

查看 ZooKeeper 物理文件目录结构

~ tree  -L 3 /home/conan/zoo
/home/conan/zoo
├── zk0
├── zk1
│  ├── myid
│  ├── version-2
│  │  ├── acceptedEpoch
│  │  ├── currentEpoch
│  │  ├── log.100000001
│  │  └── snapshot.0
│  └── zookeeper_server.pid
├── zk2
│  ├── myid
│  ├── version-2
│  │  ├── acceptedEpoch
│  │  ├── currentEpoch
│  │  ├── log.100000001
│  │  └── snapshot.0
│  └── zookeeper_server.pid
└── zk3
    ├── myid
    ├── version-2
    │  ├── acceptedEpoch
    │  ├── currentEpoch
    │  ├── log.100000001
    │  └── snapshot.100000000
    └── zookeeper_server.pid

7 directories, 18 files

4. zookeeper 命令行操作

我们通过客户端连接 ZooKeeper 的集群,我们可以任意的 zookeeper 是进行连接。

~ /home/conan/toolkit/zookeeper345/bin/zkCli.sh -server 192.168.1.201:2181

Connecting to 192.168.1.201
2013-08-12 05:25:39,260 [myid:] – INFO  [main:Environment@100] – Client environment:zookeeper.version=3.4.5-1392090, built on 09/30/2012 17:52 GMT
2013-08-12 05:25:39,267 [myid:] – INFO  [main:Environment@100] – Client environment:host.name=conan
2013-08-12 05:25:39,269 [myid:] – INFO  [main:Environment@100] – Client environment:java.version=1.6.0_29
2013-08-12 05:25:39,269 [myid:] – INFO  [main:Environment@100] – Client environment:java.vendor=Sun Microsystems Inc.
2013-08-12 05:25:39,270 [myid:] – INFO  [main:Environment@100] – Client environment:java.home=/home/conan/toolkit/jdk16/jre
2013-08-12 05:25:39,270 [myid:] – INFO  [main:Environment@100] – Client environment:java.class.path=/home/conan/toolkit/zookeeper345/bin/../build/classes:/home/conan/toolkit/zookeeper345/bin/../build/lib/*.jar:/home/conan/toolkit/zookeeper345/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/conan/toolkit/zookeeper345/bin/../lib/slf4j-api-1.6.1.jar:/home/conan/toolkit/zookeeper345/bin/../lib/netty-3.2.2.Final.jar:/home/conan/toolkit/zookeeper345/bin/../lib/log4j-1.2.15.jar:/home/conan/toolkit/zookeeper345/bin/../lib/jline-0.9.94.jar:/home/conan/toolkit/zookeeper345/bin/../zookeeper-3.4.5.jar:/home/conan/toolkit/zookeeper345/bin/../src/java/lib/*.jar:/home/conan/toolkit/zookeeper345/bin/../conf:
2013-08-12 05:25:39,271 [myid:] – INFO  [main:Environment@100] – Client environment:java.library.path=/home/conan/toolkit/jdk16/jre/lib/amd64/server:/home/conan/toolkit/jdk16/jre/lib/amd64:/home/conan/toolkit/jdk16/jre/../lib/amd64:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2013-08-12 05:25:39,275 [myid:] – INFO  [main:Environment@100] – Client environment:java.io.tmpdir=/tmp
2013-08-12 05:25:39,276 [myid:] – INFO  [main:Environment@100] – Client environment:java.compiler=
2013-08-12 05:25:39,276 [myid:] – INFO  [main:Environment@100] – Client environment:os.name=Linux
2013-08-12 05:25:39,277 [myid:] – INFO  [main:Environment@100] – Client environment:os.arch=amd64
2013-08-12 05:25:39,281 [myid:] – INFO  [main:Environment@100] – Client environment:os.version=3.5.0-23-generic
2013-08-12 05:25:39,282 [myid:] – INFO  [main:Environment@100] – Client environment:user.name=conan
2013-08-12 05:25:39,282 [myid:] – INFO  [main:Environment@100] – Client environment:user.home=/home/conan
2013-08-12 05:25:39,283 [myid:] – INFO  [main:Environment@100] – Client environment:user.dir=/home/conan/zoo
2013-08-12 05:25:39,284 [myid:] – INFO  [main:ZooKeeper@438] – Initiating client connection, connectString=192.168.1.201 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@22ba6c83
Welcome to ZooKeeper!
JLine support is enabled
[zk: 192.168.1.201(CONNECTING) 0] 2013-08-12 05:25:39,336 [myid:] – INFO  [main-SendThread(192.168.1.201:2181):ClientCnxn$SendThread@966] – Opening socket connection to server 192.168.1.201/192.168.1.201:2181. Will not attempt to authenticate using SASL (Unable to locate a login configuration)
2013-08-12 05:25:39,345 [myid:] – INFO  [main-SendThread(192.168.1.201:2181):ClientCnxn$SendThread@849] – Socket connection established to 192.168.1.201/192.168.1.201:2181, initiating session
2013-08-12 05:25:39,384 [myid:] – INFO  [main-SendThread(192.168.1.201:2181):ClientCnxn$SendThread@1207] – Session establishment complete on server 192.168.1.201/192.168.1.201:2181, sessionid = 0x1406f3c1ef90001, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null

[zk: 192.168.1.201(CONNECTED) 0]

集群已连接,下面我们要使用一下,ZooKeeper 的命令行操作。

命令行操作
通过 help 打印命令行帮助

[zk: 192.168.1.201(CONNECTED) 1] 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

ZooKeeper 的结构,很像是目录结构,我们看到了像 ls 这样熟悉的命令。

#ls, 查看 / 目录内容
[zk: 192.168.1.201(CONNECTED) 1] ls /
[zookeeper]

#create, 创建一个 znode 节点
[zk: 192.168.1.201(CONNECTED) 2] create /node conan
Created /node

#ls, 再查看 / 目录
[zk: 192.168.1.201(CONNECTED) 3] ls /
[node, zookeeper]

#get, 查看 /node 的数据信息
[zk: 192.168.1.201(CONNECTED) 4] get /node
conan
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000006
mtime = Mon Aug 12 05:32:49 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0

#set, 修改数据
[zk: 192.168.1.201(CONNECTED) 5] set /node fens.me
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000007
mtime = Mon Aug 12 05:34:32 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

#get, 再查看 /node 的数据信息,已改为 fens.me
[zk: 192.168.1.201(CONNECTED) 6] get /node
fens.me
cZxid = 0x100000006
ctime = Mon Aug 12 05:32:49 CST 2013
mZxid = 0x100000007
mtime = Mon Aug 12 05:34:32 CST 2013
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

#delete, 删除 /node
[zk: 192.168.1.201(CONNECTED) 7] delete /node
[zk: 192.168.1.201(CONNECTED) 8] ls /
[zookeeper]

#quit, 退出客户端连接
[zk: 192.168.1.201(CONNECTED) 19] quit
Quitting…
2013-08-12 05:40:29,304 [myid:] – INFO  [main:ZooKeeper@684] – Session: 0x1406f3c1ef90002 closed
2013-08-12 05:40:29,305 [myid:] – INFO  [main-EventThread:ClientCnxn$EventThread@509] – EventThread shut down

5. Java 编程现实命令行操作

package org.conan.zookeeper.demo;

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;

public class BasicDemo1 {

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException {
        // 创建一个与服务器的连接
        ZooKeeper zk = new ZooKeeper(“192.168.1.201:2181”, 60000, new Watcher() {
            // 监控所有被触发的事件
            public void process(WatchedEvent event) {
                System.out.println(“EVENT:” + event.getType());
            }
        });

        // 查看根节点
        System.out.println(“ls / => ” + zk.getChildren(“/”, true));

        // 创建一个目录节点
        if (zk.exists(“/node”, true) == null) {
            zk.create(“/node”, “conan”.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            System.out.println(“create /node conan”);
            // 查看 /node 节点数据
            System.out.println(“get /node => ” + new String(zk.getData(“/node”, false, null)));
            // 查看根节点
            System.out.println(“ls / => ” + zk.getChildren(“/”, true));
        }

        // 创建一个子目录节点
        if (zk.exists(“/node/sub1”, true) == null) {
            zk.create(“/node/sub1”, “sub1”.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            System.out.println(“create /node/sub1 sub1”);
            // 查看 node 节点
            System.out.println(“ls /node => ” + zk.getChildren(“/node”, true));
        }

        // 修改节点数据
        if (zk.exists(“/node”, true) != null) {
            zk.setData(“/node”, “changed”.getBytes(), -1);
            // 查看 /node 节点数据
            System.out.println(“get /node => ” + new String(zk.getData(“/node”, false, null)));
        }

        // 删除节点
        if (zk.exists(“/node/sub1”, true) != null) {
            zk.delete(“/node/sub1”, -1);
            zk.delete(“/node”, -1);
            // 查看根节点
            System.out.println(“ls / => ” + zk.getChildren(“/”, true));
        }

        // 关闭连接
        zk.close();
    }
}

运行结果:
2013-08-12 15:33:29,699 [myid:] – INFO  [main:Environment@97] – Client environment:zookeeper.version=3.3.1-942149, built on 05/07/2010 17:14 GMT
2013-08-12 15:33:29,702 [myid:] – INFO  [main:Environment@97] – Client environment:host.name=PC201304202140
2013-08-12 15:33:29,702 [myid:] – INFO  [main:Environment@97] – Client environment:java.version=1.6.0_45
2013-08-12 15:33:29,702 [myid:] – INFO  [main:Environment@97] – Client environment:java.vendor=Sun Microsystems Inc.
2013-08-12 15:33:29,702 [myid:] – INFO  [main:Environment@97] – Client environment:java.home=D:\toolkit\java\jdk6\jre
2013-08-12 15:33:29,703 [myid:] – INFO  [main:Environment@97] – Client environment:java.class.path=D:\workspace\java\zkdemo\target\classes;C:\Users\Administrator\.m2\repository\org\apache\hadoop\zookeeper\3.3.1\zookeeper-3.3.1.jar;C:\Users\Administrator\.m2\repository\log4j\log4j\1.2.15\log4j-1.2.15.jar;C:\Users\Administrator\.m2\repository\javax\mail\mail\1.4\mail-1.4.jar;C:\Users\Administrator\.m2\repository\javax\activation\activation\1.1\activation-1.1.jar;C:\Users\Administrator\.m2\repository\jline\jline\0.9.94\jline-0.9.94.jar;C:\Users\Administrator\.m2\repository\junit\junit\3.8.1\junit-3.8.1.jar
2013-08-12 15:33:29,703 [myid:] – INFO  [main:Environment@97] – Client environment:java.library.path=D:\toolkit\java\jdk6\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:\toolkit\Rtools\bin;D:\toolkit\Rtools\gcc-4.6.3\bin;C:\Program Files (x86)\Common Files\NetSarang;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\toolkit\Git\cmd;D:\toolkit\Git\bin;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\Program Files (x86)\Common Files\Ulead Systems\MPEG;C:\Program Files (x86)\QuickTime\QTSystem\;D:\toolkit\MiKTex\miktex\bin\x64\;D:\toolkit\sshclient;D:\toolkit\ant19\bin;D:\toolkit\eclipse;D:\toolkit\gradle15\bin;D:\toolkit\java\jdk6\bin;D:\toolkit\maven3\bin;D:\toolkit\mysql56\bin;D:\toolkit\Python27;D:\toolkit\putty;C:\Program Files\R\R-3.0.1\bin\x64;D:\toolkit\mongodb243\bin;D:\toolkit\php54;D:\toolkit\nginx140;D:\toolkit\nodejs;D:\toolkit\npm12\bin;D:\toolkit\java\jdk6\jre\bin\server;.
2013-08-12 15:33:29,703 [myid:] – INFO  [main:Environment@97] – Client environment:java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp\
2013-08-12 15:33:29,704 [myid:] – INFO  [main:Environment@97] – Client environment:java.compiler=
2013-08-12 15:33:29,704 [myid:] – INFO  [main:Environment@97] – Client environment:os.name=Windows 7
2013-08-12 15:33:29,704 [myid:] – INFO  [main:Environment@97] – Client environment:os.arch=amd64
2013-08-12 15:33:29,705 [myid:] – INFO  [main:Environment@97] – Client environment:os.version=6.1
2013-08-12 15:33:29,705 [myid:] – INFO  [main:Environment@97] – Client environment:user.name=Administrator
2013-08-12 15:33:29,705 [myid:] – INFO  [main:Environment@97] – Client environment:user.home=C:\Users\Administrator
2013-08-12 15:33:29,706 [myid:] – INFO  [main:Environment@97] – Client environment:user.dir=D:\workspace\java\zkdemo
2013-08-12 15:33:29,707 [myid:] – INFO  [main:ZooKeeper@373] – Initiating client connection, connectString=192.168.1.201:2181 sessionTimeout=60000 watcher=org.conan.zookeeper.demo.BasicDemo1$1@3dfeca64
2013-08-12 15:33:29,731 [myid:] – INFO  [main-SendThread():ClientCnxn$SendThread@1000] – Opening socket connection to server /192.168.1.201:2181
2013-08-12 15:33:38,736 [myid:] – INFO  [main-SendThread(192.168.1.201:2181):ClientCnxn$SendThread@908] – Socket connection established to 192.168.1.201/192.168.1.201:2181, initiating session
2013-08-12 15:33:38,804 [myid:] – INFO  [main-SendThread(192.168.1.201:2181):ClientCnxn$SendThread@701] – Session establishment complete on server 192.168.1.201/192.168.1.201:2181, sessionid = 0x1406f3c1ef9000d, negotiated timeout = 60000
EVENT:None
ls / => [zookeeper]
EVENT:NodeCreated
EVENT:NodeChildrenChanged
create /node conan
get /node => conan
ls / => [node, zookeeper]
EVENT:NodeCreated
create /node/sub1 sub1
ls /node => [sub1]
EVENT:NodeDataChanged
get /node => changed
EVENT:NodeDeleted
EVENT:NodeChildrenChanged
EVENT:NodeChildrenChanged
ls / => [zookeeper]
2013-08-12 15:33:38,877 [myid:] – INFO  [main:ZooKeeper@538] – Session: 0x1406f3c1ef9000d closed

pom.xml,maven 配置文件
<?xml version=”1.0″ encoding=”UTF-8″?>
<project
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”
xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”>
<modelVersion>4.0.0</modelVersion>
<groupId>org.conan.zookeeper</groupId>
<artifactId>zkdemo</artifactId>
<version>0.0.1</version>
<name>zkdemo</name>
<description>zkdemo</description>

<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.1</version>
<exclusions>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>

Ubuntu 14.04 安装分布式存储 Sheepdog+ZooKeeper  http://www.linuxidc.com/Linux/2014-12/110352.htm

CentOS 6 安装 sheepdog 虚拟机分布式储存  http://www.linuxidc.com/Linux/2013-08/89109.htm

ZooKeeper 集群配置 http://www.linuxidc.com/Linux/2013-06/86348.htm

使用 ZooKeeper 实现分布式共享锁 http://www.linuxidc.com/Linux/2013-06/85550.htm

分布式服务框架 ZooKeeper — 管理分布式环境中的数据 http://www.linuxidc.com/Linux/2013-06/85549.htm

ZooKeeper 集群环境搭建实践 http://www.linuxidc.com/Linux/2013-04/83562.htm

ZooKeeper 服务器集群环境配置实测 http://www.linuxidc.com/Linux/2013-04/83559.htm

ZooKeeper 集群安装 http://www.linuxidc.com/Linux/2012-10/72906.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计17287字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7998941
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件

【开源神器】微信公众号内容单篇、批量下载软件 大家好,我是星哥,很多人都希望能高效地保存微信公众号的文章,用于...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛NAS-11:咪咕视频订阅部署全攻略

星哥带你玩飞牛 NAS-11:咪咕视频订阅部署全攻略 前言 在家庭影音系统里,NAS 不仅是存储中心,更是内容...