zookeeper伪分布式配置安装

本文详细介绍了如何在单机上部署Zookeeper伪分布式集群,包括配置文件修改、端口设置、数据目录和日志目录区分等关键步骤。通过具体实例展示了如何避免端口冲突,并确保每个Zookeeper实例正确运行。

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

Zookeeper不但可以在单机上运行单机模式Zookeeper,而且可以在单机模拟集群模式 Zookeeper的运行,也就是将不同节点运行在同一台机器。我们知道伪分布模式下Hadoop的操作和分布式模式下有着很大的不同,但是在集群为分布 式模式下对Zookeeper的操作却和集群模式下没有本质的区别。显然,集群伪分布式模式为我们体验Zookeeper和做一些尝试性的实验提供了很大 的便利。比如,我们在实验的时候,可以先使用少量数据在集群伪分布模式下进行测试。当测试可行的时候,再将数据移植到集群模式进行真实的数据实验。这样不 但保证了它的可行性,同时大大提高了实验的效率。这种搭建方式,比较简便,成本比较低,适合测试和学习,如果你的手头机器不足,就可以在一台机器上部署了 3个server。

注意事项

在一台机器上部署了3个server,需要注意的是在集群为分布式模式下我们使用的每个配置文档模拟一台机器,也就是说单台机器及上运行多个Zookeeper实例。但是,必须保证每个配置文档的各个端口号不能冲突,除了clientPort不同之外,dataDir也不同。另外,还要在dataDir所对应的目录中创建myid文件来指定对应的Zookeeper服务器实例。

(1)clientPort端口:如果在1台机器上部署多个server,那么每台机器都要不同的 clientPort,比如 server1是2181,server2是2182,server3是2183,

(2)dataDir和dataLogDir:dataDir和dataLogDir也需要区分下,将数据文件和日志文件分开存放,同时每个server的这两变量所对应的路径都是不同的。

(3)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都不要一样,否则端口冲突。

配置/home/hadoop/zookeeper/conf下的文件zoo_sample.cfg

cp zoo_sample.cfg zoo1.cfg

代码清单 1.1 zoo1.cfg

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

把 dataDir=/tmp/zookeeper

改为 dataDir=/home/hadoop/zookeeper/data_1

# the port at which the clients will connect

clientPort=2181

#the location of the log file

添加 dataLogDir=/home/hadoop/zookeeper/logs_1

 

server.0=localhost:2287:3387

server.1=localhost:2288:3388

server.2=localhost:2289:3389

代码清单 1.2 zoo2.cfg

# The number of milliseconds of each tick

tickTime=2000

 

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

 

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

 

# the directory where the snapshot is stored.

dataDir=/usr/local/zk/data_2

 

# the port at which the clients will connect

clientPort=2182

 

#the location of the log file

dataLogDir=/usr/local/zk/logs_2

 

server.0=localhost:2287:3387

server.1=localhost:2288:3388

server.2=localhost:2289:3389

代码清单 zoo3.cfg

# The number of milliseconds of each tick

tickTime=2000

 

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

 

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

 

# the directory where the snapshot is stored.

dataDir=/usr/local/zk/data_3

 

# the port at which the clients will connect

clientPort=2183

 

#the location of the log file

dataLogDir=/usr/local/zk/logs_3

 

server.0=localhost:2287:3387

server.1=localhost:2288:3388

server.2=localhost:2289:3389

1. zoo.cfg配置文件如下:

  1. # The number of milliseconds of each tick

  2. tickTime=2000

  3. # The number of ticks that the initial

  4. # synchronization phase can take

  5. initLimit=10

  6. # The number of ticks that can pass between

  7. # sending a request and getting an acknowledgement

  8. syncLimit=5

  9. # the directory where the snapshot is stored.

  10. # do not use /tmp for storage, /tmp here is just

  11. # example sakes.

  12.  
  13. #dataDir=/usr/local/var/run/zookeeper/data

  14. dataDir=/Users/userName/Documents/zookeeper/data

  15. dataLogDir=/Users/userName/Documents/zookeeper/logs

  16.  
  17. # the port at which the clients will connect

  18. clientPort=2181

  19. # the maximum number of client connections.

  20. # increase this if you need to handle more clients

  21. #maxClientCnxns=60

  22. #

  23. # Be sure to read the maintenance section of the

  24. # administrator guide before turning on autopurge.

  25. #

  26. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

  27. #

  28. # The number of snapshots to retain in dataDir

  29. #autopurge.snapRetainCount=3

  30. # Purge task interval in hours

  31. # Set to "0" to disable auto purge feature

  32. #autopurge.purgeInterval=1

  33.  
  34. server.1=localhost:2881:3881

  35. server.2=localhost:2882:3882

  36. server.3=localhost:2883:3883

2. 复制zoo.cfg文件命名为zoo2.cfg, 改动dataDir, dataLogDir和clientPort三个参数

 
  1. dataDir=/Users/userName/Documents/zookeeper/data2

  2. dataLogDir=/Users/userName/Documents/zookeeper/logs2

  3. clientPort=2182

3. 再次复制zoo.cfg文件命令为zoo3.cfg, 改动dataDir, dataLogDir和clientPort三个参数

 
  1. dataDir=/Users/userName/Documents/zookeeper/data3

  2. dataLogDir=/Users/userName/Documents/zookeeper/logs3

  3. clientPort=2183

4. 在配置的/Users/userName/Documents/zookeeper/目录下创建data, data2, data3, logs, logs2, logs3目录

5. 在data文件夹中创建文件myid, 内容填1 (和server.1=localhost:2881:3881中的1一致即可)

    在data2文件夹中创建文件myid, 内容填2

    在data3文件夹中创建文件myid, 内容填3

注: myid文件中的内容和配置中的server.X的X一致即可

6. 启动三个服务

 
  1. $ zkServer start zoo.cfg

  2. ZooKeeper JMX enabled by default

  3. Using config: /usr/local/etc/zookeeper/zoo.cfg

  4. Starting zookeeper ... STARTED

  5. $ zkServer start zoo2.cfg

  6. ZooKeeper JMX enabled by default

  7. Using config: /usr/local/etc/zookeeper/zoo2.cfg

  8. Starting zookeeper ... STARTED

  9. $ zkServer start zoo3.cfg

  10. ZooKeeper JMX enabled by default

  11. Using config: /usr/local/etc/zookeeper/zoo3.cfg

  12. Starting zookeeper ... STARTED

7. 通过zkServer status命令查看各自的角色

 
  1. $ zkServer status zoo.cfg

  2. ZooKeeper JMX enabled by default

  3. Using config: /usr/local/etc/zookeeper/zoo.cfg

  4. Mode: follower

  5. $ zkServer status zoo2.cfg

  6. ZooKeeper JMX enabled by default

  7. Using config: /usr/local/etc/zookeeper/zoo2.cfg

  8. Mode: leader

  9. $ zkServer status zoo3.cfg

  10. ZooKeeper JMX enabled by default

  11. Using config: /usr/local/etc/zookeeper/zoo3.cfg

  12. Mode: follower

可看出, 选举的结果为: server2为leader(master), server1和server3为follower(slave)节点

 

注意事项:

1. 第4步中的几个文件夹需要提前创建, 否则可能报错

2. 注意cfg中的配置(server.1=localhost:2881:3881), localhost别写错了, 2881端口别写成2181了

3. 其他错误可参见: https://blog.youkuaiyun.com/xiewendong93/article/details/50500471

<think>嗯,用户想了解ZooKeeper伪分布式安装教程和配置指南。首先,我需要回忆一下ZooKeeper的伪集群模式是怎么回事。根据用户提供的引用[1],伪集群模式是在单台机器上运行多个ZooKeeper实例,每个实例有不同的配置和端口。那安装步骤大致包括准备环境、下载安装包、配置每个实例、创建数据和日志目录、设置myid文件、启动服务以及验证集群状态。 首先,用户可能需要确认已经安装了Java环境,因为ZooKeeper依赖Java。然后,下载并解压ZooKeeper安装包。接下来是配置文件的修改,每个实例需要不同的端口号,比如客户端端口、服务器间通信端口等。引用[1]提到每个实例要有自己的配置文件,指定不同的端口和数据存储位置。例如,第一个实例的配置文件中clientPort是2181,而第二个可能是2182,依此类推。 然后,需要为每个实例创建数据目录和日志目录,并在数据目录下创建myid文件,写入对应的服务器ID。这样每个实例才能正确识别自己在集群中的角色。启动服务时,可能需要分别指定不同的配置文件,所以启动命令要指向各自的conf文件。 验证部分,用户可以通过客户端连接不同的端口,使用命令如stat来查看集群状态,确认各个节点是否正确加入。另外,引用[2]提到了监控配置,用户可能还需要配置监控工具,比如Prometheus或Telegraf,但用户的问题主要是安装配置,这部分可以作为扩展建议。 用户提供的引用[3]提到了MapReduce和Yarn的配置,可能和Hadoop相关,但这里的问题是关于ZooKeeper的,暂时不需要涉及。不过需要注意,如果在Hadoop环境中使用ZooKeeper,可能需要额外的集成步骤,但用户没有提到这点,所以暂时忽略。 在编写步骤时,需要详细说明每个配置项的作用,比如tickTime、initLimit、syncLimit,以及server.X的配置。这些参数影响集群的同步和通信,正确设置对集群的稳定性很重要。同时,要提醒用户确保端口没有被占用,防火墙设置正确,避免通信问题。 常见问题部分需要考虑端口冲突、myid文件未创建或错误、防火墙阻止通信等。这些都是安装过程中容易出错的地方,提前提示可以帮助用户避免问题。另外,监控配置可以作为可选步骤,提升用户对集群运行状态的掌握。 总结一下,回答的结构应该是先介绍伪分布式模式的概念,然后分步骤详细说明安装配置过程,包括环境准备、下载安装配置实例、创建目录、启动服务、验证状态,最后给出常见问题解决和扩展建议。同时,引用相关的站内资料,比如引用[1]来解释伪集群模式的定义,引用[2]来建议监控配置,但用户当前的问题可能不需要深入监控部分,所以作为可选内容提及即可。</think>### ZooKeeper伪分布式模式安装指南 #### 一、伪分布式模式概念 伪分布式模式指在**单台机器**上通过不同端口启动多个ZooKeeper服务实例,模拟真实集群环境。每个实例拥有独立配置文件、数据目录和通信端口[^1]。 --- #### 二、安装步骤 1. **环境准备** - 操作系统:Linux/Unix(推荐)或Windows(需调整路径) - 依赖环境:安装JDK 8+,配置`JAVA_HOME` - 下载ZooKeeper安装包(建议版本3.4+) 2. **解压安装包** ```bash tar -zxvf apache-zookeeper-3.8.1-bin.tar.gz mv apache-zookeeper-3.8.1-bin /opt/zookeeper ``` 3. **配置多实例** - 创建3个实例目录: ```bash mkdir -p /opt/zookeeper/{node1,node2,node3} ``` - 每个实例配置`zoo.cfg`(以node1为例): ```properties # node1/conf/zoo.cfg tickTime=2000 initLimit=10 syncLimit=5 dataDir=/opt/zookeeper/node1/data dataLogDir=/opt/zookeeper/node1/logs clientPort=2181 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890 ``` - `clientPort`:客户端连接端口(不同实例需唯一) - `server.X`:集群节点定义,格式为`IP:数据同步端口:选举端口` 4. **创建数据目录与myid** ```bash # node1 mkdir -p /opt/zookeeper/node1/{data,logs} echo 1 > /opt/zookeeper/node1/data/myid # node2/node3同理,分别写入2和3 ``` 5. **启动服务** ```bash # 分别启动三个实例(指定不同配置文件) bin/zkServer.sh start /opt/zookeeper/node1/conf/zoo.cfg bin/zkServer.sh start /opt/zookeeper/node2/conf/zoo.cfg bin/zkServer.sh start /opt/zookeeper/node3/conf/zoo.cfg ``` 6. **验证集群状态** ```bash echo stat | nc 127.0.0.1 2181 # 查看node1状态 echo stat | nc 127.0.0.1 2182 # 查看node2状态 ``` 输出应包含`Mode: follower`或`Mode: leader`。 --- #### 三、关键配置说明 | 参数 | 作用 | 示例值 | |------|------|--------| | `tickTime` | 基础时间单元(毫秒) | 2000 | | `initLimit` | 初始化连接超时(tick倍数) | 10 | | `syncLimit` | 心跳检测超时(tick倍数) | 5 | | `dataDir` | 数据快照存储路径 | /opt/zookeeper/node1/data | | `clientPort` | 客户端连接端口 | 2181/2182/2183 | | `server.X` | 集群节点定义 | 127.0.0.1:2888:3888 | --- #### 四、常见问题 1. **端口冲突** 检查`clientPort`、`server.X`中端口是否被占用 ```bash netstat -tuln | grep 2181 ``` 2. **myid文件错误** 确保`dataDir`目录下`myid`文件内容与`server.X`的ID一致 3. **防火墙限制** 伪分布式模式下仍需允许本地端口通信 --- #### 五、扩展配置(可选) 参考引用[2]的监控配置: ```properties # 添加至zoo.cfg metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider metricsProvider.httpPort=7000 metricsProvider.exportJvmInfo=true ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值