前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >探索:从入门到放弃之Zookeeper3.6.0

探索:从入门到放弃之Zookeeper3.6.0

作者头像
公众号: 云原生生态圈
发布2021-11-15 16:07:58
1.1K0
发布2021-11-15 16:07:58
举报
文章被收录于专栏:云原生生态圈

目前zookeeper的版本是3.6.0,同时增加了几个新特性,同时拥抱了Prometheus.

如果你还对zookeeper不了解的话,建议你认真地阅读这篇文章,我想你会有不少的收获。

zookeeper的特性

  1. 一致性: 数据一致性,数据是按照顺序分批入库的
  2. 原子性: 事务要么成功要么失败,不会局部化
  3. 单一视图: 客户端连接集群中的任一zk节点,数据都是一致的
  4. 可靠性: 每次对zk的操作状态都会保存在服务端
  5. 实时性: 客户端可以读取到zk服务端的最新数据

zookeeper工作方式

  1. zookeeper集群包含1个leader,多个follower
  2. 所有的follower都可提供读服务
  3. 所有的写做做都会被forward到leader
  4. client与server通过NIO通信
  5. 全局串行化所有的写操作
  6. 保证同一客户端的指令被FIFO执行
  7. 保证消息通知的FIFO

zookeeper单独安装

  1. 下载jdk文件和zookeeper的包到linux服务器上
  2. 解压java jdk安装包然后通过软连接到 /usr/local/jdk
  3. 解压zookeeper安装包到 /usr/local/zookeeper
  4. 配置环境变量
代码语言:javascript
复制
export JAVA_HOME=/usr/local/jdk
export ZOOKEEPER_HOME=/usr/local/zookeeper
export CLASSPATH=.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tool.jar
#export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin

zookeeper配置文件说明

代码语言:javascript
复制
tickTime: ZooKeeper使用的基本时间单位(毫秒)。它用于做心跳,并且最小会话超时将是tickTime的两倍
initLimit:用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来表示
syncLimit:用于集群,master主节点与从节点之间发送消息,请求和答应时间长度(心跳机制)
dataDir: 存储内存数据库快照的位置,存储事务日志的更新。
dataLogDir: 可以不配置,如果不配置的话就默认存储在数据目录同级目录下
clientPort: 连接服务器的端口,默认端口是2181
# zookeeper3.6.0集成了prometheus
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
metricsProvider.httpPort=7000
metricsProvider.exportJvmInfo=true

zkCli之间session的特性

  1. 客户端与服务端之间的连接存在回话
  2. 每个回话都会可以设置一个超时时间
  3. 心跳结束,session则过期
  4. session过期,则这个session创建的临时节点znode则会被抛弃
  5. 心跳机制:客户端向服务端发送ping包请求

zookeeper命令

启动zk服务
代码语言:javascript
复制
zkServer.sh --config $ZOOKEEPER_HOME/config start/stop/status/restart
基础命令
zkcli get/list
  • list 列出当前目录结构
  • get 查看指定的路径的值
代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 9] get /zookeeper
            # 这里是空值
cZxid = 0x0 # 节点时候zookeeper分配的一个ID
ctime = Wed Dec 31 19:00:00 EST 1969 # 节点创建的时间
mZxid = 0x0 #节点修改后的ID
mtime = Wed Dec 31 19:00:00 EST 1969 # 节点被修改的时间
pZxid = 0x0 # 当前节点子节点的ID
cversion = -1 # 当前子节点的版本号
dataVersion = 0  # 当前节点的数据版本号,修改会自加1
aclVersion = 0 # 当前权限版本,修改会自加1
ephemeralOwner = 0x0 #
dataLength = 0
numChildren = 1 # 子节点的数量
zkcli create
代码语言:javascript
复制
create [-s] [-e] path data acl

# 创建一个节点
[zk: localhost:2181(CONNECTED) 14] create /hanbao hanbao
Created /hanbao
[zk: localhost:2181(CONNECTED) 15] get /hanbao
hanbao
# 创建一个临时的节点
[zk: localhost:2181(CONNECTED) 16] create -e /hanbao/hanbao1 hanbao1
Created /hanbao/hanbao1
[zk: localhost:2181(CONNECTED) 17] get /hanbao/hanbao1
hanbao1
...
ephemeralOwner = 0x10000278d900001 # 是一个临时的节点
...
[zk: localhost:2181(CONNECTED) 18] get /hanbao
hanbao
...
numChildren = 1 # 有一个子节点

# 断开当前的session之后,等到心跳的时间过后。你会发现之前创建的临时节点已经没有了
[zk: localhost:2181(CONNECTED) 0] ls /hanbao # 尚在心跳期间
[hanbao1]
[zk: localhost:2181(CONNECTED) 1] get /hanbao
hanbao
...
[zk: localhost:2181(CONNECTED) 3] ls /hanbao
[]

# 创建有序节点数据
[zk: localhost:2181(CONNECTED) 6] create -s /hanbao/hanbao2 seq
Created /hanbao/hanbao20000000001
[zk: localhost:2181(CONNECTED) 7] create -s /hanbao/hanbao2 seq
Created /hanbao/hanbao20000000002
[zk: localhost:2181(CONNECTED) 8] create -s /hanbao/hanbao2 seq
Created /hanbao/hanbao20000000003
[zk: localhost:2181(CONNECTED) 9] ls /hanbao
[hanbao20000000003, hanbao20000000001, hanbao20000000002]

# 修改数据,同时我们使用乐观锁的情况下更新数据,在设置新的值的时候,我们指定在哪个版本的基础上进行设置数据,当我们在修改某一版本数据的时候如果还有人继续的修改此数据,就会有错误的产生
[zk: localhost:2181(CONNECTED) 29] set /hanbao30000000013 32 1 #同时会返回操作后的数据的元数据
...
dataVersion = 2
...
delete
代码语言:javascript
复制
delete /hanbao #如果当前的节点下面存在其他的子节点。那么就会报错
ls /hanbao
delte /hanbao/hanbao20000000003
zookeeper watcher
  1. 针对每一个节点的变化,都会有一个watcher
  2. 当监控的某个对象发生了变化,则触发watcher机制
  3. zK中的watcher是一次性的,触发后立即销毁
  4. 父节点,子节点增删改查都能触发其watcher
zookeeper watcher command
代码语言:javascript
复制
stat /test watch # 创建一个队/test的监控事件
[zk: localhost:2181(CONNECTED) 45] stat /test watch
Node does not exist: /test
[zk: localhost:2181(CONNECTED) 46] create /test data

WATCHER::

WatchedEvent state:SyncConnected type:NodeCreated path:/test
Created /test


[zk: localhost:2181(CONNECTED) 49] get /test/test1 watch
data1
cZxid = 0xbf
ctime = Wed Jul 03 23:23:51 EDT 2019
mZxid = 0xbf
mtime = Wed Jul 03 23:23:51 EDT 2019
pZxid = 0xbf
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 50] set /test/test1 789

WATCHER::

WatchedEvent state:SyncConnected type:NodeDataChanged path:/test/test1
cZxid = 0xbf
ctime = Wed Jul 03 23:23:51 EDT 2019
mZxid = 0xc0
mtime = Wed Jul 03 23:26:09 EDT 2019
pZxid = 0xbf
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0

常见的事件类型:

  1. type:NodeDataChanged
  2. type:NodeCreated
  3. type:NodeDeleted

注意这些事件一旦被触发了,就消失了,再次更新和删除数据的时候就不会触发watcher的事件了

zookeeper ACL权限控制
  1. 针对节点可以设置相关的读写等权限,目的是为了保障数据的安全性
  2. 权限可以指定不同的权限范围以及角色
ACL命令行
  1. getACL
  2. setACL
  3. addauth: 输入认证的的授权信息,输入的时候是明文信息,但是在zookeeper系统里存储的是加密的形式
ACL的构成

zk是通过schema:id:permissions构成,其中schema表示某种权限机制,id表示的是允许用户访问的ID,permission是权限组合的字符串

  • schema
    • world这种schema只有一个用户就是anyone.表示任何人都可以访问
    • auth:代表认证用户。需要注册用户有权限就可以,形式auth:user:password:[permissions]
    • digest:需要对密码加密才能访问,形式digest:username:BASE64(SHA1(password)):[permissions]
    • ip:设置ip为指定的Ip地址,此时限制ip进行访问,比如ip:192.168.99.130:[permissions]
    • suoper:代表超级管理员,拥有所有权限

auth与digest的区别就是前者是输入的明文密码,后者输入的是密文密码。如

代码语言:javascript
复制
setAcl /test auth:cloudnative:ecosystem:cdrwa
||
setAcl /test digest:cloudnative:BASE64(SHA1(ecosystem)):cdrwa
在通过addauth digest cloudnative:ecosystem后都能操作指定节点的权限
permissions的构成crdwa
  1. create #表示的是当前节点的子节点
  2. read # 表示对自身节点的读权限
  3. delete #表示对子节点的删除的权限
  4. admin # 管理员的权限
  5. write # 写权限

一些案例

代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 12] addauth digest test:test
[zk: localhost:2181(CONNECTED) 13] setAcl /home/suoper auth:test:test:cdrwa
Node does not exist: /home/suoper
[zk: localhost:2181(CONNECTED) 14] create /home/suoper suoperdata
Node does not exist: /home/suoper
[zk: localhost:2181(CONNECTED) 15] create /home/ homedata
Command failed: java.lang.IllegalArgumentException: Path must not end with / character
[zk: localhost:2181(CONNECTED) 16] create /home homedata
Created /home
[zk: localhost:2181(CONNECTED) 17] create /home/suoper suoperdata
Created /home/suoper
[zk: localhost:2181(CONNECTED) 18] setAcl /home/suoper auth:test:test:cdrwa
...
aclVersion = 1
[zk: localhost:2181(CONNECTED) 19] getAcl /home/suoper
'digest,'test:V28q/NynI4JI3Rk54h0r8O5kMug=
: cdrwa

当我们重新设置授权之后其密码是不会变化的

代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 21] setAcl /home/suoper auth:jack:jack:cdrwa
...
aclVersion = 2
[zk: localhost:2181(CONNECTED) 22] getAcl /home/suoper
'digest,'test:V28q/NynI4JI3Rk54h0r8O5kMug=
: cdrwa
[zk: localhost:2181(CONNECTED) 23] setAcl /home/suoper auth:jack::cdrwa
...
aclVersion = 3
[zk: localhost:2181(CONNECTED) 24] getAcl /home/suoper
'digest,'test:V28q/NynI4JI3Rk54h0r8O5kMug=
: cdrwa
四种认证方式使用

digest

代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 2] create /home/zookeeper data
Created /home/zookeeper
[zk: localhost:2181(CONNECTED) 3] setAcl /home/zookeeper digest:test:V28q/NynI4JI3Rk54h0r8O5kMug=:crwa
...
aclVersion = 1
[zk: localhost:2181(CONNECTED) 4] getAcl /home/zookeeper
Authentication is not valid : /home/zookeeper
[zk: localhost:2181(CONNECTED) 5] addauth digest test:test
[zk: localhost:2181(CONNECTED) 6] getAcl /home/zookeeper
'digest,'test:V28q/NynI4JI3Rk54h0r8O5kMug=
: crwa

ip

代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 8] create /names data
Created /names
[zk: localhost:2181(CONNECTED) 9] create /names/cloudnative namedata
Created /names/cloudnative
[zk: localhost:2181(CONNECTED) 10] setAcl /names/cloudnative ip:192.168.0.101:crwad
aclVersion = 1
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
[zk: localhost:2181(CONNECTED) 11] getAcl /names/cloudnative
Authentication is not valid : /names/cloudnative
超级管理员密码的设置
  1. 修改zkServer.sh配置,增加suoper用户和密码。在zkServer.sh文件中找到nohup那行,然后修改一下为以下:
代码语言:javascript
复制
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.suoperDigest=test:V28q/NynI4JI3Rk54h0r8O5kMug=" \
    -cp "$CLASSPATH" $JVMFLAGS $ZOOMAIN "$ZOOCFG" > "$_ZOO_DAEMON_OUT" 2>&1 < /dev/null &

以上的 DigestAuthenticationProvider在源码中有一个这样的包名称,包含着一个suoperDigest加密的方法

  1. 重启zookeeper
代码语言:javascript
复制
root@99-129:/usr/local/zookeeper# bin/zkServer.sh --config conf restart
ZooKeeper JMX enabled by default
Using config: conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
  1. 如何获取suoper用户的密码
代码语言:javascript
复制
export ZK_CLASSPATH=/etc/zookeeper/conf/:/usr/hdp/current/zookeeper-server/lib/*:/usr/hdp/current/zookeeper-server/*
java -cp $ZK_CLASSPATH org.apache.zookeeper.server.auth.DigestAuthenticationProvider super:super123
OUTPUT:
super:super123->super:UdxDQl4f9v5oITwcAsO9bmWgHSI=
acl使用的场景
  1. 开发、测试、生产环境之间的隔离,开发者无权操作测试者的节点,只能看
  2. 生产环境上可以控制指定IP的服务可以访问相关的节点,防止混乱,但是不适用于那些使用动态IP的服务

zookeeper的四字命令

  1. 查看zookeeper的服务状态以及mode
代码语言:javascript
复制
root@99-129:/usr/local/zookeeper# echo stat | nc 192.168.99.129 2181 #注意需要在配置文件中开启四字命令
Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT
Clients:
 /192.168.99.129:40650[0](queued=0,recved=1,sent=0)

Latency min/avg/max: 0/0.0/0
Received: 1
Sent: 0
Connections: 1
Outstanding: 0
Zxid: 0x400000000
Mode: follower
Node count: 5
  1. 检查zookeeper服务是否启动
代码语言:javascript
复制
# arok = are you ok?  imok = 😀
# ~# echo ruok | nc 192.168.99.129 2181
imok# ~#
  1. 列出未经处理的会话以及临时节点
代码语言:javascript
复制
[zk: localhost:2181(CONNECTED) 6] create /test1 data
Created /test1
[zk: localhost:2181(CONNECTED) 7] create -e /test1/testtmp da
Created /test1/testtmp

# ~# echo dump | nc 192.168.99.129 2181
SessionTracker dump:
Session Sets (3):
0 expire at Thu Jan 01 06:41:18 EST 1970:
0 expire at Thu Jan 01 06:41:28 EST 1970:
1 expire at Thu Jan 01 06:41:36 EST 1970:
    0x100027515f30000
ephemeral nodes dump:
Sessions with Ephemerals (1):
0x100027515f30000:
    /test1/testtmp
  1. 查看服务器相关的配置
代码语言:javascript
复制
# ~# echo config | nc 192.168.99.129 2181
clientPort=2181
dataDir=/root/workspace/zookeeper/version-2
dataLogDir=/var/log/zookeeper/version-2
tickTime=2000
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
serverId=0
  1. 展示连接到zookeeper服务器的连接信息
代码语言:javascript
复制
# ~# echo cons | nc 192.168.99.129 2181
 /192.168.99.129:58856[0](queued=0,recved=1,sent=0)
 /0:0:0:0:0:0:0:1:56124[1](queued=0,recved=93,sent=93,sid=0x100027515f30000,lop=PING,est=1562248442123,to=30000,lcxid=0x7,lzxid=0xe5,lresp=42154935,llat=1,minlat=0,avglat=0,maxlat=6)
  1. 显示环境变量信息
代码语言:javascript
复制
# ~# echo envi | nc 192.168.99.129 2181
Environment:
...
  1. 展示zk服务的健康信息
代码语言:javascript
复制
# ~# echo mntr | nc 192.168.99.129 2181 # 与遗忘的不同的是,会显示metrics的那些指标数据信息
zk_version    3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
zk_avg_latency    0
zk_max_latency    6
zk_min_latency    0
zk_packets_received    109
zk_packets_sent    108
zk_num_alive_connections    2
zk_outstanding_requests    0
zk_server_state    standalone
zk_znode_count    144
zk_watch_count    0
zk_ephemerals_count    1
zk_approximate_data_size    10282
zk_open_file_descriptor_count    28
zk_max_file_descriptor_count    1048576
zk_fsync_threshold_exceed_count    0
  1. 展示watch的相关信息
代码语言:javascript
复制
# ~# echo wchs | nc 192.168.99.129 2181
0 connections watching 0 paths
Total watches:0

[zk: localhost:2181(CONNECTED) 9] get /zookeeper watch

cZxid = 0x0
ctime = Wed Dec 31 19:00:00 EST 1969
mZxid = 0x0
mtime = Wed Dec 31 19:00:00 EST 1969
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

# ~# echo wchs | nc 192.168.99.129 2181
1 connections watching 1 paths
Total watches:1

# ~# echo wchc | nc 192.168.99.129 2181
wchc is not executed because it is not in the whitelist.
# ~# echo wchp | nc 192.168.99.129 2181
wchp is not executed because it is not in the whitelist.

# echo wchp | nc 192.168.99.129 2181
/zookeeper
    0x100027515f30000

# echo wchs | nc 192.168.99.129 2181
1 connections watching 1 paths
Total watches:1
# echo wchc | nc 192.168.99.129 2181
0x100027515f30000
    /zookeeper

zookeeper基本数据模型介绍

  1. zookeeper是一个树形结构,类似前端开发中的tree.js组件
  2. 类似于Linux的文件系统结构
  3. 每一个节点都称之为znode,他可以有子节点(子节点就相当于父目录下的一个子目录,但是在zookeeper中称之为节点),也可以有数据
  4. 每个节点分为临时节点和永久节点,临时节点在客户端断开后消失
  5. 每个zk节点都有各自的版本号,可以通过命令行来显示节点的信息
  6. 每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)
  7. 删除、修改过时节点,版本号不匹配则删除
  8. 每个zk节点存储的数据不宜过大,几k即可
  9. 节点可以设置权限acl,可以通过权限来限制用户的访问

zookeeper的作用体现

  1. master节点选举,主节点挂了之后,从节点就会接手工作,并且保证这个节点是唯一的,这也是所谓的首脑模式,从而保证我们的集群是高可用的
  2. 统一配置文件管理,机制需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算中用的特别多(假设修改了redis统一配置)
  3. 发布与订阅,类似消息队列MQ(AMQ,RMQ...),DUBBO发布者把数据存在znode上,订阅者会读取这个数据
  4. 提供分布式锁,分布式环境中不同进程之间争夺资源,类似于多线程中的锁
  5. 集群管理,集群中保证数据的强一致性

zookeeper监控

  1. 启用Metrics
代码语言:javascript
复制
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
metricsProvider.httpPort=7000
metricsProvider.exportJvmInfo=true

metrics的端口为7000,路径为:/metircs

代码语言:javascript
复制
root@99-131:/usr/local/apache-zookeeper-3.6.0-bin/logs# curl -I http://192.168.99.129:7000/metrics
HTTP/1.1 200 OK
Date: Mon, 20 Apr 2020 07:35:16 GMT
Content-Type: text/plain; version=0.0.4; charset=utf-8
Content-Length: 29328
Server: Jetty(9.4.24.v20191120)

zookeeper分布式集群部署

  1. zk集群,主从节点,心跳机制(选举模式)
  2. 配置数据文件myid 1/2/3在对应server的数据目录下
  3. 通过./zkCli.sh -server [ip]:[port] 连接到集群,然后进行操作
  4. 查看集群的状态 ./zkServer.sh status

在单机上搭建zk集群(建议在奇数量的主机上部署)

  1. 参考zookeeper基础下载,配置,安装java的基础环境
  2. 复制zookeeper实例为三份,目录名标识开,如zk1,zk2,zk3
  3. 修改三个zookeeper对应的配置文件,注意我们需要在配置文件中指定zk实例在集群中数据的同步端口以及节点之间选举通信的端口

zk1实例的配置文件

  1. 准备配置文件,注意同一主机上运行多个实例,需要修改对应的端口等信息
代码语言:javascript
复制
# cat zoo.cfg  | egrep -v '^#'
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zk1/dataDir
dataLogDir=/usr/local/zk1/dataLogDir
clientPort=2181 # zk1实例运行的端口
4lw.commands.whitelist=* 

server.1=192.168.99.129:2888:3888
server.2=192.168.99.129:2889:3889
server.3=192.168.99.129:2890:3890
  1. 准备myid文件,注意zk1为1,zk2为2,zk3为3
代码语言:javascript
复制
cd /usr/local/zk1/dataDir
echo "1" > ./myid

分别启动zk节点

  1. 启动zk1
代码语言:javascript
复制
/usr/local/zk1/bin/zkServer.sh start
/usr/local/zk2/bin/zkServer.sh start
/usr/local/zk3/bin/zkServer.sh start

验证集群

  1. 随机连入一个zk server实例,创建一个节点
  2. 在其他的节点上查看是否有这个节点,是否可以正常的get到节点的数据

在多主机节点上安装zk集群

1,和单节点上部署zk节点一样,但是有个地方值得注意的是,因为我们现在在多主机节点上部署zk集群,所以不存在多实例运行端口冲突的问题,因此建议将多节点上的zk服务的端口都设置为2181,数据同步端口设置为2888,集群心跳监测端口设置为3888

  1. 注意不同zk服务实例的dataDir目录下的myid文件的值是唯一的

参考

  • 运行一个zookeeper集群:https://zookeeper.apache.org/doc/r3.6.0/zookeeperStarted.html#sc_RunningReplicatedZooKeeper
  • 如何在项目中使用zookeeper:https://github.com/samuel/go-zookeeper
  • zookeeper monitor by itself and read more from: https://github.com/apache/zookeeper/blob/master/zookeeper-docs/src/main/resources/markdown/zookeeperMonitor.md for 3.6+
  • zookeeper exporter: https://github.com/jiankunking/zookeeper_exporter.gitto monitor zookeeper for 3.4+
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生生态圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • zookeeper工作方式
  • zookeeper单独安装
    • zookeeper配置文件说明
      • zkCli之间session的特性
        • zookeeper命令
          • 启动zk服务
          • 基础命令
        • zookeeper的四字命令
          • zookeeper基本数据模型介绍
            • zookeeper的作用体现
              • zookeeper监控
              • zookeeper分布式集群部署
                • 在单机上搭建zk集群(建议在奇数量的主机上部署)
                  • zk1实例的配置文件
                    • 分别启动zk节点
                      • 验证集群
                      • 在多主机节点上安装zk集群
                      • 参考
                      相关产品与服务
                      Prometheus 监控服务
                      Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档