之前部署hadoop&hbase集群的时候使用的hbase内置的zookeeper所以一直也没有对zookeeper进行独立的部署,近期需要独立部署使用,借机也总结一篇文档
zookeeper是一个分布式的开源框架,能够提供高性能的分布式服务,应用场景涉猎:数据发布与订阅;软负载均衡;命名服务;分布式通知/协调;集群管理和master选举;分布式锁和分布式队列等等
有两种运行的模式:Standalone模式和Distributed模式
Standalone模式安装:
1.首先安装java环境
查看当前是否存在java:
系统自带的openjdk需要卸载,查看:
rpm -qa|grep gcj
yum -y remove java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64
yum -y remove libgcj-4.4.7-3.el6.x86_64
安装java环境:
java版本:jdk1.7.0_17
解压缩安装包到/usr/local下:
tar zxvf jdk-7u17-linux-x64.tar.gz -C /usr/local
添加环境变量:
export JAVA_HOME=/usr/local/jdk1.7.0_17
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
然后source /etc/profile
查看环境变量:
2.下载并解压缩zookeeper
官方下载地址:http://zookeeper.apache.org/releases.html#download
选择镜像地址并下载
选择版本:zookeeper-3.4.5.tar.gz
3.拷贝配置文件并修改
cp zoo_sample.cfg zoo.cfg
修改dataDir 默认是:/tmp/zookeeper系统重启后/tmp目录会清空
修改dataDir目录,默认端口是2181不做修改:
4.创建数据目录:
mkdir -p /data/zookeeper/data
5.启动zookeeper并验证
/usr/local/zookeeper-3.4.5/bin/zkServer.sh start
查看端口的监听情况:
Distributed模式安装:
Distributed模式的zookeeper集群有两个重要的角色:分别是Leader和Follower,所以集群中的每个节点之间需要相互的通信,在没有内部DNS解析的前提下,需要在zookeeper集群的每个节点上配置/etc/hosts文件,�r(�s��t)�q这一点和hadoop集群是一个道理
1.首先编辑/etc/hosts文件
2.修改之前配置的standealone节点的配置:
新增:
与/etc/hosts对应的命名方式相对应
3.分发zookeeper的安装文件到其他的节点
scp -r zookeeper-3.4.5/ root@zookeeper2:/usr/local/
同样需要创建dataDir指定的目录和安装java环境
4.分别创建myid文件,用来标识当前的主机,文件内容为数字,与zoo.cfg中server.X中的数字一致,存放的目录为dataDir指定的目录
[root@zookeeper1 ~]# echo "1"> /data/zookeeper/data/myid
[root@zookeeper2 ~]# echo "2"> /data/zookeeper/data/myid
5.启动zookeeper的集群
[root@zookeeper1 ~]# /usr/local/zookeeper-3.4.5/bin/zkServer.sh start
[root@zookeeper2 ~]# /usr/local/zookeeper-3.4.5/bin/zkServer.sh start
在每个zookeeper的节点上分别启动zookeeper的服务
因为启动的顺序有先后而zookeeper启动的时候会尝试去连接集群中的其他的节点,先启动的节点在zkServer.sh同级目录的zookeeper.out文件中有出现报错的可能,可以忽略
6.查询各节点的角色(验证使用,可忽略)
当集群中的所有的节点的服务都启动后,我们可以观察各个节点的角色:
注:Zookeeper采用的是Leader election的选举算法,集群的运行过程中,只有一个Leader,其他的都是Follower,当Leader出现宕机或者其他的问题时,会从剩下的Follower节点中重新选举一个Leader。
命令:
/usr/local/zookeeper-3.4.5/bin/zkServer.sh status
由此可见zookeeper2是leader,不过对于客户端,zookeeper的集群是一个整体,可以在任何的一个节点上建立到服务集群的连接~\(�R��Q)/~