1.登陆zookeeper官网下载 https://zookeeper.apache.org/
zookeeper-3.4.8.tar.gz
解压:tar -zxvf zookeeper-3.4.8.tar.gz
1.单机
进入conf文件夹 创建一个配置文件zoo.cfg。
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/zk/data clientPort=2181
前提创建了/usr/local/zookeeper/zk/data文件夹
tickTime:Zookeeper 服务器之间或客户端与服务器之间心跳的时间间隔。
dataDir:Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
clientPort:Zookeeper 服务器监听端口,用来接受客户端的访问请求。
配置完以后,就可以启动zookeeper服务了,进入Zookeeper/bin目录,运行下面的命令来启动Zookeeper服务
[[email protected] bin]# ./zkServer.sh start ZooKeeper JMX enabled by default Using config: /usr/local/software/zookeeper-3.4.8/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
默认加载conf名为 zoo.cfg文件,或者可以这样指定文件
[[email protected] bin]# ./zkServer.sh start ../conf/zoo.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo.cfg Starting zookeeper ... STARTED
查看服务状态
./zkServer.sh status ../conf/zoo.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo.cfg Mode: standalone
使用Zookeeper的客户端来连接并测试了
$ ./zkCli.sh 或 $ ./zkCli.sh -server 127.0.0.1:2181
连接之后可以时候help来查看有哪些命令可以使用
[zk: 127.0.0.1:2181(CONNECTED) 0] ls / #查看根节点 [zookeeper] [zk: 127.0.0.1:2181(CONNECTED) 1] create /mykey1 myvalue1 #创建一个新节点mykey1 Created /mykey1 [zk: 127.0.0.1:2181(CONNECTED) 2] create /mykey2 myvalue2 #创建一个新节点mykey2 Created /mykey2 [zk: 127.0.0.1:2181(CONNECTED) 13] ls / #查看根节点 [mykey1, mykey2, zookeeper] [zk: 127.0.0.1:2181(CONNECTED) 23] get /mykey1 #获取mykey1节点 myvalue1 cZxid = 0x6 ctime = Sat Sep 20 21:00:17 CST 2014 mZxid = 0x8 mtime = Sat Sep 20 21:01:06 CST 2014 pZxid = 0x6 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 9 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 23] get /mykey2 #获取mykey2节点 myvalue2 cZxid = 0x6 ctime = Sat Sep 20 21:00:17 CST 2014 mZxid = 0x8 mtime = Sat Sep 20 21:01:06 CST 2014 pZxid = 0x6 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 9 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 24] set /mykey1 myvalue11 #获取mykey1节点 [zk: 127.0.0.1:2181(CONNECTED) 25] set /mykey2 myvalue22 #获取mykey2节点 [zk: 127.0.0.1:2181(CONNECTED) 26] set /mykey1 #删除mykey1节点 [zk: 127.0.0.1:2181(CONNECTED) 27] set /mykey2 #删除mykey2节点
2.集群
注意事项
在一台机器上部署了3个server,需要注意的是在集群为分布式模式下我们使用的每个配置文档模拟一台机器,也就是说单台机器及上运行多个Zookeeper实例。但是,必须保证每个配置文档的各个端口号不能冲突,除了clientPort不同之外,dataDir也不同。另外,还要在dataDir所对应的目录中创建myid文件来指定对应的Zookeeper服务器实例。
■ clientPort端口:如果在1台机器上部署多个server,那么每台机器都要不同的 clientPort,比如 server1是2181,server2是2182,server3是2183
■ dataDir和dataLogDir:dataDir和dataLogDir也需要区分下,将数据文件和日志文件分开存放,同时每个server的这两变量所对应的路径都是不同的
■ server.X和myid: server.X 这个数字就是对应,data/myid中的数字。在3个server的myid文件中分别写入了0,1,2,那么每个server中的zoo.cfg都配 server.0 server.2,server.3就行了。因为在同一台机器上,后面连着的2个端口,3个server都不要一样,否则端口冲突
---------------------------------------------
新建3个配置文件
内容如下
zoo1.cfg
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/zk1/data clientPort=2182 dataLogDir=/usr/local/zookeeper/zk1/logs server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389
zoo2.cfg
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/zk2/data clientPort=2183 dataLogDir=/usr/local/zookeeper/zk2/logs server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389
zoo3.cfg
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/usr/local/zookeeper/zk3/data clientPort=2184 dataLogDir=/usr/local/zookeeper/zk3/logs server.1=localhost:2287:3387 server.2=localhost:2288:3388 server.3=localhost:2289:3389
每个实例都初始化相应data和log文件,例如zoo1.cfg的
启动 zoo1.cfg ,好像成功了
[[email protected] bin]# ./zkServer.sh start ../conf/zoo1.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo1.cfg Starting zookeeper ... STARTED
查看状态发现,没成功
[[email protected] bin]# ./zkServer.sh status ../conf/zoo1.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo1.cfg Error contacting service. It is probably not running.
应该就是zoo1.cfg出错了,原来是配置文件有错误,要么路径错,要么mypid错了
zoo.cfg配置文件里dataDir指定的那个目录下创建myid文件,并且指定id,改id为你zoo.cfg文件中server.1=localhost:2888:3888中的 1.只要在myid头部写入1即可.
vim myid
同理,为其他两个实例是指myid
在运行完第一条指令之后,会出现一些错误异常,产生异常信息的原因是由于Zookeeper 服务的每个实例都拥有全局配置信息,他们在启动的时候会随时随地的进行Leader选举操作。此时,第一个启动的Zookeeper需要和另外两个 Zookeeper实例进行通信。但是,另外两个Zookeeper实例还没有启动起来,因此就产生了这的异样信息。我们直接将其忽略即可,待把图中“2 号”和“3号”Zookeeper实例启动起来之后,相应的异常信息自然会消失。此时,可以通过下面三条命令,来查询。
[[email protected] bin]# ./zkServer.sh start ../conf/zoo1.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo1.cfg Starting zookeeper ... STARTED [[email protected] bin]# ./zkServer.sh status ../conf/zoo1.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo1.cfg Error contacting service. It is probably not running. [[email protected] bin]# ./zkServer.sh start ../conf/zoo2.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo2.cfg Starting zookeeper ... STARTED [[email protected] bin]# ./zkServer.sh status ../conf/zoo2.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo2.cfg Mode: leader [[email protected] bin]# ./zkServer.sh status ../conf/zoo1.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo1.cfg Mode: follower [[email protected] bin]# ./zkServer.sh start ../conf/zoo3.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo3.cfg Starting zookeeper ... STARTED [[email protected] bin]# ./zkServer.sh status ../conf/zoo3.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo3.cfg Mode: follower
成功
一些命令
启动 ./zkServer.sh start ../conf/zoo1.cfg 停止 ./zkServer.sh stop ../conf/zoo1.cfg 查看状态 ./zkServer.sh status ../conf/zoo1.cfg 启动客户端 ./zkCli.sh -server 127.0.0.1:2181
出,fa