Zookeeper 及其安装配置和启动

时间:2024-03-26 19:50:30

一、概念

ZooKeeper是一个分布式的,开源的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是大数据软件如Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口。

Zookeeper 及其安装配置和启动

Java

二、zookeeper的安装和配置【伪集群模式】:

官网:https://www.apache.org/dyn/closer.cgi/zookeeper/

找到一个stable版本的下载地址:

wget http://mirrors.shuosc.org/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz

解压:tar -zxvf zookeeper-3.4.11.tar.gz

创建软连接:ln -s zookeeper-3.4.11 zookeeper

在同一个机器中配置三个实例(Ensemble):

# cd zookeeper/conf/

配置第一个:

# cp zoo_sample.cfg zoo1.cfg

# vi zoo1.cfg

配置内容:

tickTime=2000

clientPort=2181

initLimit=5

syncLimit=2

dataDir=/var/lib/zookeeperdata/1

server.1=localhost:2888:3888

server.2=localhost:2889:3889

server.3=localhost:2890:3890

各个参数的意义:

tickTime:心跳检测的时间间隔(毫秒),缺省:2000

clientPort:其他应用(比如solr)访问ZooKeeper的端口,缺省:2181

initLimit:初次同步的阶段(followers连接到leader的阶段),允许的时长(tick数量),缺省:10

syncLimit:允许followers同步到ZooKeeper的时长(tick数量),缺省:5

dataDir:数据(比如所管理的配置文件)的存放路径,初始时应该为空

server.X:X是ensemble中一个服务器的id,后面指定该server的hostname、第一个端口号用于ZooKeeper之间的通信、第二个端口用于和其他应用之间的通信

配置第二个:

# cp zoo1.cfg zoo2.cfg

修改:dataDir=/var/lib/zookeeperdata/2

修改:clientPort=2182

配置第三个:

# cp zoo1.cfg zoo3.cfg

修改:dataDir=/var/lib/zookeeperdata/3

修改:clientPort=2183

Zookeeper 及其安装配置和启动

Java

创建相应的dataDir目录和myid文件:

# cd /var/lib

# mkdir zookeeperdata

# cd zookeeperdata

# mkdir 1

# mkdir 2

# mkdir 3

# echo "1" > 1/myid

# echo "2" > 2/myid

# echo "3" > 3/myid

启动ZooKeeper:

# cd <ZOOKEEPER_HOME>

# bin/zkServer.sh start ./conf/zoo1.cfg

# bin/zkServer.sh start ./conf/zoo2.cfg

# bin/zkServer.sh start ./conf/zoo3.cfg

启动结果:

JMX enabled by default

Using config: /opt/app/zookeeper/bin/../conf/zoo1.cfg

Starting zookeeper ... STARTED

JMX enabled by default

Using config: /opt/app/zookeeper/bin/../conf/zoo2.cfg

Starting zookeeper ... STARTED

JMX enabled by default

Using config: /opt/app/zookeeper/bin/../conf/zoo3.cfg

Starting zookeeper ... STARTED

查看状态:

用jps命令查看进程:

# jps

24617 QuorumPeerMain (这个就是zookeeper进程)

/opt/app/zookeeper/bin/zkServer.sh status zoo1.cfg

JMX enabled by default

Using config: /opt/app/zookeeper/bin/../conf/zoo1.cfg

Error contacting service. It is probably not running.

说明有错误,查看日志文件:

# cd <zookeeper_home>

# less zookeeper.out

java.net.BindException: 地址已在使用

杀掉当前进程:

# kill -9 24617

Zookeeper 及其安装配置和启动

Java

再重启那三个实例后,查看状态:

# /opt/app/zookeeper/bin/zkServer.sh status zoo1.cfg

JMX enabled by default

Using config: /opt/app/zookeeper/bin/../conf/zoo1.cfg

Mode: follower

# /opt/app/zookeeper/bin/zkServer.sh status zoo2.cfg

JMX enabled by default

Using config: /opt/app/zookeeper/bin/../conf/zoo2.cfg

Mode: leader

# /opt/app/zookeeper/bin/zkServer.sh status zoo3.cfg

JMX enabled by default

Using config: /opt/app/zookeeper/bin/../conf/zoo3.cfg

Mode: follower

三、zookeeper的安装和配置【单机模式】:

解压到合适目录. 进入zookeeper目录下的conf子目录, 创建zoo.cfg:

修改如下内容:

tickTime=2000

dataDir=/Users/apple/zookeeper/data

dataLogDir=/Users/apple/zookeeper/logs

clientPort=4180

参数说明:

tickTime: zookeeper中使用的基本时间单位, 毫秒值.

dataDir: 数据目录. 可以是任意目录.

dataLogDir: log目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和dataDir相同的设置.

clientPort: 监听client连接的端口号.

至此, zookeeper的单机模式已经配置好了. 启动server只需运行脚本:

bin/zkServer.sh start

Server启动之后, 就可以启动client连接server了, 执行脚本:

bin/zkCli.sh -server localhost:4180

Zookeeper 及其安装配置和启动

Java

四、zookeeper的安装和配置【集群模式】:

集群模式的配置和伪集群基本一致:

由于集群模式下, 各server部署在不同的机器上, 因此各server的conf/zoo.cfg文件可以完全一样。下面是一个示例:

tickTime=2000

initLimit=5

syncLimit=2

dataDir=/home/zookeeper/data

dataLogDir=/home/zookeeper/logs

clientPort=4180

server.43=10.1.39.43:2888:3888

server.47=10.1.39.47:2888:3888

server.48=10.1.39.48:2888:3888

示例中部署了3台zookeeper server, 分别部署在10.1.39.43, 10.1.39.47, 10.1.39.48上. 需要注意的是, 各server的dataDir目录下的myid文件中的数字必须不同.

10.1.39.43 server的myid为43, 10.1.39.47 server的myid为47, 10.1.39.48 server的myid为48.

Java学习资料(复制下段链接至浏览器即可)

data:textml;charset=UTF-8;base64,5oGt5Zac5L2g77yM5p625p6E5biI5a2m5Lmg576k5Y+35pivNjg2NTc5MDE0Cg==