前期准备:
注意:用于我已经做了映射(ip地址和服务器名字),所以我写的是各个服务器的名字,如果你没有做映射,用ip地址即可。我的3台服务器名字分别是 hadoop02 hadoop03 hadoop04
1,官网下载安装包(不会下载的,留言邮箱我给你发安装包,有什么不懂的也可以问)
http://mirrors.shu.edu.cn/apache/zookeeper/
点击文件夹,选择以tar.gz结尾的下载即可
1, 解压到自己选定的路径
2,进入到安装zookeeper的conf目录,删除zoo_sample.cfg文件
3,在conf目录下新建 zoo.cfg(这是行业习惯,其实叫什么名字都可以的),在该文件里配置信息(下文详说)
4,在datadir(zoo.cfg配置文件里的,下文详说)指定的目录下新建myid(下文详说)
直接在zoo.cfg文件中添加如下内容
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/bigdata/zkmyid
clientPort=2181
server.1= hadoop02:2888:3888
在/home/bigdata/zkmyid目录(此目录就是zoo.cfg里指定的,如上文的zoo.cfg文件。)下新建文件myid文件,文件中的内容对应为server.后面的数字
(1)tickTime
控制心跳和超时,默认情况下最小会话超时时间
(2)initLimit
这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过tickTime个心跳的时间长度后 Zookeeper服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败
(3)syncLimit
这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度
(4)dataDir
dataDir是存放内存数据库快照的位置(myid文件于是配置在该目录下)
(5)clientPort
客户端端口号
(6)server.A=B:C:D
其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
如下描述法适用于单机方式或集群方式,伪分布方式与此稍有不同
需要提前配置zk_home
在每台安装zookeeper的机器上都执行如下命令:
# sh zkServer.shstart
检测zookeeper是否启动成功:
# shzkServer.sh status
返回如下类似信息即表示启动成功:
注意:zookeeper也是java应用程序,通过jps命令也可查看到zookeeper的进程信息,如下图所示,可以看到zookeeper的进程为QuorumPeerMain。
quorum peer 对应的意思是 法定人数 对等 意即:zookeeper的server管理main方法。
小知识:jps所反映的信息即为一个java应用程序中真正运行的main方法所在类的类名。
# > sh zkCli.sh –server192.168.221.200:2181
如下描述法适用于单机方式或集群方式,伪分布方式与此稍有不同
与启动类似,关闭方式如下:
需要在每台安装zookeeper的机器上都执行如下命令
# shzkServer.sh stop
单机中配置多个端口,产生多个进程,用多个进程模拟多台机器,需要在conf目录下配置多个配置文件,并且需要配置多个myid文件。
# vi/home/test/zk/conf/zk1.cfg
ckTime=2000
initLimit=10
syncLimit=5
dataDir=/home/test/zkmyid1
clientPort=2181
server.1=hadoop02:2888:3888
server.2=hadoop03:2889:3889
server.3=hadoop04:2890:3890
# vi/home/test/zk/conf/zk2.cfg
ckTime=2000
initLimit=10
syncLimit=5
dataDir=/home/test/zkmyid2
clientPort=2182
server.1=hadoop02:2888:3888
server.2=hadoop03:2889:3889
server.3=hadoop04:2890:3890
# vi/home/test/zk/conf/zk3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/test/zkmyid3
clientPort=2183
server.1=hadoop02:2888:3888
server.2=hadoop03:2889:3889
server.3=hadoop04:2890:3890
# mkdir /home/test/zkmyid1
# mkdir /home/test/zkmyid2
# mkdir /home/test/zkmyid3
文件中的内容对应为server.后面的数字
# /home/test/zk/bin/zkServer.sh startzk1.cfg
# /home/test/zk/bin/zkServer.sh startzk2.cfg
# /home/test/zk/bin/zkServer.sh startzk3.cfg
相比较单机方式启动而言,此种方式指定了启动时所需要的配置文件,所以略有不同。类似的,查看状态或关闭时也需要指定配置文件。
# jps
5422 QuorumPeerMain
5395 QuorumPeerMain
5463 QuorumPeerMain
# /home/test/zk/bin/zkServer.sh statuszk1.cfg
# /home/test/zk/bin/zkServer.sh statuszk2.cfg
# /home/test/zk/bin/zkServer.sh statuszk3.cfg
# /home/test/zk/bin/zkServer.sh stopzk1.cfg
# /home/test/zk/bin/zkServer.sh stopzk2.cfg
# /home/test/zk/bin/zkServer.sh stopzk3.cfg
在 /etc/profile文件中配置环境变量
ZK_HOME=/bigdata/zookeeper
PATH=$PATH:$ZK_HOME/bin:$ZK_HOME/conf
多台机器中每台机器的配置文件内容都相同(即在每台服务器中,都需要配置zoo.cfg),内容如下:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/bigdata/zkmyid
clientPort=2181
server.1=hadoop02:2888:3888
server.2=hadoop03:2888:3888
server.3=hadoop04:2888:3888
每一台机器都需要做如下操作:
在上面的配置项dataDir所指定的地址下新建一个名字为myid的文件,文件中的内容对应为server.后面的数字(即hadoop02中输入1, hadoop03中输入2, hadoop04中输入3)
在每台机器上分别启动 zkServer.sh start
在每台机器上分别停止 zkServer.sh stop
cat/usr/local/zookeeper-3.4.10/bin/slave | while read line
do
{
echo $line
ssh $line "source /etc/profile;nohup/usr/local/zookeeper-3.4.10/bin/zkServer.sh start >/dev/null 2>&1&"
}&
wait
done
cat/usr/local/zookeeper-3.4.10/bin/slave | while read line
do
{
echo $line
ssh $line "source /etc/profile;jps |grepQuorumPeerMain |cut -c 1-4 |xargs kill -s 9"
}&
wait
done