zookeeper 的安装使用

本文介绍了Zookeeper的部署步骤及配置方法,包括选择稳定版本、配置zoo.cfg文件、创建myid文件等内容,并提供了启动服务及常见异常处理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Zookeeper官方文档特别强调,由于FreeBSD系统的JVM对Java的NIO Selector支持的不是很好,所以不建议在该系统上部署生产环境的Zookeeper服务器。

zookeeper使用

1,下载Zookeeper安装包。

下载地址为:http://zookeeper.apache.org/releases.html。注意用户可以选择稳定版本进行下载,下载后会得到一个文件名类似于zookeeper-x.x.x.tar.gz的文件,解压到一个目录,例如/opt/zookeeper-3.4.3/目录下,同时我们约定,在下文中使用%ZK_HOME%代表该目录。

2.配置文件zoo.cfg。

初次使用Zookeeper,需要将%ZK_HOME%/conf目录下的zoo_sample.cfg文件重命名为zoo.cfg,并且按照如下代码进行简单配置即可:

tickTime=2000

dataDir=/var/lib/zookeeper/

clientPort=2181

initLimit=5

syncLimit=2

server.1=IP1:28883888

server.2=IP2:2888:3888

server.3=IP3:2888:3888

关于Zookeeper的参数配置,将在后面做详细讲解,这里只是简单地说下

  • 在集群模式下,集群中的每台机器都需要感知到整个集群是由那几台机器组成的,在配置文件中,可以按照这样的格式进行配置,每一行都代表一个机器配置:server.id=host:port:port    其中,id被称为Server ID,用来标识该机器在集群中的机器序号。同时,在每台Zookeeper机器上,我们都需要在数据目录(即dataDir参数指定的那个目录)下创建一个myid文件,该文件只有一行内容,并且是一个数字,即对应于每台机器的Server ID数字。
  • 在ZooKeepe的设计中,集群中所有机器上zoo.cfg文件的内容都应该是一致的。因此最好使用SVN或是GIT把此文件管理起来,确保每台机器都能共享到一份相同的配置。
  • 上面提到了,myid文件中只有一个数字,即一个Server ID。例如,server.1的myid文件内容就是“1”。注意,请确保每个服务器的myid文件中的数字不同,并且和自己坐在机器的zoo.cfg中server.id=host:port:port的id值一致。另外,id的范围是1~255.

3.创建myid文件。

在dataDir所配置的目录下,创建一个名为myid的文件,在该文件的第一行写上一个数字,和zoo.cfg中当前机器的编号对应上。

4.安装相同的步骤,为其他机器配置zoo.cfg和myid文件。

5.启动ZooKeeper服务

至此,所有的选项都已经基本配置完毕,可以使用%ZK_HOME%bin目录下的zkServer.sh脚本进行服务器的启动,如下:

$sh zkServer.sh start

JMX enabled by default

Using config:/opt/zookeeper-3.4.3/bin/../conf/zoo.cfg

Starting zookeeper .... STARTED

6.验证服务器。

启动完成后,可以使用如下命令来检查服务器启动是否正常:

$telnet 127.0.0.1 2181

Trying 127.0.0.1....

Connected to localhost.localdomain(127.0.0.1).

Escape character is '^]'

stat 

Zookeeper version:3.4.3-1240972,built on 12/28/2016 10:48 GMT

Clients:

/127.00.1:502557[0](queued=0,recved=1,sent=0)


latency min/avg/max:0/1/4489

Received:8444689

Sent:993100

Outstanding:0

Zxid:0x600084344

Mode:leader

Node count:37

上面就是通过Telnet方式,使用stat命令进行服务器启动的验证,如果出现和上面类似的输出信息,就说明服务器已经正常启动了。


运行服务

启动服务

常见启动Zookeeper服务的方式由两种:

java命令行:

具体方法是在Zookeeper3.4.3版本中的%ZK_HOME%目录下执行如下命令:

$java -cp zookeeper -3.4.3.jar:lib/slf4j-api-1.6.1.jar:lib/slf4j-log4j12-1.6.1.jar:lib/log4j-1.2.15.jar:conf org.apache.zookeeper.server.quorum.QuorumPeerMain conf/zoo.cfg

使用ZooKeeper自带的启动脚本来启动ZooKeeper:

在%ZK_HOME%bin目录下有几个有用的脚本。

zkCleanup:清理ZooKeeper历史数据,包括事务日志文件和快照数据文件

zkCli:ZooKeeper的一个简易客户端

zkEnv:设置ZooKeeper的环境变量

zkServer:ZooKeeper服务器的启动,停止和重启脚本


常见异常

在启动的时候,通常会碰到一些异常,下面将对这些常见的异常进行讲解。

端口被占用:

在启动ZooKeeper的时候,可能出现如下“端口被占用”的异常,导致服务器无法正常启动:

java.net.BindException:Address already in user这个异常时java程序员最熟悉的异常之一,导致这个异常的原因通常是因为2181端口被占用。通常的做法就是说检查当前机器上哪个进程正在占用这个端口,确认其端口占用的必要性,将该进程停止后,再一次启动ZooKeeper即可。也可以编辑%ZK_HOME%conf/zoo.cfg文件,更换ZooKeeper的clientPort配置,例如,可以将其设置为2080:

。。。

dataDir=/var/lib/zookeeper/

clientPort=2080

initLimit=5

......

磁盘没有剩余空间:

无论是在ZooKeeper启动还是正常运行过程中,都有可能出现如下“磁盘没有剩余空间”的异常,一旦遇到这个异常,ZooKeeper会立即执行Failover策略,从而退出进程:

java.io.IOException:No space left on device遇到这个问题,通常的做法就是清理磁盘。当然,为了避免以后再次遇到此类磁盘空间满的问题,需要加上对ZooKeeper机器的此案使用量监控和Zookeeper日的自动起立。关于ZooKeeper日志清理,我们在后面介绍。

无法找到myid文件:

ERROR[main:QuorumPeerMain@85]-Invalid config,exiting abnormally

............................

Coused by: java.lang.IllegalArgumentException:/tmp/zookeeper/myid file is missing

。。。。。。。。。。。。。。。。。。。

对于这个问题,只需在数据目录下创建好一个myid文件即可。

集群中其他机器leader选举端口未开:

在集群模式部署下服务器逐台启动的过程中,会碰到类似于下面这样的异常:

- Cannot open channel to 2 at election address /122.228.242.241.3888

这是由于在启动过程中,虽然当前机器启动了,但其他机器还没有启动完成,因此无法和其他机器在响应端口上进行连接。对于这个问题,只要快速启动集群中的其他机器即可。另外,上面的异常中表明了是3888这个端口无法创建连接,这是因为ZooKeeper默认使用3888端口进行Leader选举过程中的投票通信,关于ZooKeeper的Leader选举,后面会详细讲解。

Zookeeper是一个分布式协调服务,常用于大型分布式系统中。以下是Zookeeper安装使用步骤: 1. 下载Zookeeper:你可以从Apache官方网站下载Zookeeper安装包。确保选择与你的操作系统版本相对应的安装包。 2. 解压安装包:将下载的安装包解压到你想要安装的目录下。 3. 创建数据目录:在Zookeeper安装目录下创建一个数据目录,用于存储Zookeeper的数据。 4. 配置Zookeeper:复制Zookeeper的默认配置文件,重命名为`zoo.cfg`。打开该文件,根据你的需求进行配置。其中,一些重要的配置项包括: - `dataDir`:Zookeeper数据目录的路径。 - `clientPort`:Zookeeper服务监听的端口,默认为2181。 - `tickTime`:Zookeeper中的基本时间单元,以毫秒为单位。 - `initLimit`和`syncLimit`:这两个参数用于配置Zookeeper中的leader选举过程。 5. 启动Zookeeper:通过命令行进入到Zookeeper安装目录下,执行以下命令来启动Zookeeper: ``` bin/zkServer.sh start ``` 6. 验证Zookeeper是否运行:执行以下命令来验证Zookeeper是否成功启动: ``` bin/zkCli.sh ``` 如果成功连接到Zookeeper的命令行界面,则表示Zookeeper已经成功运行。 现在你已经安装并启动了Zookeeper。你可以使用Zookeeper提供的API来创建、管理和监控分布式应用程序。如果你需要更详细的使用指南,可以参考Zookeeper的官方文档或者其他相关资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值