在Virtualbox中创建zookeeper集群(Ubuntu18.04)

本文介绍了如何在Virtualbox虚拟环境中使用Ubuntu18.04搭建ZooKeeper集群。首先,确保安装了JRE,然后复制虚拟机并配置静态IP。接着,为每个节点创建ZooKeeper数据目录,并在myid文件中写入对应ID。在zoo.cfg配置文件中设置节点信息。启动服务时,可能会遇到myid不匹配或拒绝连接的问题,解决办法是核对myid文件与配置文件中的IP和ID一致性,以及检查/etc/hosts文件设置。

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

ZooKeeper的安装非常简单,因为它是采用Java语言编写的,在运行它之前需要安装Java虚拟机,在这里我们部署一个由三个ZooKeeper节点组成的集群。将三个节点放在三台Ubuntu操作系统上,它们的IP地址分别是192.168.1.121、192.168.1.122、192.168.1.123。

安装jre:

junyu@mycom:~$ sudo apt install default-jre -y
下载ZooKeeper安装包,建立一个ZooKeeper目录,将其解压:
junyu@mycom:~$ wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
junyu@junyu:~$ sudo mkdir /app && sudo cp zookeeper-3.4.14.tar.gz /app
junyu@junyu:~$ cd /app && sudo tar zxvf zookeeper-3.4.14.tar.gz 
junyu@mycom:/app$ sudo ln -s zookeeper-3.4.14 zookeeper

复制虚拟机

并重新生成mac网卡地址,同时配置静态ip

分别新建zookeeper数据目录

在目录中创建一个myid文件,写入ID号,1代表集群中的第一台服务器,其他两台类同:

junyu@mycom:~$ sudo passwd root
junyu@mycom:~$ su root
root@junyu:/app# mkdir -p /var/zookeeper/data
root@junyu:/app# echo 1 > /var/zookeeper/data/myid

分别编辑zookeeper/conf/zoo.cfg文件

root@mycom:/home/junyu# mv /app/zookeeper/conf/zoo_sample.cfg zoo.cfg
root@mycom:/home/junyu# gedit /app/zookeeper/conf/zoo.cfg

文件内容如下:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper/data
clientPort=2181
server.1=192.168.1.201:2888:3888
server.2=192.168.1.202:2888:3888
server.3=192.168.1.203:2888:3888

分别执行zkServer.sh脚本启动服务:

root@mycom:/home/junyu# cd /app/zookeeper/bin/
root@mycom:/app/zookeeper/bin# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

遇到问题,myid

 root@mycom:/app/zookeeper/bin# cat zookeeper.out
2019-04-02 19:20:32,598 [myid:] - INFO  [main:QuorumPeerConfig@136] - Reading configuration from: /app/zookeeper/bin/../conf/zoo.cfg
2019-04-02 19:20:32,620 [myid:] - INFO  [main:QuorumPeer$QuorumServer@184] - Resolved hostname: 192.168.1.122 to address: /192.168.1.122
2019-04-02 19:20:32,620 [myid:] - INFO  [main:QuorumPeer$QuorumServer@184] - Resolved hostname: 192.168.1.121 to address: /192.168.1.121
2019-04-02 19:20:32,621 [myid:] - INFO  [main:QuorumPeer$QuorumServer@184] - Resolved hostname: 192.168.1.123 to address: /192.168.1.123
2019-04-02 19:20:32,621 [myid:] - INFO  [main:QuorumPeerConfig@398] - Defaulting to majority quorums
2019-04-02 19:20:32,624 [myid:] - ERROR [main:QuorumPeerMain@88] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /app/zookeeper/bin/../conf/zoo.cfg
	at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:156)
	at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:104)
	at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81)
Caused by: java.lang.IllegalArgumentException: serverid “1” is not a number
	at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:422)
	at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:152)
	... 2 more
Invalid config, exiting abnormally

分别修改/var/zookeeper/data/myid为1、2、3并重启整个集群

root@mycom:/app/zookeeper/bin# echo 1 > /var/zookeeper/data/myid
root@mycom:/app/zookeeper/bin# ./zkServer.sh restart
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... ./zkServer.sh: 第 182 行: kill: (3589) - 没有那个进程
STOPPED
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
root@mycom:/app/zookeeper/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
root@mycom:/app/zookeeper/bin# jps
3691 QuorumPeerMain
3741 Jps

遇到问题,拒绝连接

2019-04-02 19:28:49,081 [myid:3] - WARN  [/192.168.1.123:3888:QuorumCnxManager@584] - Cannot open channel to 2 at election address /192.168.1.122:3888
java.net.ConnectException: 拒绝连接 (Connection refused)
	at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
	at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400)
	at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243)
	at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402)
	at java.base/java.net.Socket.connect(Socket.java:591)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.handleConnection(QuorumCnxManager.java:486)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager.receiveConnection(QuorumCnxManager.java:386)
	at org.apache.zookeeper.server.quorum.QuorumCnxManager$Listener.run(QuorumCnxManager.java:754)
2019-04-02 19:28:49,081 [myid:3] - INFO  [/192.168.1.123:3888:QuorumPeer$QuorumServer@184] -

发现ip地址及对应的myid和zoo.cfg中不一致(此步骤之前在/etc/hosts中注释了127.0.0.1一行,影响未知)

root@mycom:/app/zookeeper/bin# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:64:8b:3a brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.121/24 brd 192.168.1.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::d1f1:3794:4fa4:5411/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
root@mycom:/app/zookeeper/bin# cat /var/zookeeper/data/myid
2
root@mycom:/app/zookeeper/bin# cat ../conf/zoo.cfg 
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper/data
clientPort=2181
server.1=192.168.1.121:2888:3888
server.2=192.168.1.122:2888:3888
server.3=192.168.1.123:2888:3888
root@mycom:/app/zookeeper/bin# 

改正重启

root@mycom:/app/zookeeper/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Mode: leader
root@mycom:/app/zookeeper/bin# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:76:cf:f9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.123/24 brd 192.168.1.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::5b5a:828b:4b64:a52e/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
root@mycom:/app/zookeeper/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Mode: follower
root@mycom:/app/zookeeper/bin# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:64:8b:3a brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.121/24 brd 192.168.1.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::d1f1:3794:4fa4:5411/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

root@mycom:/app/zookeeper/bin# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/bin/../conf/zoo.cfg
Mode: follower
root@mycom:/app/zookeeper/bin# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:7c:a5:9e brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.122/24 brd 192.168.1.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a222:234f:6537:d311/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
root@mycom:/app/zookeeper/bin# 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值