今天看了尚硅谷的视频zookeeper 学习了一下,试着搭建了一个小集群,踩了很多的坑,跟大家分享一下还有我搭建的过程遇到的问题也和大家分享一下。
1.准备工作。
1.三台联网的linux系统主机。有条件的可以直接上三台云服务器啊,我没有条件我用的是三台自己搭建的虚拟机Linux系统。这三台虚拟机最好可以连到外网。搭建过程就不多说了。如何搭建之前写完一篇。可以参考一下。 不懂的可以私信我。
2.还要安装jdk,环境变量配好。这个简单网上资料很多。
3.还有就是zookeeper 下载 在这里我踩了一个坑说是3.5.5以后的版本要下载bin的 下载错了可启动不了啊。查看日志的会报找不到启动类。 准备工作就这些。
2.开始安装
首先把软件包传到Linux 目录下 我新建了一个文件目录 把所有需要的软件包都传上去
cd /
mkdir download
cd download
借助工具把包传上去 解压进入目录
tar -zxvf apache-zookeeper-3.5.7-bin.tar.gz
cd apache-zookeeper-3.5.7-bin
进入目录之后要创建一个文件夹
mkdir zkData
还要在里面创建一个文件 注意名称固定不能随意更改 里面写一个数字2 (这个数字可以随意但是不能与其它的zk重复)保存退出就好
vim myid
还有一个配置我们需要改动 conf 文件夹下的zoo_sample.cfg文件我们先改个名
mv zoo_sample.cfg zoo.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=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increas
tickTime 通信心跳时间,Zookeeper服务器与客户端心跳时间,单位毫秒 initLimit = 10:LF初始通信时限Leader和Follower初始连接时能容忍的最多心跳数(tickTime的数量) syncLimit = 5:LF同步通信时限 dataDir:保存Zookeeper中的数据 注意:默认的tmp目录,容易被Linux系统定期删除,所以一般不用默认的tmp目录。 clientPort = 2181:客户端连接端口,通常不做修改。 我们需要改动的只有两点 1.dataDir 这块改成我们刚刚创建的文件类路径zkData 2.增加其它服务的ip
dataDir=/download/apache-zookeeper-3.5.7-bin/zkData
server.2=192.168.206.128:2888:3888
server.3=192.168.206.129:2888:3888
server.4=192.168.206.130:2888:3888
server.A=B:C:D。
A 是一个数字,表示这个是第几号服务器; 集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据 就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比 较从而判断到底是哪个 server。 B 是这个服务器的地址; C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口; D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
全部的配置文件是这样的
# 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=/download/apache-zookeeper-3.5.7-bin/zkData
# the port at which the clients will connect
clientPort=2181
# 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.2=192.168.206.128:2888:3888
server.3=192.168.206.129:2888:3888
server.4=192.168.206.130:2888:3888
其它两台服务器同理
然后配置zk的环境变量
修改 /etc/profile
vim /etc/profile
在文件末尾加上
#set zookeeper environment
export ZK_HOME=/download/apache-zookeeper-3.5.7-bin
export PATH=$PATH:$ZK_HOME/bin
让配置生效
source /etc/profile
还有我在启动的时候遇到一个坑 启动命令
zkServer.sh start
报错了启动失败,找一些资料才发现,我们安装的是集群各种需要通信的,端口都没开 怎么可能成功启动呢 每个主机的 2182 2888 3888 要放开 或者关闭防火墙 尽量还是开放端口吧。
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=3888/tcp --permanent
重启防火墙
firewall-cmd --relaod
在依次启动zk
zkServer.sh start
启动成功 在看一下状态
zkServer.sh status
启动成功
ZooKeeper JMX enabled by default Using config: /download/apache-zookeeper-3.5.7-bin/bin/…/conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: follower 这个是从
ZooKeeper JMX enabled by default Using config: /download/apache-zookeeper-3.5.7-bin/bin/…/conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: leader 这个是主
|