zookeeper 集群部署
zookeeper 是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
step 1 配置集群hosts
配置HOSTS的原因主要有两点:
- 为了避免组件通过hostname来进行访问,所以一定要做好IP 和 hostname 的映射关系。
- 为了安装部属配置方便
sudo vi /etc/hosts
192.168.174.116 hdfs06
192.168.174.117 hdfs07
192.168.174.118 hdfs08
step 2 下载zookeeper安装包以及jdk的安装包
-
本文档使用的JDK是1.8_131的版本,download
-
本文档使用的zookeeper是3.4.11的版本,官方下载地址如下:download
-
本文文档在root用户下操作,如果非root用,请注意文件及文件夹的权限问题即可。
step 3 jdk安装
解压配置环境变量即可使用
export JAVA_HOME=/opt/jdk1.8.0_131
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile
#自JDK1.7之后 CLASSPATH 可以不配置
step 4 install zookeeper
创建项目目录
在现实的生产环境中,我们安装集群时,我们的数据目录一般都和安装目录分离,安装目录一般都视情况而定,普遍都是安装在/usr/local或者是/opt目录下。 而数据目录一般都是在根目录下创建一个数据文件夹并将外部磁盘挂载在该目录上。
本实例由于是在本地虚拟机下安装,个人学习使用,所以统一将数据目录和安装目录放在一个文件夹下,方便管理。
mkdir –p /opt/zookeeper #创建zookeeper项目目录
mkdir -p /opt/zookeeper/zkData #存放快照日志
mkdir -p /opt/zookeeper/zkDataLog #存放事务日志
解压zookeeper安装包
首先进入到下载好的zookeeper安装文件的目录下:解压文件到预先设计好的安装目录下
tar –zxvf zookeeper-3.4.11.tar.gz –C /opt/zookeeper
修改配置文件
cd /opt/zookeeper/zookeeper-3.4.11/conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
主要的修改参数如下
dataDir=/opt/zookeeper/zkData
dataLogDir=/opt/zookeeper/zkDatalog
server.1=hdfs06:2888:3888
server.2=hdfs07:2888:3888
server.3=hdfs08:2888:3888
这些参数根据情况进行修改,初始安装默认就好
clientPort=2181
tickTime=2000
initLimit=10
syncLimit=5
创建myid文件
root@server1# echo "1" > /opt/zookeeper/zkdata/myid
root@server2# echo "2" > /opt/zookeeper/zkdata/myid
root@server3# echo "3" > /opt/zookeeper/zkdata/myid
服务的启停操作
进入到Zookeeper的bin目录下
cd /opt/zookeeper/zookeeper-3.4.11/bin #启动服务(每一台都需要单独启动)
启动服务
./zkServer.sh start
检查服务状态
./zkServer.sh status
各个配置参数的解释
server.1 这个1是服务器的标识也可以是其他的数字, 表示这个是第几号服务器,用来标识服务器,这个标识要写到快照目录下面myid文件里
192.168.174.116为集群里的IP地址,第一个端口是master和slave之间的通信端口,默认是2888,第二个端口是leader选举的端口,集群刚启动的时候选举或者leader挂掉之后进行新的选举的端口默认是3888
tickTime:Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
initLimit:Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 5个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒
syncLimit:这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒
dataDir:快照日志的存储路径
dataLogDir:事物日志的存储路径,如果不配置这个那么事物日志会默认存储到dataDir制定的目录,这样会严重影响zk的性能,当zk吞吐量较大的时候,产生的事物日志、快照日志太多
clientPort:客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。修改他的端口改大点