From 51694cd445ef626127ff37ea7e9691f8583bac0b Mon Sep 17 00:00:00 2001 From: luoxiang <2806718453@qq.com> Date: Wed, 17 Apr 2019 22:52:33 +0800 Subject: [PATCH] =?UTF-8?q?zookeeper=E9=9B=86=E7=BE=A4=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E6=90=AD=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Azkaban 3.x 编译及部署.md | 2 +- notes/installation/Hbase基本环境搭建.md | 2 +- ...keeper单机环境和集群环境搭建.md | 233 ++++++++++++++++++ ...于Zookeeper搭建Kafka高可用集群.md | 0 pictures/zookeeper-cluster.png | Bin 0 -> 26109 bytes 5 files changed, 235 insertions(+), 2 deletions(-) create mode 100644 notes/installation/Zookeeper单机环境和集群环境搭建.md create mode 100644 notes/installation/基于Zookeeper搭建Kafka高可用集群.md create mode 100644 pictures/zookeeper-cluster.png diff --git a/notes/installation/Azkaban 3.x 编译及部署.md b/notes/installation/Azkaban 3.x 编译及部署.md index ece2570..a2b1f8d 100644 --- a/notes/installation/Azkaban 3.x 编译及部署.md +++ b/notes/installation/Azkaban 3.x 编译及部署.md @@ -117,7 +117,7 @@ tar -zxvf azkaban-solo-server-3.70.0.tar.gz ### 2.4 验证 -验证方式一:JPS 查看是否有`AzkabanSingleServer`进程 +验证方式一:jps查看是否有`AzkabanSingleServer`进程
diff --git a/notes/installation/Hbase基本环境搭建.md b/notes/installation/Hbase基本环境搭建.md index 35a2f42..e0d89b0 100644 --- a/notes/installation/Hbase基本环境搭建.md +++ b/notes/installation/Hbase基本环境搭建.md @@ -212,7 +212,7 @@ hadoop001 ### 3.7 验证启动是否成功 -验证方式一:JPS 查看进程,其中HMaster,HRegionServer,HQuorumPeer三个进程是HBase的进程(其中HQuorumPeer是Hbase内置的Zookeeper的进程),其余的为HDFS和YARN的进程。 +验证方式一:jps查看进程,其中HMaster,HRegionServer,HQuorumPeer三个进程是HBase的进程(其中HQuorumPeer是Hbase内置的Zookeeper的进程),其余的为HDFS和YARN的进程。 ```shell [root@hadoop001 conf]# jps diff --git a/notes/installation/Zookeeper单机环境和集群环境搭建.md b/notes/installation/Zookeeper单机环境和集群环境搭建.md new file mode 100644 index 0000000..fdf7c57 --- /dev/null +++ b/notes/installation/Zookeeper单机环境和集群环境搭建.md @@ -0,0 +1,233 @@ +# Zookeeper单机环境和集群环境搭建 + + + + +## 一、单机环境搭建 + +#### 1.1 下载 + +下载对应版本Zookeeper,这里我下载的版本`3.4.14`。官方下载地址:https://archive.apache.org/dist/zookeeper/ + +```shell +# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz +``` + +#### 1.2 解压 + +```shell +# tar -zxvf zookeeper-3.4.14.tar.gz +``` + +#### 1.3 配置环境变量 + +```shell +# vim /etc/profile +``` + +添加环境变量: + +```shell +export ZOOKEEPER_HOME=/usr/app/zookeeper-3.4.14 +export PATH=$ZOOKEEPER_HOME/bin:$PATH +``` + +使得配置的环境变量生效: + +```shell +# source /etc/profile +``` + +#### 1.4 修改配置 + +进入安装目录的`conf/`目录下,拷贝配置样本并进行修改 + +``` +# cp zoo_sample.cfg zoo.cfg +``` + +指定数据存储目录和日志文件目录(目录不用预先创建,程序会自动创建),修改后完整配置如下: + +```properties +# 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=/usr/local/zookeeper/data +dataLogDir=/usr/local/zookeeper/log +# 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=1 +``` + +>配置参数说明: +> +>- **tickTime**:用于计算的基础时间单元。比如session超时:N*tickTime; +>- **initLimit**:用于集群,允许从节点连接并同步到 master节点的初始化连接时间,以tickTime的倍数来表示; +>- **syncLimit**:用于集群, master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制); +>- **dataDir**:数据存储位置; +>- **dataLogDir**:日志目录; +>- **clientPort**:用于客户端连接的端口,默认2181 + + + +#### 1.5 启动 + +由于已经配置过环境变量,直接使用下面命令启动即可 + +``` +zkServer.sh start +``` + +#### 1.6 验证 + +使用JPS验证进程是否已经启动,出现`QuorumPeerMain`则代表启动成功 + +```shell +[root@hadoop001 bin]# jps +3814 QuorumPeerMain +``` + + + +## 二、集群环境搭建 + +为保证集群高可用,Zookeeper集群的节点数最好是奇数,最少有三个节点,所以这里演示搭建一个三个节点的集群。 + +> 以下演示为单机上搭建集群,对于Zookeeper,多机集群搭建步骤和单机一致。 + +#### 2.1 修改配置 + +拷贝三份zookeeper安装包,分别修改其配置文件,主要是修改`dataDir`、`dataLogDir`以及配置集群信息。 + +如果是多台服务器,则集群中每个节点通讯端口和选举端口可相同,IP地址修改为每个节点所在主机IP即可。 + +zookeeper01配置: + +```shell +tickTime=2000 +initLimit=10 +syncLimit=5 +dataDir=/usr/local/zookeeper-cluster/data/01 +dataLogDir=/usr/local/zookeeper-cluster/log/01 +clientPort=2181 + +# server.1 这个1是服务器的标识,可以是任意有效数字,标识这是第几个服务器节点,这个标识要写到dataDir目录下面myid文件里 +# 指名集群间通讯端口和选举端口 +server.1=127.0.0.1:2287:3387 +server.2=127.0.0.1:2288:3388 +server.3=127.0.0.1:2289:3389 +``` + +zookeeper02配置,与zookeeper01相比,只有`dataLogDir`和`dataLogDir`不同: + +```shell +tickTime=2000 +initLimit=10 +syncLimit=5 +dataDir=/usr/local/zookeeper-cluster/data/02 +dataLogDir=/usr/local/zookeeper-cluster/log/02 +clientPort=2181 + +server.1=127.0.0.1:2287:3387 +server.2=127.0.0.1:2288:3388 +server.3=127.0.0.1:2289:3389 +``` + +zookeeper03配置,与zookeeper01,02相比,只有`dataLogDir`和`dataLogDir`不同: + +```shell +tickTime=2000 +initLimit=10 +syncLimit=5 +dataDir=/usr/local/zookeeper-cluster/data/03 +dataLogDir=/usr/local/zookeeper-cluster/log/03 +clientPort=2181 + +server.1=127.0.0.1:2287:3387 +server.2=127.0.0.1:2288:3388 +server.3=127.0.0.1:2289:3389 +``` + +> 为节省篇幅,以上配置文件均略去英文注释 + +#### 2.2 标识节点 + +分别在三个节点的数据存储目录下新建`myid`文件,并写入对应的节点标识。 + +Zookeeper集群通过`myid`文件识别集群节点,并通过上文配置的节点通信端口和选举端口来进行节点通信,并选举出leader节点,从而搭建出集群。 + +创建存储目录: + +```shell +# dataDir +mkdir -vp /usr/local/zookeeper-cluster/data/01 +# dataDir +mkdir -vp /usr/local/zookeeper-cluster/data/02 +# dataDir +mkdir -vp /usr/local/zookeeper-cluster/data/03 +``` + +创建并写入节点标识到`myid`文件: + +```shell +#server1 +echo "1" > /usr/local/zookeeper-cluster/data/01/myid +#server2 +echo "2" > /usr/local/zookeeper-cluster/data/02/myid +#server3 +echo "3" > /usr/local/zookeeper-cluster/data/03/myid +``` + +#### 2.3 启动集群 + +分别启动三个节点: + +```shell +# 启动节点1 +/usr/app/zookeeper-cluster/zookeeper01/bin/zkServer.sh start +# 启动节点2 +/usr/app/zookeeper-cluster/zookeeper02/bin/zkServer.sh start +# 启动节点3 +/usr/app/zookeeper-cluster/zookeeper03/bin/zkServer.sh start +``` + +#### 2.4 集群验证 + +使用jps查看进程,并且使用`zkServer.sh status`查看集群各个节点状态。如图三个节点进程均启动成功,并且两个节点为follower节点,一个节点为leader节点。 + +
+ diff --git a/notes/installation/基于Zookeeper搭建Kafka高可用集群.md b/notes/installation/基于Zookeeper搭建Kafka高可用集群.md new file mode 100644 index 0000000..e69de29 diff --git a/pictures/zookeeper-cluster.png b/pictures/zookeeper-cluster.png new file mode 100644 index 0000000000000000000000000000000000000000..1ac45d6aa9fca96c8716dc30ed3cd4cb6c137173 GIT binary patch literal 26109 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