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

zookeeper集群搭建

上面这种情况就是安装好了,然后再输入 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 

把文件中的内容由

zookeeper集群搭建

上面那张图改为下面这张图

 

zookeeper集群搭建

 

在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

如下图所示

zookeeper集群搭建

 source .bash_profile

设置之后,一台服务器就好了,然后需要使用vmvarex再克隆两台

设置集群

在克隆好的两外两台机器上这个文件下的/opt/zookeeper-3.4.13/data/myid 文件 分别修改为 2,3

然后三台服务器都要设置zoo.cfg文件,新增另外两个节点的ip,配置文件如下

zookeeper集群搭建

启动三台服务器

zkServer.sh start

查看状态

 zkServer.sh status

状态如下说明有问题

zookeeper集群搭建

排查问题  查看输出日志

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