Zookeeper-快速入门、服务搭建、集群搭建教程

官网:https://zookeeper.apache.org/

zookeeper常用用途:

  • 集群管理,zookeeper作为注册中心,管理服务提供方的ip地址端口号url信息,并在服务消费方请求需要时发送给服务消费方。
  • 配置中心(不过一般用阿波罗apollo或者阿里的Nacos来做)
    • 多个app中的配置是从zookeeper中拉取配置,而不是一个个去手动修改。
    • 消费端从服务端中关注某个ZNode,一旦节点发生数据变更,服务端会向消费端发送Watcher事件进行通知,消费端接受事件后,主动到服务端获取最新的配置数据。
  • 分布式锁
  • 等待

安装

前提:安装zookeeper需要的JDK版本,这里装的是openjdk-8

apt install openjdk-8-jdk

复制示例配置文件zoo_simple.conf到confg/zoo.cfg

cp confg/zoo_simle.conf confg/zoo.cf

修改配置文件,修改如下:(主要修改数据的保存目录,其他看自己的需求修改)

# 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=/apps_data/zookeeper**
# 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

通过自带的脚本启动zookeeper

# 查看帮助
root@swq-virtual-machine:/apps/zookeeper-3.4.13# bash bin/zkServer.sh --help
ZooKeeper JMX enabled by default
Using config: /apps/zookeeper-3.4.13/bin/../conf/zoo.cfg
Usage: bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}# 启动服务
root@swq-virtual-machine:/apps/zookeeper-3.4.13# bash bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /apps/zookeeper-3.4.13/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED# 查看2181端口是否监听成功
root@swq-virtual-machine:/apps/zookeeper-3.4.13# ss -tanl
State             Recv-Q            Send-Q                         Local Address:Port                          Peer Address:Port            Process            
LISTEN            0                 4096                           127.0.0.53%lo:53                                 0.0.0.0:*                                  
LISTEN            0                 128                                  0.0.0.0:22                                 0.0.0.0:*                                  
LISTEN            0                 128                                127.0.0.1:631                                0.0.0.0:*                                  
LISTEN            0                 4096                               127.0.0.1:2379                               0.0.0.0:*                                  
LISTEN            0                 4096                               127.0.0.1:2380                               0.0.0.0:*                                  
LISTEN            0                 50                                         *:46069                                    *:*                                  
LISTEN            0                 128                                     [::]:22                                    [::]:*                                  
LISTEN            0                 128                                    [::1]:631                                   [::]:*                                  
LISTEN            0                 50                                         *:2181                                     *:*     

客户端

官方命令行客户端zkCli.sh

bash bin/zkCli.sh[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd argsstat path [watch]set path data [version]ls path [watch]delquota [-n|-b] pathls2 path [watch]setAcl path aclsetquota -n|-b val pathhistory redo cmdnoprintwatches on|offdelete path [version]sync pathlistquota pathrmr pathget path [watch]create [-s] [-e] path data acladdauth scheme authquit getAcl pathclose connect host:port
[zk: localhost:2181(CONNECTED) 1] 

图形化Ui客户端-ZooInspector

老古董,不过实用!没有啥界面之说…

图形化Ui客户端-ZKUI

界面也挺好看的…不过也挺久没有更新了

https://github.com/DeemOpen/zkui

图形化UI客户端-PrettyZoo

比较新,界面好看

https://github.com/vran-dev/PrettyZoo

集群

集群理论

集群角色分类

  • leader领导者(就是master主)
  • flowller追随者(也就是slave从)
  • observer观察者,不参与leader选举,也不参与【过半写成功】策略。只用于读数据,提高读性能。【一般不怎么用】

**过半写成功策略:**当某个数据被写入时,集群中一半以上的节点数据写成功就表示这个数据已经成功写入,然后响应返回给客户端,用于提升响应速度。

Zookeeper集群中的所有机器通过Leader选举来选定⼀台被称为Leader的机器,Leader服务器为客户端提供读和写服务,除Leader外,其他机器包括Follower和Observer,Follower和Observer都能提供读服务,唯⼀的区别在于Observer不参与Leader选举过程,不参与写操作的过半写成功策略,因此Observer可以在不影响写性能的情况下提升集群的性能。

集群读写的方式

读:任意节点都可以
写:只有leader节点可以,如果往非leader节点写,会自动转发给leader写入,然后再同步给其他非leader节点

集群搭建

实验环境

# 由于我没啥硬件资源,全部都放在同一台虚拟机上,然后用不同的端口模拟实现集群。
# 生产环境肯定是放在不同的物理机上的。
zk1 -> 192.168.6.130: 2181
zk2 -> 192.168.6.130: 2182
zk3 -> 192.168.6.130: 2183

修改配置文件中的端口和数据存储目录

# 由于是放同一个服务器上用不同的端口实现伪集群,因此这里只需要添加2个额外的配置文件即可。# zk2 配置文件(zoo2.cfg)
# 这里需要修改,指定存储数据的目录
dataDir=/apps_data/zookeeper2
# the port at which the clients will connect
clientPort=2182# zk3 服务(zoo3.cfg)
# 这里需要修改,指定存储数据的目录
dataDir=/apps_data/zookeeper3
# the port at which the clients will connect
clientPort=2183

停止之前的zk1服务

bash zkServer.sh stop

在每个zk服务器的【数据目录】下添加myid文件,并且内容必须时每个服务器都时唯一的ID

# 我这里就用1、2、3来区分了
echo 1 > /apps_data/zookeeper/myid
echo 2 > /apps_data/zookeeper2/myid
echo 3 > /apps_data/zookeeper3/myid

再次编辑每个zk服务的配置文件,将需要组成集群的zk服务器ip端口等信息添加

# zk1、zk2、zk3的配置文件,添加以下内容
# 格式: server.服务器唯一ID=服务器IP:数据同步端口:leader选举端口
#      服务器唯一ID,是上面步骤中向【数据目录】写入myid文件中内容
server.1=192.168.6.130:2888:3888
server.2=192.168.6.130:2888:3888
server.3=192.168.6.130:2888:3888# zk2和zk3配置文件添加的内容相同。
# 由于,我是同一个服务器上部署,所以端口就不一致了,生产环境可以直接用上面的配置
# 示例:
root@swq-virtual-machine:/apps/zookeeper-3.4.13# cat <<EOF>> ./conf/zoo.cfg
# cluster config
server.1=192.168.6.130:2888:3888
server.2=192.168.6.130:2889:3889
server.3=192.168.6.130:2887:3887
EOF

启动3台服务器:

root@swq-virtual-machine:/apps/zookeeper-3.4.13# bash bin/zkServer.sh start conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: conf/zoo.cfg
Starting zookeeper ... ^[[A^[[DSTARTED
root@swq-virtual-machine:/apps/zookeeper-3.4.13# bash bin/zkServer.sh start conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: conf/zoo2.cfg
Starting zookeeper ... STARTED
root@swq-virtual-machine:/apps/zookeeper-3.4.13# bash bin/zkServer.sh start conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: conf/zoo3.cfg
Starting zookeeper ... STARTED

用jps查看zookeeper是否启动(用于查看当前系统上的java虚拟机):

root@swq-virtual-machine:/apps/zookeeper-3.4.13# jps
29360 QuorumPeerMain
29443 Jps
29332 QuorumPeerMain
29402 QuorumPeerMain

查看端口:

root@swq-virtual-machine:/apps/zookeeper-3.4.13# ss -tanl
State            Recv-Q           Send-Q                               Local Address:Port                        Peer Address:Port           Process           
...省略其他的                               
LISTEN           0                50                                               *:2181                                   *:*                                
LISTEN           0                50                                               *:2182                                   *:*                                
LISTEN           0                50                                               *:2183                                   *:*                                
LISTEN           0                50                                               *:37447                                  *:*                                
LISTEN           0                50                          [::ffff:192.168.6.130]:2888 (被选为leader的服务才会监听【数据同步端口】)                                  *:*                                
LISTEN           0                50                                               *:38731                                  *:*                                
LISTEN           0                50                          [::ffff:192.168.6.130]:3887                                   *:*                                
LISTEN           0                50                                               *:40687                                  *:*                                
LISTEN           0                50                          **[::ffff:192.168.6.130]:3888  **                                 *:*                                
LISTEN           0                50                          [::ffff:192.168.6.130]:3889                                   *:*注意:(被选为leader的服务才会监听【数据同步端口】,因为其他follwer是通过该端口与leader同步数据的。)     

查看zookeeper状态:

root@swq-virtual-machine:/apps/zookeeper-3.4.13# bash bin/zkServer.sh status conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: conf/zoo3.cfg
Mode: follower
root@swq-virtual-machine:/apps/zookeeper-3.4.13# bash bin/zkServer.sh status conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: conf/zoo2.cfg
Mode: follower
root@swq-virtual-machine:/apps/zookeeper-3.4.13# bash bin/zkServer.sh status conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: conf/zoo.cfg
Mode: leader

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【重点】【DP】1143.最长公共子序列|516.最长回文子序列

两个求解代码类似的题目&#xff0c;对比记忆&#xff01;&#xff01;&#xff01; 1143.最长公共子序列 题目 法1&#xff1a;DP&#xff0c;考虑空串 class Solution {public int longestCommonSubsequence(String text1, String text2) {int m text1.length() 1, n …

AUTOSAR从入门到精通-诊断事件管理模块(DEM)(一)

目录 前言 几个高频面试题目 DEM和DET模块的区别 原理 Dem模块功能

Keil编译STM32工程,提示__align(4)处语法错误

好久没有用Keil编程&#xff0c;因为别人的代码是用Keil写的&#xff0c;所以又得安装起来&#xff0c;编译时遇到__align(4)的错误提示。 这个问题主要是编译器版本的问题&#xff0c;默认使用的是v6.19版本的编译器&#xff0c;而工程原来使用的是v5版本的&#xff0c;两个编…

探索 Vuex 的世界:状态管理的新视角(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

简易版chalk

简易版chalk 参考文档 chalk/chalk: &#x1f58d; Terminal string styling done right (github.com) 【MINI 系列】五颜六色的控制台) ANSI转义序列 - 维基百科&#xff0c;自由的百科全书 (wikipedia.org) “ANSI 转义序列&#xff08;ANSI escape sequences&#xff09;…

华为OD机试 - 小朋友来自多少小区(Java JS Python C)

题目描述 幼儿园组织活动,老师布置了一个任务: 每个小朋友去了解与自己同一个小区的小朋友还有几个。 我们将这些数量汇总到数组 garden 中。 请根据这些小朋友给出的信息,计算班级小朋友至少来自几个小区? 输入描述 输入:garden[] = {2, 2, 3} 输出描述 输出:7 备…

LangChain - 02 - 快速开始之模型提示和解析

参考 LangSmith Many of the applications you build with LangChain will contain multiple steps with multiple invocations of LLM calls. As these applications get more and more complex, it becomes crucial to be able to inspect what exactly is going on inside …

轻度听力损失的儿童需要早期干预吗?

一些宝宝在做听力筛查时总是不通过&#xff0c;进一步听力诊断发现宝宝有轻度的听力损失&#xff0c;刚知道这个消息时&#xff0c;家长可担心了&#xff0c;总想着宝宝是不是听不到啊&#xff1f;但是一段时间后&#xff0c;有些家长又会忽略宝宝的听力问题&#xff0c;因为部…

【记录版】SpringBoot常见配置项及其配置文件(持续更新...)

主题&#xff1a;SpringBoot Configuration 背景&#xff1a; SpringBoot作为整合框架&#xff0c;涉及到非常多的模块的配置&#xff0c;有时需要知道对应模块有哪些配置&#xff0c;做一些针对性的优化&#xff0c;但往往忘记其配置解析入口在哪。本篇仅做个人记录用&#…

ES 错误码

2xx状态码&#xff08;如200&#xff09;表示请求成功处理&#xff0c;并且不需要重试。 400状态码表示客户端发送了无效的请求&#xff0c;例如请求的语法有误或缺少必需的参数。在这种情况下&#xff0c;重试相同的请求很可能会导致相同的错误。因此&#xff0c;应该先检查并…

探索 Vuex 的世界:状态管理的新视角(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

go grpc-go 连接变动,导致全服 gRPC 重连 BUG 排查

问题描述 项目中遇到一个问题&#xff0c;每当有节点变更时&#xff0c;整个 gRPC 网络连接会重建 然后我对该问题做了下排查 最后发现是 gRPC Resolver 使用上的一个坑 问题代码 func (r *xxResolver) update(nodes []*registry.Node) {state : resolver.State{Addresses…

PyQt6 QColorDialog颜色对话框控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计50条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

基于SSM框架的电脑测评系统论文

基于 SSM框架的电脑测评系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;作为一个一般的用户都开始注重与自己的信息展示平台&#xff0c;实现基于SSM框架的电脑测评系统在技术上已成熟。本文介绍了基于SSM框架的电脑测评系统的开发全过程。通过分析用户对于…

大数据HCIE成神之路之数据预处理(3)——数值离散化

数值离散化 1.1 无监督连续变量的离散化 – 聚类划分1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 无监督连续变量的离散化 – 等宽划分1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实…

Open5GSUeRANSim2:对安装在同一个VM上的OPEN5GS和UERANSIM进行配置和抓取wireshark报文

参考链接&#xff1a; Configuring SCTP & NGAP with UERANSIM and Open5GS on a Single VM for the Open5GS & UERANSIM Series https://www.youtube.com/watch?vINgEX5L5fkE&listPLZqpS76PykwIoqMdUt6noAor7eJw83bbp&index5 Configuring RRC with UERANSI…

泛微e-cology XmlRpcServlet文件读取漏洞复现

漏洞介绍 泛微新一代移动办公平台e-cology不仅组织提供了一体化的协同工作平台,将组织事务逐渐实现全程电子化,改变传统纸质文件、实体签章的方式。泛微OA E-Cology 平台XmRpcServlet接口处存在任意文件读取漏洞&#xff0c;攻击者可通过该漏洞读取系统重要文件 (如数据库配置…

fastadmin表格右侧操作栏增加审核成功和审核失败按钮,点击提交ajax到后端

fastadmin表格右侧操作栏增加审核成功和审核失败按钮,点击提交ajax到后端 效果如下 js {field: operate, title: __(Operate), table: table, events

安装Neo4j

jdk1.8对应的neo4j的版本是3.5 自行下载3.5版本的zip文件 地址 解压添加环境变量 变量名&#xff1a;NEO4J_HOME 变量值&#xff1a;D:\neo4j-community-3.5.0 &#xff08;你自己的地址&#xff09; PATH添加&#xff1a; %NEO4J_HOME%\bin (如果是挨着的注意前后英…

Linux c++开发-11-Socket TCP编程简单案例

服务端&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <sys/types.h>#include <errno.h>int main(void) {//1.socketint server_sock socket(A…