Zookeeper + Centos7 详细安装教程

前言

本篇是主要讲怎么在Centos7服务器上,配置Zookeeper集群,以及常见的问题解决。Zookeeper版本3.4.14。Windows版本在这里:【Zookeeper-3.4.14 Win10 裸机运行】。更多Zookeeper的内容在这里【Zookeeper 源码解读系列目录】有兴趣可以拓展一下知识。目前笔者将kafka升级到2.7.0,Zookeeper升级到3.5.8,此文依然有效。

Java环境下载与配置

工欲善其事,必先利其器。想运行Zookeeper必须先把周边环境搞好。最重要的就是java的环境安装好,有两个选择。

第一种

去官网或者国内镜像下载JDK-linux包,这个就不多说了,下载好拷贝到任意目录,然后解压,解压到哪里看个人喜好。环境变量配好能用就行。

tar -zxvf jdk-8u181-linux-x64.tar.gz #解压到当前目录
tar -zxvf jdk-8u181-linux-x64.tar.gz -C /usr/local/  #或者解压到指定目录

直接敲入vi /etc/profile命令编辑profile文件,敲insert进入编辑模式,最后面添加下面几行:

export JAVA_HOME=/usr/local/apps/jdk1.8.0_191/   #这里是自己的路径一定写对
export PATH=$PATH:$JAVA_HOME/bin
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

然后esc推出编辑模式,输入:wq保存退出。输入source /etc/profile,使编辑的系统文件生效。用Java -version测一下是不是成功了

[root@centos01 ~]# java -version
java version "1.8.0_191"   #和你安装的版本一致就是成功了
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
第二种

就是用yum工具下载相应的JDK包。但是提供的版本有限,怎么安装随喜吧。

yum list | grep jdk  #先找到想要的jdk版本名字
yum install java-1.8.0-openjdk.x86_64 #用yum工具安装,一步到位。

Zookeeper配置

当安装好Java环境以后,就可以配置Zookeeper了。首先准备几个服务器,笔者一共有5台虚拟机,101~105。后面介绍的只是101上的,其余的操作只是把1换成5就好了。那么首先我们看Zookeeper的配置文件,不知道在哪里下载的参考【Zookeeper-3.4.14 Win10 裸机运行】

  1. 找到/zookeeper-3.4.14/conf/目录下zoo_sample.cfg改为zoo.cfg,然后打开编辑。基本上集群模式下要改的很少。
  2. 修改日志目录。dataDir:数据目录。这是参数必须要有的,一会儿创建myid就要在这个下面创建。dataLogDir:日志目录。这个是可选的,不配置默认所有的数据都会放在dataDir这里。
  3. 配置集群服务器地址。server.*=这里配置与否决定着是否使用集群模式。在这里把所有机器加上去,如果有观察者模式的需求,也可以配置几个观察者。最终配置文件的内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/data/zookeeper_data
dataLogDir=/home/data/zookeeper_log   #这里可以不配置,直接删了
clientPort=2181
#maxClientCnxns=60
# 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.1=192.168.33.101:2887:3887
server.2=192.168.33.102:2887:3887
server.3=192.168.33.103:2887:3887
server.4=192.168.33.104:2887:3887
server.5=192.168.33.105:2887:3887
#server.5=192.168.33.105:2887:3887:observer   配置一台机器以观察者模式启动
  1. 生成myid。此时我们需要去dataDir路径下生成myid作为一台服务器的唯一标识,不生成一定会报错的。
    所以cd /home/data/zookeeper_data目录下,运行echo 1 >> myid。把1这个数字写入myid文件,只要这一个数字就足够了。注意操作的是101机器,102机器需要运行echo 2 >> myid。这个数字是和配置文件中配置的server.1或者server.2对应的。server.1的myid就是1,server.2的myid就是2,以此类推一定不要搞错。如下图102号机器的myid。
    在这里插入图片描述

防火墙开放端口

此时Zookeeper的配置已经结束了。直接运行应该是不通的,因为需要打开防火墙给其他的机器开放端口监听,如果被防火墙挡住了,是没办法访问的。我们一共用了2181,2887,3887三个端口,所以给他们开防火墙:

firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2887/tcp --permanent
firewall-cmd --zone=public --add-port=3887/tcp --permanent
firewall-cmd --reload   # 配置立即生效

一顿操作以后,不放心的同学可以用firewall-cmd --zone=public --list-ports这个命令查看下自己刚刚开放的端口是不是被打开了。

[root@centos03 ~]# firewall-cmd --zone=public --list-ports
2181/tcp 2887/tcp 3887/tcp 9092/tcp
防火墙其他辅助性介绍:

既然能开,当然也能关闭。而且如果不是公司用,只是为了学习的话,可以直接关了防火墙。所以再给大家贴一些防火墙相关的命令,大家参考取舍:

firewall-cmd --zone=public --add-port=1111/tcp --permanent  #开放1111端口
firewall-cmd --zone=public --remove-port=1111/tcp --permanent #关闭1111端口
firewall-cmd --zone=public --list-ports  #查看防火墙所有开放的端口

systemctl stop firewalld.service  #关闭防火墙服务
systemctl restart firewalld.service  #开启防火墙服务

firewall-cmd --state #查看防火墙状态 启动为running,关闭为not running

systemctl enable firewalld.service  #开机启动防火墙
systemctl disable firewalld.service  #开机关闭防火墙

netstat -lnpt #查看监听的端口

Zookeeper启动

然后到每个机器的bin目录下,输入sh zkServer.sh start启动Zookeeper。注意至少要启动一半以上才可以,不然一定报错。启动以后可以用客户端测试或者sh zkServer.sh status查看服务器状态。
在这里插入图片描述

常见错误

Error1:Address already in use
java.net.BindException: Address already in use
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
        at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:90)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:133)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:114)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81)

这个错误八成是端口被占用了,用netstat -lnpt查看监听的端口:
在这里插入图片描述
查看到PID=1561这个进程已经把2181和3887端口都占用了,所以你就没有办法再用。于是kill -9 1561直接杀死进程,然后在启动就可以了。

Error2:Connection refused
java.net.ConnectException: Connection refused (Connection refused)
        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.connectAll(QuorumCnxManager.java:610)
        at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:838)
        at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:958)

这种情况大概率有两种。因为笔者就遇见过两种。第一:启动的Zookeeper服务器数量不够,其他的机器还没有起来,自然没有办法连接到其他机器。忽略掉,启动其他机器以后再看看。第二:防火墙端口没有打开,可以参考上面所说的打开端口,然后就可以了。

Error3:Cannot open channel to * at election address

这个问题基本上就是说能联通,但是没有办法找到选举机器,或者选票没有办法发到这台机器上。一般情况下是由于机器所处的环境被隔离造成的。首先,先检查防火墙端口是不是打开的。其次,网上最常见的解决办法就是把本机ip换掉成为0.0.0.0,比如我105机器报了这个错误,那就改成下面的样子:

server.1=192.168.33.101:2887:3887
server.2=192.168.33.102:2887:3887
server.3=192.168.33.103:2887:3887
server.4=192.168.33.104:2887:3887
server.5=0.0.0.0:2887:3887    #这里原来是server.5=192.168.33.105:2887:3887

说实在的,不知道这个办法到底有没有效果,因为笔者是真的没有看到效果。笔者碰到这个问题是出现在104号机器上,但是这个机器原先是和别的机器不在一个子网上,104号的机器原先是192.168.43.104。虽然能连通,但是死活都不能发送接收选票。后来把104切换到同一个子网上以后,什么都没有做,自己就好了。所以这里严重怀疑是因为网络底层的原因导致的。虽然学过计算机网络这个课,但是早就扔给大学老师了。况且也不是笔者亲自切换的网络环境,自然不好多说什么。只是给大家提供一个除了换IP以外的另一个解决方案而已,当然如果有哪位热心读者能解答这个问题,笔者自然感激不尽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值