zookeeper集群搭建
环境准备
需要准备三台liunx服务器,有钱的可以买阿里或百度的服务器,跟我这种没钱的就下个vmware虚拟机自己虚拟几台liunx服务器
安装java_jdk,如果不安装java_jdkzookeeper启动不起来
1.查看是否自带jdk
rpm -qa|grep java
rpm -qa|grep jdk
如果没有任何输出则没有安装
首先检索包含java的列表
yum list java*
检索1.8的列表
yum list java-1.8*
安装1.8.0的所有文件
yum install java-1.8.0-openjdk* -y
上面这种情况就是安装好了,然后再输入 java 和javac 命令,如果有输出则jdk安装成功,如果命令不能被识别则需要设置一下环境变量,可以参考https://www.cnblogs.com/yjd_hycf_space/p/7885099.html,java环境准备好之后,我们下面安装zookeeper
zookeeper安装
yum 下载安装包(下载到/opt目录下,wget的默认下载路径时当前目录)
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
如果wget命令不能使用则需要先安装命令
yum -y install wget
下载完成之后会得到一个zookeeper-3.4.13.tar.gz安装,解压即可
tar -zxvf zookeeper-3.4.13.tar.gz
解压之后得到一个文件夹zookeeper-3.4.13,进入文件夹,需要创建两个文件夹data和logs
cd /opt/zookeeper-3.4.13
mkdir data
mkdir logs
将zookeeper目录下conf下的zoo_sample.cfg拷贝一份,命名为zoo.cfg,并修改配置文件
cd conf/
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
把文件中的内容由
上面那张图改为下面这张图
在data文件夹中创建myid文件,便于zookeeper中的标识 选择lead
cd /opt/zookeeper-3.4.13/data/
vi myid
在文件中只保存个1就行
再次修改zoo.cfg文件
在clientPort=2181下面添加一行
server.1=自己主机ip:2888:3888
配置zookeeper的环境变量,以便于我们liunx找到zookeeper,并且我们可以全局使用zookeeper命令
cd ~
vi .bash_profile
新增两行
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.13
export PATH=$ZOOKEEPER_HOME/bin:$PATH
如下图所示
source .bash_profile
设置之后,一台服务器就好了,然后需要使用vmvarex再克隆两台
设置集群
在克隆好的两外两台机器上这个文件下的/opt/zookeeper-3.4.13/data/myid 文件 分别修改为 2,3
然后三台服务器都要设置zoo.cfg文件,新增另外两个节点的ip,配置文件如下
启动三台服务器
zkServer.sh start
查看状态
zkServer.sh status
状态如下说明有问题
排查问题 查看输出日志
more /opt/zookeeper-3.4.13/conf/zookeeper.out
------------------------------------------------------------------------报错日志
2018-08-22 22:41:54,547 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:[email protected]] - LOOKING
2018-08-22 22:41:54,549 [myid:1] - INFO [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:[email protected]] - New election. My id = 1, proposed zxid=0x0
2018-08-22 22:41:54,562 [myid:1] - INFO [WorkerReceiver[myid=1]:[email protected]] - Notification: 1 (message format version), 1 (n.leader), 0x0 (n.zxid), 0x1 (n.round), LOOKING (n.state),
1 (n.sid), 0x0 (n.peerEpoch) LOOKING (my state)
2018-08-22 22:41:54,568 [myid:1] - WARN [WorkerSender[myid=1]:[email protected]] - Cannot open channel to 2 at election address /192.168.1.110:3888
java.net.NoRouteToHostException: 没有到主机的路由 (Host unreachable)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:534)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:454)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:435)
at java.lang.Thread.run(Thread.java:748)
2018-08-22 22:41:54,573 [myid:1] - INFO [WorkerSender[myid=1]:[email protected]] - Resolved hostname: 192.168.1.110 to address: /192.168.1.110
2018-08-22 22:41:54,577 [myid:1] - WARN [WorkerSender[myid=1]:[email protected]] - Cannot open
---------------------------------------------------------------------------------
由报错日志看,个人感觉时防火墙没关,于是
systemctl stop firewalld
systemctl disable firewalld
然后重启就成功了
[[email protected] conf]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper-3.4.13/bin/../conf/zoo.cfg
Mode: leader