1. 准备工作
  • 安装JDK1.8,可以先检查自己的系统是否已经安装好了jdk。我自己的系统已经安装好了,大家可以参考CentOS7 安装JDK1.8
java -version
  • 下载zookeeper
  1. 最开始,自己通过wget命令是zookeeper -3.5.8,整个安装完成后启动zookeeper服务,发现所有的节点都无法启动。报错如下:
ZooKeeper JMX enabled by default
Using config: /usr/local/apache-zookeeper-3.5.6/bin/../conf/zoo1.cfg
Starting zookeeper ... FAILED TO START
  1. 参考博客:zookeeper 启动时一直报 :Starting zookeeper … FAILED TO START
  2. 重新下载更低版本的zookeeper,自己选择使用清华镜像中的 zookeeper-3.4.14.tar.gz
2. 安装zookeeper(在一台节点上)
  • 解压缩安装包,并移动到安装目录 (我一般所有的操作都是在root用户下)
tar -zxvf zookeeper-3.4.14.tar.gz # 解压缩文件
cp -rf zookeeper-3.4.14 /usr/local # 复制到安装目录
chmod -R -777 /usr/local/zookeeper-3.4.14 # 修改权限
  • simple_zoo.cfgzoo.cfg
cd /usr/local/zookeeper-3.4.14/conf # 进入conf目录
cp simple_zoo.cfg zoo.cfg
  • 新增data文件夹,作为dataDir
mkdir /usr/local/zookeeper-3.4.14/data
  • 我的整个zoo.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.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
# 不提供dataLogDir,默认将日志文件写入dataDir
dataDir=/usr/local/zookeeper-3.4.14/data
# the port at which the clients will connect,默认为2181
clientPort=2330
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

# server.id=ip:port1:port2,id是对服务器的编号
# ip是服务器的IP地址;port1是leader和follower的通信端口,默认为2888;
# port2是选举leader的端口,默认为3888
server.1=10.101.30.63:2888:3888
server.2=10.101.39.48:2888:3888
server.3=10.101.29.157:2888:3888
  • zookeeper还有一个默认端口:2181,client的访问端口。
  • 为zookeeper配置环境变量,个人喜欢同时编辑/etc/profile~/.bashrc
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.14
export PATH=$PATH:$ZOOKEEPER_HOME/bin
  • 通过source命令,使环境变量生效
source /etc/profile
source ~/.bashrc
3. 集群配置
  • 通过scp命令将配置好的zookeeper-3.4.14拷贝到其他节点
# 使用两次scp,ip分别为:10.101.39.48、10.101.29.157
scp -r zookeeper-3.4.14 username@IP:/usr/local
  • 增加myid文件,向里面添加本节点的id,zookeeper启动时会查询zoo.cfg,实现myidserve id的关联。
# 10.101.30.63的节点,添加myid 为 1
echo 1 > /usr/local/zookeeper-3.4.14/data/myid
# 10.101.39.48的节点,添加myid 为2
echo 2 > /usr/local/zookeeper-3.4.14/data/myid
# 10.101.29.157的节点,添加myid 为3
echo 3 > /usr/local/zookeeper-3.4.14/data/myid
  • 启动每个节点上的zookeeper
. zkServer.sh start

zookeeper jmx地址 zookeeper jmx enabled_IP

  • 查看zookeeper的状态,从截图可以看出,三各节点,一个leader。两个follower。
. zkServer.sh status

zookeeper jmx地址 zookeeper jmx enabled_zookeeper jmx地址_02


zookeeper jmx地址 zookeeper jmx enabled_重启_03


zookeeper jmx地址 zookeeper jmx enabled_zookeeper jmx地址_04


安装参考:

CentOS7安装配置zookeeper集群CentOS安装ZooKeeper集群

4. 查看status,提示Error contacting service. It is probably not running.
  • 启动成功后,使用. zkServer.sh status查看每个节点的状态,发现统一报错如下。
JMX enabled by default
Using config: /usr/local/zk/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
  • zoo.cfg中指定的dataDir,与自己创建的对应目录不一致。 —— 自己更改了,重启没反应
  • 检查了很多其他细节:
  1. dataDir下面的myid中写入的id是否与zoo.cfg中配置的一致。 —— 一致
  2. zoo.cfg中书写的server IP是否正确。 —— 正确
  • 查看zoo.cfgclientPort端口是否被占用。 —— 确实被占用
  1. 自己最开始配置的是2181这个端口值,发现确实有进程占用
lsof -i:2181
  1. 傻乎乎,这个端口被占用了,那我就在配置文件中改成其他端口(2330),并没有想过先去kill进程。
  2. 重启以后,发现还是会报错,于是kill掉每台机器上21812330的端口的进程。
  3. 再次重启,发现status能获取到状态了。
  • tips:status能获取到状态,自己发现有个很重的证据是,dataDir下面有一个zookeeper_server.pid文件。
5. 使用zkCli时,127.0.0.1:2181: Connection refused
  • 使用如下命令,连接zk的客户端
. zkCli.sh
  • 发现进入以后报错:
2020-08-17 15:14:34,655 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1025] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
2020-08-17 15:14:34,656 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1162] - Socket error occurred: localhost/127.0.0.1:2181: Connection refused
  • 很神奇的是,所有的clientPort配置的是2330,为何访问任然访问的是2181这个默认端口?
  • 查看资料以后,发现别人都是使用具体的参数访问clientPort
. zkCli.sh -server localhost:2181
  • 重启以后,自己也通过指定ip和port实现了对节点的访问。访问ok,ip和port也是自己指定的。
. zkCli.sh -server 10.101.30.63:2330

zookeeper jmx地址 zookeeper jmx enabled_IP_05