前言
1.zookeeper简介
ZooKeeper是一个开源的分布式应用程序协调服务,是Google的Chubby一个开源的实现。ZooKeeper为分布式应用提供一致性服务,提供的功能包括:分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)、分布式锁(Distributed Lock)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
2.zookeeper集群角色简介
角色 | 说明 |
---|---|
领导者(leader) | 为客户端提供读和写的服务,负责投票的发起和决议,更新系统状态。 |
跟随者(follower) | 为客户端提供读服务,如果是写服务则转发给Leader。在选举过程中参与投票。 |
观察者(Observerr) | 为客户端提供读服务器,如果是写服务则转发给Leader。不参与选举过程中的投票,也不参与“过半写成功”策略。在不影响写性能的情况下提升集群的读性能。此角色于zookeeper3.3系列新增的角色。 |
预备工作
1. 集群规划
ZooKeeper在提供分布式锁等服务的时候需要过半数的节点可用。另外高可用的诉求来说节点的个数必须>1,所以ZooKeeper集群需要是>1的奇数节点。例如3、5、7等等。 这次我们规划三个节点,操作系统为Centos7
节点名称 | IP地址 |
---|---|
zk-01 | 172.16.0.10 |
zk-02 | 172.16.0.11 |
zk-03 | 172.16.0.12 |
2.所需软件版本信息
名称 | 版本 |
---|---|
Linux | CentOS7.6 |
zookeeper | 3.5.7 |
JDK | 1.8.0_191 |
开始部署
定义安装路径:/data/soft
1.部署JDK
- 安装包上传至/data/soft
- 解压缩包
tar -xf jdk-8u191-linux-x64.tar.gz
- 编辑变量文件/etc/profile
# vim /etc/profile
#在文件的最后添加以下内容
#JAVA
export JAVA_HOME=/data/soft/jdk1.8.0_191
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
- 加载/etc/profile
source /etc/profile #加载变量
java -version #查看JDK版本
2.部署zookeeper
定义安装路径:/data/soft
- 关闭防火墙及selinux
systemctl stop firewalld.service
sestatus/getenforce #查看selinux状态 disabled关闭 enabled开启
#1.临时关闭
setenforce 0
#2.永久关闭
vim /etc/selinux/config
SELINUX=disabled #修改为disabled
#重启生效
-
下载安装包
(上传你自己的安装包)
官方镜像选择:https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ -
创建ZooKeeper相关目录
#创建应用目录、创建数据目录
mkdir -p /data/soft/zookeeper/{data,logs}
- 解压到指定目录
tar -xzvf apache-zookeeper-3.5.7-bin.tar.gz -C /data/soft/zookeeper/
mv /data/soft/zookeeper/{apache-zookeeper-3.5.7-bin,zookeeper-3.5.7}
- 配置环境变量
#修改环境变量文件
vim /etc/profile
#最后增加以下内容
export ZOOKEEPER_HOME=/data/soft/zookeeper/zookeeper-3.5.7
export PATH=$ZOOKEEPER_HOME/bin:$PATH
#使环境变量生效
source /etc/profile
#查看配置结果
echo $ZOOKEEPER_HOME
既然已配置环境变量,为了方便访问ZooKeeper目录
后续通过$ZOOKEEPER_HOME代替/data/soft/zookeeper/zookeeper-3.4.11
3.配置ZooKeeper
- ZooKeeper基础配置
#进入ZooKeeper配置目录
cd $ZOOKEEPER_HOME/conf
#新建配置文件
cp zoo_sample.cfg zoo.cfg
#写入以下内容并保存
cat > zoo.cfg << "EOF"
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/soft/zookeeper/data
dataLogDir=/data/soft/zookeeper/logs
clientPort=2181
server.1=yj-pt-p2-fluentd-zookeeper-kafka-01:2888:3888
server.2=yj-pt-p2-fluentd-zookeeper-kafka-02:2888:3888
server.3=yj-pt-p2-fluentd-zookeeper-kafka-03:2888:3888
EOF
- 配置节点标识
zk01:
echo "1" > /data/soft/zookeeper/data/myid
zk02:
echo "2" > /data/soft/zookeeper/data/myid
zk03:
echo "3" > /data/soft/zookeeper/data/myid
4.启动ZooKeeper
1. 堆栈参数修改
vim /data/soft/zookeeper/zookeeper-3.5.7/conf/java.env
#!/bin/bash
# heap size MUST be modified according to cluster environment
#export JVMFLAGS="-Xms6G -Xmx6G -XX:NewSize=3G -XX:MaxNewSize=3G $JVMFLAGS"
#export JVMFLAGS="-Xms4G -Xmx4G -XX:NewSize=2G -XX:MaxNewSize=2G $JVMFLAGS"
export JVMFLAGS="-Xms3072m -Xmx3072m -XX:NewSize=1536m -XX:MaxNewSize=1536m $JVMFLAGS"
2.启动
$ZOOKEEPER_HOME/bin/zkServer.sh start
3.验证
出现以下字样表示启动成功:
ZooKeeper JMX enabled by default Using config: /data/soft/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg Starting zookeeper … STARTED
5. 集群查看&连接测试
- 查看节点状态
sh $ZOOKEEPER_HOME/bin/zkServer.sh status
#状态信息
ZooKeeper JMX enabled by default
Using config:/data/soft/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: follower
#如果为领导者节点则Mode:leader
- 客户端连接测试
这里随机选其中一个节点作为客户端连接其他节点即可
#指定Server进行连接
sh $ZOOKEEPER_HOME/bin/zkCli.sh -server elk-3:2181
#正常连接后会进入ZooKeeper命令行,显示如下:
[zk: elk-3:2181(CONNECTED) 0]
输入命令测试:
#查看ZooKeeper根
[zk: elk-3:2181(CONNECTED) 1] ls /
[zookeeper]
到此部署完成,谢谢您的观看。如若文章有错误理解,欢迎批评指正,同时非常期待你的评论、点赞和收藏。 😊