zookeeper集群规划
服务器IP | 主机名 | myid的值 |
---|---|---|
192.168.159.150 | node1 | 1 |
192.168.159.151 | node2 | 2 |
192.168.159.152 | node3 | 3 |
-
第一步:下载zookeeeper的压缩包
-
第二步:解压
-
第三步:修改配置文件zoo.cfg
-
第四步:添加myid配置
-
第五步:安装包分发给其他节点并修改其他节点的myid的值
-
第六步:所有节点(三台机器)启动zookeeper服务
- (以上前四步只需要在一个固定的节点做即可)
1.前期准备
- 本文只适合CentOS 7
- 所有节点都安装了JDK
- 每个节点都有创建了目录
mkdir -p /export/software
mkdir -p /export/servers
- 准备zookeeper压缩包
- 所有节点进行了主机名与IP地址的映射,如果没有,切记要将本文中所有用到主机名的地方改为IP地址
2.zookeeper下载地址:
- http://archive.apache.org/dist/zookeeper/
- 下载最新版本的zookeeper压缩包要注意: 一定要下载以-bin.tar.gz结尾的压缩包,不要下载以.tar.gz结尾的压缩包,否则后面启动zookeeper的时候会报错(错误: 找不到或无法加载主类org.apache.zookeeper.server.quorum.QuorumPeerMain)
- 原因: 从版本3.5.5开始,带有bin名称的包才是我们想要的、下载可以直接使用的、里面是编译后的二进制的包,而普通的tar.gz只是源码的包,无法直接使用
3.上传文件命令rz -E的安装与使用
##安装lrzsz插件,用于从本主机上传文件到linux
[root@node1 ~]# yum install -y lrzsz
##输入rz -E命令,回车
[root@node1 ~]# rz -E
rz waiting to receive.
Starting zmodem transfer. Press Ctrl+C to cancel.
Transferring apache-zookeeper-3.6.2-bin.tar.gz...
100% 12222 KB 12222 KB/sec 00:00:01 0 Errors
4.解压
##这里是创建目录,为了存放自己上传的压缩包及解压后的文件
##为了方便使用,所有节点都创建成一样的目录
##目录名称自己定义即可
[root@node1 ~]# mkdir -p /export/software
[root@node1 ~]# mkdir -p /export/servers
##移动文件到/export/software/目录
[root@node1 ~]# mv apache-zookeeper-3.6.2-bin.tar.gz /export/software/
[root@node1 ~]# cd /export/software/
##解压文件到/export/servers/目录
[root@node1 software]# tar -zxvf apache-zookeeper-3.6.2-bin.tar.gz -C ../servers/
5.修改配置文件zoo.cfg
[root@node1 software]# cd ../servers/
[root@node1 servers]# cd apache-zookeeper-3.6.2-bin/conf/
##复制zoo_sample.cfg文件到zoo.cfg
[root@node1 conf]# cp zoo_sample.cfg zoo.cfg
##先创建下面的目录,再修改zoo.cfg的内容
[root@node1 conf]# mkdir -p /export/servers/apache-zookeeper-3.6.2-bin/zkdatas/
[root@node1 conf]# vi zoo.cfg
##在zoo.cfg文件中更改以下内容
dataDir=/export/servers/apache-zookeeper-3.6.2-bin/zkdatas/
#保留多少个快照
autopurge.snapRetainCount=3
#日志多少小时清理一次
autopurge.purgeInterval=1
##在zoo.cfg文件中增加以下内容
#集群中服务器地址
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
6.添加myid配置
##在下面的目录下创建myid文件
[root@node1 conf]# cd /export/servers/apache-zookeeper-3.6.2-bin/zkdatas/
[root@node1 zkdatas]# vi myid
##在该文件中添加如下内容
1
7.安装包分发给其他节点并修改其他节点的myid的值
[root@node1 zkdatas]# cd /export/servers/
##在执行下面的命令时,需要先在其他节点创建相应的目录(/export/software/、/export/servers/)
##下面的路径是相对路径,必须在下面的目录下执行
[root@node1 servers]# scp -r /export/servers/apache-zookeeper-3.6.2-bin/ node2:$PWD
##下面的路径是绝对路径,不需要在下面的目录下执行
[root@node1 servers]# scp -r /export/servers/apache-zookeeper-3.6.2-bin/ node3:/export/servers/
[root@node2 ~]# cd /export/servers/apache-zookeeper-3.6.2-bin/zkdatas/
[root@node2 zkdatas]# vi myid
##修改myid中的内容为如下内容
2
[root@node3 ~]# cd /export/servers/apache-zookeeper-3.6.2-bin/zkdatas/
[root@node3 zkdatas]# vi myid
##修改myid中的内容为如下内容
3
8.所有节点(三台机器)启动zookeeper服务
[root@node1 servers]# cd apache-zookeeper-3.6.2-bin/
您在 /var/spool/mail/root 中有新邮件
[root@node1 apache-zookeeper-3.6.2-bin]# bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /export/servers/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
##通过是否存在QuorumPeerMain,验证zookeeper是否成功启动
[root@node1 apache-zookeeper-3.6.2-bin]# jps
1223 QuorumPeerMain
1259 Jps
-
查看zookeeper的启动状态(zookeeper选举机制)
①我是先在node1节点启动zookeeper,然后再node2节点启动zookeeper,最后在node3节点启动zookeeper。
②由于node1与node2启动后(此时node3还没启动,不参与选举),已经存在2个zookeeper服务,因此可以通过myid与ZXID的大小来选举leader(即服务器启动时期的Leader选举)。
③我没有在这3台机器上设置ZXID,因此只能通过我上面设置的myid来进行选举,由于node2的myid设置的值为“2”,大于node1设置的myid值“1”,node3又不能参与选举,所以node2被选为leader,在node3中的zookeeper服务启动后,leader已经被选举成功,所以node3与node1一样,都成为follower
[root@node1 apache-zookeeper-3.6.2-bin]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /export/servers/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
[root@node2 apache-zookeeper-3.6.2-bin]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /export/servers/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
[root@node3 apache-zookeeper-3.6.2-bin]# bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /export/servers/apache-zookeeper-3.6.2-bin/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
-
Zookeeper的Shell 客户端操作
-
bin/zkCli.sh -server node1:2181
-
也可直接写
bin/zkCli.sh -server
,此时表示登录本机客户端,在他后面加入node2:2181,可以登入指定地址的客户端。 -
代码中的端口号 2181 是在 /export/servers/apache-zookeeper-3.6.2-bin/conf/ 地址中有一个zoo.cfg文件,该文件在有一行代码
clientPort=2181
[root@node1 ~]# cd /export/servers/apache-zookeeper-3.6.2-bin/conf/
[root@node1 conf]# ls
configuration.xsl log4j.properties zoo.cfg zoo_sample.cfg
##查看端口号
[root@node1 conf]# vi zoo.cfg
clientPort=2181
- 登入和退出zookeeper客户端
#### 输入下面命令登录Zookeeper客户端
[root@node1 ~]# cd /export/servers/apache-zookeeper-3.6.2-bin/
[root@node1 apache-zookeeper-3.6.2-bin]# bin/zkCli.sh -server node1:2181
#### 输入quit退出
[zk: node1:2181(CONNECTED) 0] quit
[root@node1 apache-zookeeper-3.6.2-bin]#