在 CentOS7 上安装 zookeeper-3.4.9 服务
1、创建 /usr/local/services/zookeeper 文件夹:
mkdir -p /usr/local/services/zookeeper
2、进入到 /usr/local/services/zookeeper 目录中:
cd /usr/local/services/zookeeper
3、下载 zookeeper-3.4.9.tar.gz:
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
4、解压缩 zookeeper-3.4.9.tar.gz:
tar -zxvf zookeeper-3.4.9.tar.gz
5、进入到 /usr/local/services/zookeeper/zookeeper-3.4.9/conf 目录中:
cd zookeeper-3.4.9/conf/
复制 zoo_sample.cfg 文件的并命名为为 zoo.cfg:
cp zoo_sample.cfg zoo.cfg
6、修改zoo.cfg
# 数据文件夹
dataDir=/usr/local/services/zookeeper/zookeeper-3.4.9/data
# 日志文件夹
dataLogDir=/usr/local/services/zookeeper/zookeeper-3.4.9/logs
7、导出环境变量
用 vim 打开 /etc/ 目录下的配置文件 profile:
vim /etc/profile
并在其尾部追加如下内容:
# idea - zookeeper-3.4.9 config start - 2016-09-08
export ZOOKEEPER_HOME=/usr/local/services/zookeeper/zookeeper-3.4.9/
export PATH=$ZOOKEEPER_HOME/bin:$PATH
export PATH
# idea - zookeeper-3.4.9 config start - 2016-09-08
8、使 /etc/ 目录下的 profile 文件即可生效:
source /etc/profile
9、启动 zookeeper 服务:
zkServer.sh start
如打印如下信息则表明启动成功:
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
10、查询 zookeeper 状态:
zkServer.sh status
11、关闭 zookeeper 服务:
zkServer.sh stop
如打印如下信息则表明成功关闭:
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
12、重启 zookeeper 服务:
zkServer.sh restart
如打印如下信息则表明重启成功:
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /usr/local/services/zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
第二步:修改ZooKeeper配置文件
在其中一台机器(slave-01)上,解压缩zookeeper-3.3.4.tar.gz,修改配置文件conf/zoo.cfg,内容如下所示:
[plain] view plain copy
- tickTime=2000
- dataDir=/home/hadoop/storage/zookeeper
- clientPort=2181
- initLimit=5
- syncLimit=2
- server.1=slave-01:2888:3888
- server.2=slave-02:2888:3888
- server.3=slave-03:2888:3888
上述配置内容说明,可以参考http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html#sc_RunningReplicatedZooKeeper。
第三步:远程复制分发安装文件
上面已经在一台机器slave-01上配置完成ZooKeeper,现在可以将该配置好的安装文件远程拷贝到集群中的各个结点对应的目录下:
[plain] view plain copy
- cd /home/hadoop/installation/
- scp -r zookeeper-3.3.4/ hadoop@slave-02:/home/hadoop/installation/
- scp -r zookeeper-3.3.4/ hadoop@slave-03:/home/hadoop/installation/
第四步:设置myid
在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字,例如:
[plain] view plain copy
- hadoop@slave-01:~/installation/zookeeper-3.3.4$ echo "1" > /home/hadoop/storage/zookeeper/myid
- hadoop@slave-02:~/installation/zookeeper-3.3.4$ echo "2" > /home/hadoop/storage/zookeeper/myid
- hadoop@slave-03:~/installation/zookeeper-3.3.4$ echo "3" > /home/hadoop/storage/zookeeper/myid
按照上述进行配置即可。
第五步:启动ZooKeeper集群
在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本,如下所示:
[plain] view plain copy
- hadoop@slave-01:~/installation/zookeeper-3.3.4$ bin/zkServer.sh start
- hadoop@slave-02:~/installation/zookeeper-3.3.4$ bin/zkServer.sh start
- hadoop@slave-03:~/installation/zookeeper-3.3.4$ bin/zkServer.sh start
zookeeper集群搭建问题:
Cannot open channel to * at election address
查看log文件(默认在bin目录下的zookeeper.out)Java.NET.NoRouteToHostException: No route to host
导致问题的原因很多。
关闭
1关闭防火墙。Firewalld或者iptables
2将data/目录下的 zookeeper_server.pid文件删除重启。
3 log目录没有创建导致出错
zookeeper的address aready in used:
是最初使用standalone模式时放pid的目录与后面使用集群模式的路径不同,导致重启时没能kill掉旧的zookeeper。只需手工kill -9 pid
Zookeeper的配置文件中如果配置ip有肯定能启动问题很多,建议配置host
修改每个结点的/etc/hosts文件,将ZooKeeper集群中所有结点主机名到IP地址的映射配置上
1 Vmware搭建zookeeper集群
2 zookeeper集群搭建的运行原理
3 zookeeper的out文件
有时候回报:java.net.ConnectException: Connection refused 等等错误。这个错误有时候确实是错误。但有时候确实 正常的:假如有三台机器,仅仅因为我们只启动了一台zookeeper,那么此时查看zookeeper.out文件经常有这个错误。只是因为其他两台机器没有启动而已。所以启动三台机器:zkService.sh start间隔不要太久。
我启动的顺序是slave-01>slave-02>slave-03,由于ZooKeeper集群启动的时候,每个结点都试图去连接集群中的其它结点,先启动的肯定连不上后面还没启动的,所以上面日志前面部分的异常是可以忽略的。通过后面部分可以看到,集群在选出一个Leader后,最后稳定了。
其他结点可能也出现类似问题,属于正常。
Zookeeper节点间是怎样关联的:zab算法
Zookeeper的核心是广播机制http://www.cnblogs.com/kunpengit/p/4045334.html
clientPort是客户端连接server的端口,即zk对外服务端口,一般设置为2181
Zookeeper中的ACL
传统的文件系统中,ACL分为两个维度,一个是属组,一个是权限,子目录/文件默认继承父目录的ACL。而在Zookeeper中,node的ACL是没有继承关系的,是独立控制的。Zookeeper的ACL,可以从三个维度来理解:一是scheme; 二是user; 三是permission,通常表示为scheme:id:permissions, 下面从这三个方面分别来介绍:
http://www.wuzesheng.com/?p=2438
当启动 ZooKeeper 服务成功之后,输入下述命令,连接到 ZooKeeper 服务:
bash zkCli.sh –server 192.168.255.133:2181
Zookeeper高可用型zab算法
Zookeeper的顺序一致性: