Zookeeper的环境搭建_单机与伪集群
1、 部署前准备
三种部署方式:单机、集群、伪集群。集群方式与伪集群方式相似,只需要在多个机器上分别安装Zookeeper即可。
由于ZooKeeper是用Java开发的,因此安装ZooKeeper之前需要先安装JDK。
(1)部署JDK
下载路径:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,我选择的是jdk-8u112-linux-i586.tar.gz(Linux x64)。
下载下来后拷贝到/usr/java目录下,然后:tar -zxvf jdk-8u112-linux-i586.tar.gz解压后目录下有一个jdk1.8.0_111文件下。
- 设置Java环境变量
然后通过vi /etc/profile命令来设置环境变量:
export JAVA_HOME=/usr/java/jdk1.8.0_111
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
保存后进入cd /etc目录下,输入source profile命令使修改生效,然后java -version命令查看jdk版本信息。
- 配置Zookeeper的环境变量
配置Zookeeper的环境变量目的:每次启动服务不需要定位到Zookeeper的bin目录。
然后执行source /etc/profile
(后面的操作都是默认配置了Zookeeper的环境变量)。
(2)下载Zookeeper压缩包
打开Zookeeper的官网:https://zookeeper.apache.org/
根据Download寻找:
https://www-eu.apache.org/dist/zookeeper/zookeeper-3.5.4-beta/zookeeper-3.5.4-beta.tar.gz
在linux上下载:利用wget命令
wget https://www-eu.apache.org/dist/zookeeper/zookeeper-3.5.4-beta/zookeeper-3.5.4-beta.tar.gz
然后,利用tar –zxvf xxx.tar.gz即可。
(3)关闭防火墙
zookeeper集群中的各个机器之间需要通过配置的端口号进行通信,端口没打开显然不会启动成功,报出异常Cannot open channel to * at election address
关闭防火墙方法: sudo service iptables stop
为了防止下次系统重启时防火墙再次被打开,需要关闭自启动,关闭自启动方法:sudo chkconfig iptables off
防火墙关闭之后,重启zookeeper集群成功。
2、Zookeeper单机
(1)修改配置文件
解压后,有个conf目录,有个样本配置文件:zoo_sample.cfg
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
主要是修改:clientPort=2181
dataDir=/usr/zookeeper/zookeeper-3.5.4-beta/data
dataLogDir=/usr/zookeeper/zookeeper-3.5.4-beta/logs
(2)启动与关闭、状态查询
zkServer.sh start ../conf/zoo-2181.cfg
zkServer.sh stop ../conf/zoo-2181.cfg
查看状态:
zkServer.sh status ../conf/zoo.cfg
3、Zookeeper的伪集群
(1)修改配置文件
Zookeeper集群的节点个数一般都是奇数个,这里以5个节点为例。
- 复制多个配置文件zoo-port.cfg:
cp zoo_sample zoo-2181.cfg …
- 修改各自的clientPort、dataDir、dataLogDir
clientPort=2185
dataDir=/usr/zookeeper/zookeeper-3.5.4-beta/datas/data-2185
dataLogDir=/usr/zookeeper/zookeeper-3.5.4-beta/logs/logs-2185
- 在最后添加server.X=A:B:C
server.X=A:B:C X-代表服务器编号;A-代表ip;B和C-代表端口,这个端口用来系统之间通信;
在集群所有节点的配置文件中都添加且相同;这里涉及到多个端口,因此最好是将防火墙关闭。
server.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
server.4=127.0.0.1:2884:3884
server.5=127.0.0.1:2885:3885
- 示例:
[root@iz2zeixh3287irhjrj62w8z conf]# vi zoo-2185.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.
dataDir=/usr/zookeeper/zookeeper-3.5.4-beta/datas/data-2185
dataLogDir=/usr/zookeeper/zookeeper-3.5.4-beta/logs/logs-2185
# the port at which the clients will connect
clientPort=2185
# 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.1=127.0.0.1:2881:3881
server.2=127.0.0.1:2882:3882
server.3=127.0.0.1:2883:3883
server.4=127.0.0.1:2884:3884
server.5=127.0.0.1:2885:3885
(2)两个目录:data和logs
- 创建各个节点的data目录
创建datas目录,其下创建各个节点的data-port目录,因为每个服务器节点需要指定一定编号id,该id就是在data目录下的myid文件指定,所以每个节点需要单独有个data目录。
/usr/zookeeper/zookeeper-3.5.4-beta/datas/data-2181
- 在各个节点的data-port目录下创建myid文件
myid文件内容就是该节点的编号,与配置文件的server.id中的id一致。
vi myid #创建myid文件,输入1,然后保存即可。
- 创建各个节点的logs目录
(3)Zookeeper伪集群的启动
zkServer.sh start ../conf/zoo-2181.cfg
zkServer.sh start ../conf/zoo-2182.cfg
zkServer.sh start ../conf/zoo-2183.cfg
zkServer.sh start ../conf/zoo-2184.cfg
zkServer.sh start ../conf/zoo-2185.cfg
(4)Zookeeper集群的状态查看
在项目实施中经常需要用用zookeeeper集群环境,当需要定位zookeeper集群是否稳定的时候,会需要判断集群中leader是否进行改变,这时候就需要命令来查看。
命令:zookeeper-3.4.6/bin$ ./zkServer.sh status
zkServer.sh status../conf/zoo-2181.cfg
zkServer.sh status../conf/zoo-2182.cfg
zkServer.sh status../conf/zoo-2183.cfg
zkServer.sh status../conf/zoo-2184.cfg
zkServer.sh status../conf/zoo-2185.cfg
可以查看到哪一个节点为主节点leader,其他节点为从节点follower。
(5)Zookeeper集群节点的关闭
zkServer.sh stop ../conf/zoo-2181.cfg
zkServer.sh stop../conf/zoo-2182.cfg
zkServer.sh stop../conf/zoo-2183.cfg
zkServer.sh stop../conf/zoo-2184.cfg
zkServer.sh stop../conf/zoo-2185.cfg
(6)对Zookeeper集群的操作
连接集群的任何一个节点,即可对整个Zookeeper集群操作。
连接Zookeeper:zkCli.sh –server localhost:2181
zkCli.sh –server localhost:2182
zkCli.sh –server localhost:2183
zkCli.sh –server localhost:2184
zkCli.sh –server localhost:2185
命令quit即可退出。
4、Zookeeper异常情况
(1)Zookeeper选举机制引起异常
当超过半数机器宕机,此时,无法选举leader,Zookeeper会认为该集群不可用。
[myid:] - INFO [main-SendThread(10.10.16.151:2181):ClientCnxn$SendThread@1035] - Opening socket connection to server 10.10.16.151/10.10.16.151:2181. Will not attempt to authenticate using SASL (java.lang.SecurityException:
通过zookeeper的选举算法得知,当整个集群超过半数机器宕机,zookeeper会认为集群处于不可用状态。
(2)待续...