0. Linux系统安装zookeeper
-
安装zookeeper之前,先把jdk安装好,这里不作说明
-
zookeeper安装指导
- https://www.cnblogs.com/sea520/p/13500978.html
- https://www.cnblogs.com/lsdb/p/7297731.html
-
下载地址
- https://zookeeper.apache.org/ ,记住下载bin包,否则会启动不了程序,相关错误可见章节4、安装常见问题 1
- 下载后,上传到服务器指定目录 /root/soft/zookeeper/
-
解压到指定的目录
- tar -zxvf zookeeper-3.6.0-bin.tar.gz -C /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0
1. 单机安装
1.1 安装
1.1.1 修改conf配置文件
-
cd /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0/conf cp zoo_sample.cfg zoo.cfg #先复制一份,不要在自带的文件上修改,以防修改错误,有备份
-
然后vim zoo.cfg ,然后修改data配置为 dataDir=/var/zhaoyunlong/zookeeper,修改后的配置文件如下:
# 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=/var/zhaoyunlong/zookeeper ##这里为本次修改的地方,注意现在还没有这个目录,所以要在下面步骤中创建
# the port at which the clients will connect
clientPort=2181
......
1.1.2 新建存储数据的目录
mkdir -p /var/zhaoyunlong/zookeeper
1.1.3 配置环境变量
-
cd /etc/profile.d/
-
vi zk.sh,然后添加环境变量如下,然后wq保存退出 ZK_HOME=/opt/zhaoyunlong/zookeeper/zookeeper-3.6.0 PATH=$PATH:$ZK_HOME/bin export ZK_HOME export PATH
-
source /etc/profile #刷新脚本使环境变量生效
1.2 安装验证—启停服务
安装完成之后,我们需要验证是否成功。这里先列出涉及到的命令如下
-
启动命令: zkServer.sh start 停止命令: zkServer.sh stop 重启命令: zkServer.sh restart 查看集群节点状态: zkServer.sh status
-
验证
-
配置了环境变量后,可以在任意的目录启停服务,操作如下:
-
[root@192 conf]# zkServer.sh start ##启动服务 ZooKeeper JMX enabled by default Using config: /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0/bin/../conf/zoo.cfg Starting zookeeper ... STARTED ##STARTED表示服务已经启动了 [root@192 conf]#
-
2. 伪集群安装
伪集群模式就是在同一主机上启动多个zookeeper组成集群,下面以在192.168.119.129主机上创3个zookeeper组集群为例。
2.1 修改conf配置文件
-
cd /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0/conf
-
vim zoo.cfg ,然后添加集群的配置如下,然后wq保存退出
-
server.1=192.168.119.129:2887:3887 server.2=192.168.119.129:2888:3888 server.3=192.168.119.129:2889:3889
-
2.2 复制已经安装好的zookeeper
-
将单机版安装好的zookeeper-3.6.0,复制成zookeeper1/zookeeper2/,共计三份
-
修改配置文件
由于在一台机器上,所以不同的zookeeper需要用不同的端口,如果是真实的集群则不同修改端口
-
修改zookeeper1的端口和数据存放配置
-
先创建数据存放目录
-
mkdir -p /var/zhaoyunlong/zookeeper1
-
-
cd /opt/zhaoyunlong/zookeeper/zookeeper1/conf
-
然后vim zoo.cfg ,修改端口如下,然后保存退出,其他不同修改,同理zookeeper2也是如此修改
dataDir=/var/zhaoyunlong/zookeeper1 # the port at which the clients will connect clientPort=3181
-
-
修改zookeeper2的端口和数据存放配置
-
先创建数据存放目录
-
mkdir -p /var/zhaoyunlong/zookeeper2
-
-
cd /opt/zhaoyunlong/zookeeper/zookeeper2/conf
-
vim zoo.cfg ,修改端口如下,然后保存退出,其他不同修改
dataDir=/var/zhaoyunlong/zookeeper2 # the port at which the clients will connect clientPort=4181
-
-
-
服务id配置
-
zookeeper3.6.0的/var/zhaoyunlong/zookeeper/myid配置如下:
-
echo '1' > /var/zhaoyunlong/zookeeper/myid
-
-
zookeeper1的/var/zhaoyunlong/zookeeper1/myid配置如下:
-
echo '2' > /var/zhaoyunlong/zookeeper1/myid
-
-
zookeeper的/var/zhaoyunlong/zookeeper2/myid配置如下:
-
echo '3' > /var/zhaoyunlong/zookeeper2/myid
-
-
2.3 环境变量
在这里环境变量,除了单机版安装时配置的那台zookeeper,其他2台环境就不设置了,因为伪集群模式毕竟一般不用,我们这里只是作为学习演练来操作。那我们怎么启停服务呢,进入到服务启动目录直接输入命令即可
2.4 安装验证—启停服务
-
依次进入到各自安装目录的bin路径下,启停服务
-
第一台
-
cd /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0/bin ./zkServer.sh start
-
-
第二台
-
cd /opt/zhaoyunlong/zookeeper/zookeeper1/bin ./zkServer.sh start
-
-
第三台
-
cd /opt/zhaoyunlong/zookeeper/zookeeper2/bin ./zkServer.sh start
-
当3台都起了之后,我们查看状态
-
[root@192 bin]# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zhaoyunlong/zookeeper/zookeeper2/bin/../conf/zoo.cfg Client port found: 4181. Client address: localhost. Mode: leader ##leader表示这台为leader,其他两台为follower,验证如下 ----------------------------------------------------------------- [root@192 bin]# cd /opt/zhaoyunlong/zookeeper/zookeeper1/bin/ 切换到zookeeper1的bin目录 [root@192 bin]# ./zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zhaoyunlong/zookeeper/zookeeper1/bin/../conf/zoo.cfg Client port found: 3181. Client address: localhost. Mode: follower ##显示为follower [root@192 bin]#
-
-
-
3. 真实集群安装
下面我们进行真实集群安装,即在不同的机器上安装zookeeper,这是真实的分布式,我们这里部署4台,方便后面验证一些东西。为了简化操作,我们用安装的这个服务zookeeper-3.6.0为基准进行复制,复制之前需要先修改配置文件,后面的操作其实和伪集群安装方式差不多,详情如下:
3.1 修改基准版的配置
-
cd /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0/conf
-
然后 vim zoo.cfg ,然后修改真实集群的配置如下,其实就是把伪集群安装的这个配置给该一下节点和IP,然后wq保存退出
-
## 这里我们用node01-node04来标记机器,node01就是我们前面单机部署和伪集群部署所用的机器 server.1=192.168.119.129:2888:3888 #node01 server.2=192.168.119.130:2888:3888 #node02 server.3=192.168.119.131:2888:3888 #node03 server.4=192.168.119.132:2888:3888 #node04
-
3.2 复制已经安装好的zookeeper
经过上面步骤的配置修改,我们接下来把zookeeper的安装文件远程复制到其他机器上。
scp -r /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0 192.168.119.130:/opt/zhaoyunlong/zookeeper
scp -r /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0 192.168.119.131:/opt/zhaoyunlong/zookeeper
scp -r /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0 192.168.119.132:/opt/zhaoyunlong/zookeeper
3.3 修改其他几台的配置
-
1、基准机器node01的配置已经配置好,不用再修改
-
2、修改第2台node02的配置
-
先创建zookeeper数据存放目录
-
mkdir -p /var/zhaoyunlong/zookeeper
-
-
检查配置文件
-
其实配置文件也不用修改了,因为是以node01复制而来的,这里我们检查一下
-
# the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/var/zhaoyunlong/zookeeper ##检查这个配置是否和上一步骤新建的目录一致
-
-
-
服务id配置
-
echo '2' > /var/zhaoyunlong/zookeeper/myid #执行后会生成一个myid的文件,且把2写入文件里,这里的2就是配置文件中集群配置项server.2中的2
-
-
配置环境变量
-
[root@192 conf]# cd /etc/profile.d/ 然后新建一个zookeeper的sh脚本,并配置环境变量如下,然后wq保存退出
-
#zookeeper export ZK_HOME=/opt/zhaoyunlong/zookeeper/zookeeper-3.6.0 ##这是zookeeper的安装目录 export PATH=$PATH:$ZK_HOME/bin
-
然后输入以下命令让环境变量生效
-
source /etc/profile
-
-
-
-
3、修改剩下两台node03、node04的配置
-
这2个的配置和node02只有服务id不一样,其他都一样,提醒要先新建数据存储文件(mkdir -p /var/zhaoyunlong/zookeeper),这些配置后都输入命令刷新变量 source /etc/profile
-
node03的服务id
-
echo '3' > /var/zhaoyunlong/zookeeper/myid #执行后会生成一个myid的文件,且把3写入文件里,这里的3就是配置文件中集群配置项server.3中的3
-
-
node04的服务id
-
echo '4' > /var/zhaoyunlong/zookeeper/myid #执行后会生成一个myid的文件,且把4写入文件里,这里的4就是配置文件中集群配置项server.4中的4
-
-
-
3.4 安装验证–启停服务
至此,真实集群就安装好了,接下来我们来验证安装是否成功,我们依次启动4台机器,顺序无所谓,然后再输入状态检查命令,我们就知道哪台是leader,哪些是follower,命令操作如下:
-
1、启动服务
- 每台机器都进行输入如下命令
[root@192 conf]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED ##STARTED表示服务已经启动
-
2、查看状态
-
服务已经起来之后,我们查看哪台是leader,哪些是follower,在每一台上输入如下命令,当我们在某一台输入该命令时,如果出现leader,说明这台就是主了
-
[root@192 ~]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zhaoyunlong/zookeeper/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: follower ##显示为follower [root@192 ~]#
-
[root@192 conf]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zhaoyunlong/zookeeper/zookeeper-3.6.0/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Mode: leader #这台为主
-
-
3、停掉其中一台或两台服务
-
如果我们停掉主,剩下3台会重新推举出一个leader
-
如果我们继续停掉一台服务,剩下2台会怎么样呢?这次我们不停主,我们停掉从,查看状态如下
-
[root@192 profile.d]# zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zhaoyunlong/zookeeper/zookeeper/bin/../conf/zoo.cfg Client port found: 2181. Client address: localhost. Error contacting service. It is probably not running ## 服务不可用了
-
-
这里我们可以得出几个结论:
-
- zookeeper的分布式集群至少要3台机器,因为这样根据推举leader的算法才能选出一个leader出来
-
- 从第一台开始启动服务时,当机器的服务达到3台,就会选出一个leader了,其他的机器都会称为follower,后面启动的机器也会自动成为follower
-
- zookeeper集群中,当主挂掉,只要剩余的机器大于2台,就还能继续服务,他们会重新选出一个leader来,即使挂掉的那台主后面启动起来,也是成为了follower,当然这其中的原理我们后面再谈。
-
-
4. 安装常见问题
-
1、启动报错 Starting zookeeper … FAILED TO START
- https://www.cnblogs.com/sea520/p/13500978.html
-
2、集群安装时,没有找到主机的路由
- 原因:防火墙没有关闭,需要关闭全部节点的防火墙
- https://blog.youkuaiyun.com/wy_xing/article/details/103883283