zookeeper安装并设置开机自启动及节点特性的了解

662 阅读5分钟

「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战

zookeeper概要、背景及作用

zookeeper产生背景

项目从单体到分布式转变之后,将会产生多个节点之间协同的问题。如:

1. 每天的定时任务由谁哪个节点来执行?

2. RPC调用时的服务发现?

3. 如何保证并发请求的幂等

4. ....

这些问题可以统一归纳为多节点协调问题,如果靠节点自身进行协调这是非常不可靠的,性能上也不可取。必须由一个独立的服务做协调工作,它必须可靠,而且保证性能。

zookeeper概要

ZooKeeper是用于分布式应用程序的协调服务。它公开了一组简单的API,分布式应用程序可以基于这些API用于同步,节点状态、配置等信息、服务注册等信息。其由JAVA编写,支持JAVA 和C两种语言的客户端。

image.png

znode 节点

ookeeper 中数据基本单元叫节点,节点之下可包含子节点,最后以树级方式程现。每个节点拥有唯一的路径path。客户端基于PATH上传节点数据,zookeeper 收到后会实时通知对该路径进行监听的客户端。

image.png

节点类型

zookeeper 中节点叫znode存储结构上跟文件系统类似,以树级结构进行存储。不同之外在于znode没有目录的概念,不能执行类似cd之类的命令。znode结构包含如下:
path:唯一路径
childNode:子节点
stat:状态属性
type:节点类型

类型描述
PERSISTENT持久节点
PERSISTENT_SEQUENTIAL持久序号节点
EPHEMERAL临时节点(不可在拥有子节点)
EPHEMERAL_SEQUENTIAL临时序号节点(不可在拥有子节点)

下边这俩节点类型是3.5.3 版本后新增的
Container 节点
3.5.3 版本新增,如果Container节点下面没有子节点,则Container节点在未来会被Zookeeper自动清除,定时任务默认60s 检查一次

TTL 节点
3.5.3 版本新增, 默认禁用,只能通过系统配置zookeeper.extendedTypesEnabled=true 开启,不稳定

各节点特点

e13cb06a7c954090b3f84e0a31dd3a18.png

节点介绍与作用

1. PERSISTENT(持久节点)

持久化保存的节点,也是默认创建的
#默认创建的就是持久节点
create /test 

2.PERSISTENT_SEQUENTIAL(持久序号节点)

创建时zookeeper 会在路径上加上序号作为后缀,。非常适合用于分布式锁、分布式选举等场景。创建时添加 -s 参数即可。
#创建序号节点
create -s /test

#返回创建的实际路径
Created /test0000000001
create -s /test

#返回创建的实际路径2
Created /test0000000002

3.EPHEMERAL(临时节点)

临时节点会在客户端会话断开后自动删除。适用于心跳,服务发现等场景。创建时添加参数-e 即可。
#创建临时节点, 断开会话 在连接将会自动删除
create -e /temp

4.EPHEMERAL_SEQUENTIAL(临时序号节点)

与持久序号节点类似,不同之处在于EPHEMERAL_SEQUENTIAL是临时的会在会话断开后删除。创建时添加 -e -s
create -e -s /temp/seq

zookeeper部署及常规配置

zookeeper 基于JAVA开发,下载后只要有对应JVM环境即可运行。其默认的端口号是2181运行前得保证其不冲突。

版本选择

官网下载地址zookeeper.apache.org/releases.ht…

image.png 目前3.6.3是稳定版本,那么我就下载3.6.3进行安装配置

apache-zookeeper-xxx-tar.gz 代表源代码
apache-zookeeper-xxx-bin.tar.gz 运行版本

下载地址(国外下载太慢,我们从清华镜像这边下载): mirrors.tuna.tsinghua.edu.cn/apache/zook…

部署

wget 下载

cd /usr/local
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz

解压

tar -zxvf apache-zookeeper-3.6.3-bin.tar.gz

拷贝默认配置

将原文件复制一份防止以后使用

cd apache-zookeeper-3.6.3-bin/conf/
cp zoo_sample.cfg zoo.cfg

配置文件说明

vim zoo.cfg

zookeeper时间配置中的基本单位 (毫秒)
tickTime=2000

允许follower初始化连接到leader最大时长,它表示tickTime时间倍数 即:initLimit*tickTime
initLimit=10

允许follower与leader数据同步最大时长,它表示tickTime时间倍数 
syncLimit=5

zookeper 数据存储目录
dataDir=/tmp/zookeeper

对客户端提供的端口号
clientPort=2181

单个客户端与zookeeper最大并发连接数
maxClientCnxns=60

保存的数据快照数量,之外的将会被清除
autopurge.snapRetainCount=3

自动触发清除任务时间间隔,小时为单位。默认为0,表示不自动清除。
autopurge.purgeInterval=1

我们将数据目录改到zookeeper下面,复制路径修改到dataDir

image.png

启动服务

进入bin目录,下面有这些文件

image.png 其中
zkServer.sh 为linux的启动命令
zkCli.sh 为客户端连接命令

启动命令

./bin/zkServer.sh start conf/zoo.cfg

image.png

设置自启动

1、进入到/ect/init.d目录下,创建zookeeper脚本

cd /etc/init.d
vim zookeeper

2、加入如下脚本

#!/bin/bash
#chkconfig:2345 10 90    
#description:service zookeeper
#processname:zookeeper    
export JAVA_HOME=/usr/local/java
case $1 in
        start) su root /usr/local/apache-zookeeper-3.6.3-bin/bin/zkServer.sh start;;
        stop) su root /usr/local/apache-zookeeper-3.6.3-bin/bin/zkServer.sh stop;;
        status) su root /usr/local/apache-zookeeper-3.6.3-bin/bin/zkServer.sh status;;
        restart) su root /usr/local/apache-zookeeper-3.6.3-bin/bin/zkServer.sh restart;;
        *) echo "require start|stop|status|restart" ;;
esac

3、给脚本添加执行权限

chmod +x zookeeper

4、使用service zookeeper start/stop命令来尝试启动关闭zookeeper,使用service zookeeper status查看zookeeper状态。
或者直接 zookeeper start/stop/status

image.png

5、添加到开机启动

chkconfig --add zookeeper

此处可能遇到问题: image.png 可以再vi 一下zookeeper文件,看下脚本是否齐全
6、查看开机自启的服务中是否已经有我们的zookeeper

chkconfig --list zookeeper

image.png