zookeeper安装配置
完全分布式,三台阿里云服务器搭建的集群
下载、上传、解压缩
首先下载zookeeper:
下载链接:https://archive.apache.org/dist/zookeeper/
本次选用的版本是3.4.12
tar xvf zookeeper-3.4.12.tar -C /opt/zookeeper
环境配置(all three)
三个节点上都需要进行配置
vim /etc/profile
# Zookeeper config
export ZOOKEEPER_HOME=/opt/zookeeper/zookeeper-3.4.12
export PATH=$PATH:$ZOOKEEPER_HOME/bin
source /etc/profile
修改配置文件(Only master)
创建文件和目录
在集群的服务器上都创建这些目录
mkdir /opt/zookeeper/data
mkdir /opt/zookeeper/dataLog
创建myid文件
在/opt/zookeeper/data目录下创建myid文件
cd /opt/zookeeper/data
touch myid
编辑myid文件,将master、slave01、slave02的myid文件内容改为0,1,2。此处先只修改master,后期拷贝完成后再修改slave01,slave02的myid
vim myid
输入0,保存退出
zoo.cfg
cd /opt/zookeeper/zookeeper-3.4.12/conf/
cp zoo_sample.cfg zoo.cfg
修改dataDir
dataDir=/opt/zookeeper/data
添加:
dataLogDir=/opt/zookeeper/dataLog
server.0=master:2888:3888
server.1=slave01:2888:3888
server.2=slave02:2888:3888
myid与这里的server后的数字要保持一致
拷贝到slave机器上
scp -r /opt/zookeeper root@slave01:/opt
scp -r /opt/zookeeper root@slave02:/opt
修改slave节点的配置文件
slave01:
cd /opt/zookeeper/data
vim myid
输入1,保存退出
Slave02:
cd /opt/zookeeper/data
vim myid
输入2,保存退出
启动zookeeper
每一台机器都需要进行启动
cd /opt/zookeeper/zookeeper-3.4.12/bin/
输入:
zkServer.sh start
启动成功后,检查启动状态
zkServer.sh status
因为zookeeper是选举制,它的主从关系并不是像hadoop那样指定的,具体可以看官方的文档说明。status命令可以查看各个机器上zookeeper的leader和follower
报错处理:
[root@master bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/zookeeper-3.4.12/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
启动成功,但显示Error contacting service. It is probably not running.
查看cat /opt/zookeeper/zookeeper-3.4.12/bin/zookeeper.out,一定要看完整的信息,找error
2020-10-31 14:26:12,228 [myid:1] - ERROR [slave01/118.178.191.14:3888:QuorumCnxManager$Listener@760] - Exception while listening
java.net.BindException: 无法指定被请求的地址 (Bind failed)
at java.base/java.net.PlainSocketImpl.socketBind(Native Method)
at java.base/java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:436)
at java.base/java.net.ServerSocket.bind(ServerSocket.java:381)
at java.base/java.net.ServerSocket.bind(ServerSocket.java:335)
at org.apache.zookeeper.server.quorum.QuorumCnxManager$Listener.run(QuorumCnxManager.java:739)
这个问题主要是因为云服务器本身设置的问题,解决方案也很简单,只需要在在每个Zookeeper节点上的zoo.cfg里面添加上:
quorumListenOnAllIPs=true
再次启动即可成功