在三台装有centos6.5(64位)服务器上安装ZooKeeper,官网建议至少3个节点,本次实验3台
(主机数:3(要求3+,且必须是奇数,因为ZooKeeper选举算法))。
需要提前安装jdk,选择版本是jdk-8u91-linux-x64。
ZooKeeper集群所有结点作为一个整体对分布式应用提供服务,因此需要各个节点实现互连,就要知道其它节点主机和ip的映射关系。在每个节点上配置/etc/hosts文件,添加如下:
主机名 | IP地址 | JDK | ZooKeeper | myid |
hadoop01 |
172.16.1.156 |
1.8.0_11 | server.1 | 1 |
hadoop02 |
172.16.1.157 |
1.8.0_11 | server.2 | 2 |
hadoop03 |
172.16.1.158 |
1.8.0_11 | server.3 | 3 |
3.安装ZooKeeper
1)下载ZooKeeper,选择稳定版,即stable
2)解压
tar -zxvf zookeeper-3.4.8.tar.gz
export ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.4.8
export PATH=$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$PATH4)新建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=/home/hadoop/zookeeper-3.4.8/data
# 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=1server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
参数说明:①tickTime:心跳时间,毫秒为单位。
②initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里客户端不是用户连接 Zookeeper服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒。
③syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime时间长度,总时间长度就是 5*2000=10 秒。
④dataDir:存储内存中数据库快照的位置。
⑤clientPort:监听客户端连接的端口
⑥server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
5)dataDir目录下创建myid文件,将内容设置为上⑥中A值,用来标识不同的服务器。
/home/hadoop/zookeeper-3.4.8/data/myid
在节点配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,$ZOOKEEPER_HOME/conf/zoo.cfg文件中配置server.X,则myid文件中就输入这个数字X。(即在每个节点上新建并设置文件myid,其内容与zoo.cfg中
id相对应)这里hadoop01节点为 1
cd /home/hadoop/zookeeper-3.4.8/datatouch myid echo"1" > myid
1、在master节点的/home/hadoop/目录下
scp -r zookeeper-3.4.6 hadoop@hadoop02:~/
scp -r zookeeper-3.4.6 hadoop@hadoop03:~/
scp -r data hadoop@hadoop02:~/zookeeper-3.4.8
scp -r data hadoop@hadoop03:~/zookeeper-3.4.82、在hadoop02节点的/home/hadoop/目录下
vi ./zookeeper-3.4.8/data/myid修改为 2
3、在hadoop03节点的/home/hadoop/目录下
vi ./zookeeper-3.4.8/data/myid修改为 3
5.测试ZooKeeper
1)各节点上启动 (这里启动顺序为 hadoop01 > hadoop02 > hadoop03 )
[hadoop@hadoop01 zookeeper-3.4.8]$ bin/zkServer.sh start2)jps查看进程
30056 QuorumPeerMainQuorumPeerMain是zookeeper进程,说明启动正常。
3)查看状态
[hadoop@hadoop01 zookeeper-3.4.8]$ bin/zkServer.sh status
[hadoop@hadoop02 zookeeper-3.4.8]$ bin/zkServer.sh status4)停止ZooKeeper
[hadoop@hadoop01 zookeeper-3.4.8]$ bin/zkServer.sh stop
(注:之前我配置正确,但是一直都是,每个节点上都启动了,但就是互相连接不上,最后发现是防火墙原因,啊啊啊!一定要先把防火墙关了! )
注意事项:如果集群上同时安装了Hadoop、HBase、Zookeeper,需要注意三者之间有先后启动顺序:启动顺序:Hadoop——>Zookeeper——>HBase停止顺序HBase——>Zookeeper——>Hadoop
启动集群
首先启动hadoop(在hadoop01上start-all.sh),
然后启动zookeeper集群(分别在三台机器上zkServer.sh start;可以使用zkServer.sh status查看zk状态)。
最后在hadoop01上启动hbase集群(start-hbase.sh)。