一文简单了解并部署Zookeeper集群

news2024/11/15 13:22:46
  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。
  • 作者:蟹黄瓜子
  • 文章来源:GreatSQL社区投稿

1.Zookeeper概述

Zookeeper对于很多人开始可能都有所耳闻,他的使用场景也很多,可以以节点的形式存储持久化数据,也可以使用这一特性来作为微服务的服务注册中心,简单来说,Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。

Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分布式服务管理框架。是一个文件系统,负责存储和管理大家都关心的数据,然后接受观察者的注册;也是一种通知机制,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。

2.Zookeeper的应用场景和一些注意事项

ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode。每一个 ZNode 默认能够存储 1MB 的数据,每个 ZNode 都可以通过其路径唯一标识。

Zookeeper的应用场景有许多,比如统一的配置管理,在许多分布式环境中,通常一个服务集群的配置文件信息是一致的,如果需要修改配置信息内容,不可能逐个对每个服务做修改,而是希望修改一次配置信息就可以同步给所有服务节点,Zookeeper就可以实现这个业务,十分简单,可以将服务的配置信息写入ZooKeeper上的一个Znode中,让每个集群节点的服务器都去监听这个Znode,一旦数据被修改,ZooKeeper将通知各个服务器,达到同步的效果。还可以做统一的集群管理、服务器的动态上下线、以及软负载均衡的效果。

在实践Zookeeper前还需要注意的内容:

  • Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
  • 集群正常运行的前提条件是集群节点大于半数,因此集群节点数最好采用奇数个。
  • 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
  • 更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。
  • 数据更新原子性,一次数据更新要么成功,要么失败。
  • 实时性,在一定时间范围内,Client能读到最新数据。

3.简单部署Zookeeper集群

官网地址:https://zookeeper.apache.org/,本文采用**VMware**创建3台虚拟机构建集群,**XShell**工具连接虚拟机进行操作:

首先为机子安装jdk,采用yum源安装,注意设置yum,静等安装成功出现“Complete”即可:

[root@localhost ~]# yum install -y java-1.8.0-openjdk.x86_64
  • 进入/usr/local/目录,将提前准备好的“zookeeper-3.4.5.tar.gz”文件传入目录,并解压:
[root@localhost ~]# cd /usr/local/
[root@localhost local]# tar zxvf zookeeper-3.4.5.tar.gz 
  • 修改文件名为“zookeeper”:
[root@localhost local]# mv zookeeper-3.4.5 zookeeper
  • 修改环境变量:
[root@localhost local]# vi /etc/profile
# 进入insert模式后在上方添加一下内容后保存退出
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin
  • 重新编译“/etc/profile”:
[root@localhost zookeeper]# source /etc/profile
  • 进入conf目录下,将“zoo_sample.cfg”拷贝生成“zoo.cfg”文件作为zookeeper的配置文件:
[root@localhost zookeeper]# cd conf/
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg 
  • 修改“zoo.cfg”文件:

    • 配置文件中主要要配置数据存放路径和日志路径,zookeeper默认的数据存放路径为"dataDir=/tmp/zookeeper",为临时数据,会过期,本文将重新指定相关位置,存放在“自己”的路径下,当然也可以根据需要建立单独路径进行存放。
# 将配置文件中的dataDir替换为此路径
dataDir=/usr/local/zookeeper/data
# 在配置文件中添加以下配置,ip地址根据规划
# 其中server.1代表集群的第几胎集群,后续会配置myid文件,myid文件内容和对应的数字保存一致,例如1.131这台机器myid就是1
# ip地址为集群的三台机器,也可以配置host使用主机名,两个端口号心跳端口和数据端口
dataLogDir=/usr/local/zookeeper/log
server.1=192.168.1.11:2888:3888
server.2=192.168.1.12:2888:3888
server.3=192.168.1.13:2888:3888
  • 简单解释下集群配置:

    • server.A=B:C:D
    • A 是一个数字,表示这个是第几号服务器;集群模式下配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面有一个数据就是 A 的值,Zookeeper 启动时读取此文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是哪个 server。
    • B 是这个服务器的地址;
    • C 是这个服务器 Follower 与集群中的 Leader 服务器交换信息的端口;
    • D 是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
  • 回到”zookeeper“目录下,创建配置文件中提到的两个路径并赋予权限:

[root@localhost conf]# cd ..
[root@localhost zookeeper]# mkdir -m 755 data
[root@localhost zookeeper]# mkdir -m 755 log
  • 来到“data/”路径下,创建myid文件,并给相应值1
[root@localhost zookeeper]# cd data/
[root@localhost data]# vi myid
  • 此刻对于集群节点的第一台机器就配置完成了,另外两台机器需要在准备好环境并设置好环境变量的前提下进行
  • 通过第一台机器将配置好的zookeeper及集群配置下发到另外两台机器上,注意修改对应机器的myid:
[root@localhost data]# scp -r /usr/local/zookeeper root@192.168.1.12:/usr/local/
[root@localhost data]# scp -r /usr/local/zookeeper root@192.168.1.13:/usr/local/
  • 修改myid值为2和3后,集群部署完毕。
  • 进入到01机器的zookeeper目录下,启动zookeeper:
[root@localhost zookeeper]# bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost zookeeper]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.
  • 此时集群没办法起来,因为目前只有一个节点开启
  • 当第二台启动以后,集群节点超过半数,第二台机器就会选举成为leader
[root@localhost zookeeper]# bin/zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@localhost zookeeper]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader
[root@localhost zookeeper]# 
  • 第一台就变成follower了
[root@localhost zookeeper]# bin/zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: follower
  • 开启第三台后,第二台机器已经是leader了,除非机器宕机会触发重新选举
  • 关于zookeeper的操作可以通过启动启动客户端:
[root@localhost zookeeper]# bin/zkCli.sh

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] 
  • 至此测试完成,zookeeper集群部署完毕,更多zookeeper操作可以参照zookeeper官方文档。

Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

捉虫活动详情:https://greatsql.cn/thread-97-1-1.html

社区博客有奖征稿详情:https://greatsql.cn/thread-100-1-1.html

6440

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

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

相关文章

基于Java+SpringBoot+vue+element实现爱心捐赠平台系统

基于JavaSpringBootvueelement实现爱心捐赠平台系统 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码…

排他思想的运用

思路简述 需求:桌子上有一排灯,点哪个亮哪个,但是要求每次只能点亮一盏。如果不使用排他思想,操作过程如下: 第一次打开一盏灯,记为 A,记录下来。第二次打开灯之前,先去找记录&…

[cpp进阶]C++智能指针

文章目录为什么需要智能指针?智能指针的原理及使用智能指针的原理智能指针的使用C中的智能指针C智能指针的发展历程std::auto_ptrstd::auto_ptr的使用std::auto_ptr的模拟实现std::unique_ptrstd::unique_ptr的使用std::unique_ptr的模拟实现std::shared_ptrstd::shared_ptr的…

Springboot @InitBinder处理from-data表单传参,指定参数默认新增前缀

前言 有兄弟突然找到我,江湖救急,我以为是啥问题呢? 一看这位小兄弟也是半路出家, 没有对springboot的常用注解有过研究。 不过没大碍,还是那句话, 学习的事情,只有先知和后知 现在你看完这篇…

纳米软件分享:光伏逆变器ATE测试系统,逆变器测试解决方案

光伏并网逆变器(以下简称“逆变器”)是光伏发电系统的核心部件之一,其主要功能是将光伏阵列的直流逆变为符合电网接入要求的交流电并入电网。并网逆变器ATE测试平台,主要是模拟光伏阵列特性输入的直流电源、模拟电网电源、系统控制…

Java垃圾分类查询管理系统源码+数据库,基于SpringBoot+mybatis-plus,垃圾分类查询及预约上门回收

垃圾分类查询管理系统 完整代码下载地址:Java垃圾分类查询管理系统源码数据库 1.介绍 垃圾分类查询管理系统,对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾, 按国家标准自己分类, 然后在网上提交订…

java学习之main方法

目录 一、main方法的注意事项 二、在IDEA中传入参数 一、main方法的注意事项 形式:public static void main(String[] args){},main方法是一个静态方法,访问修饰符是:public,形参是String数组 args 注意事项&#xf…

go语言--函数

package mainimport "fmt"func main(){//功能: 10 20var num1 int 10var num2 int 20var sum int 0sum num1sum num2fmt.Println(sum) }为什么使用函数 提高代码的复用性,减少代码冗余, 代码维护性也提高了 函数的定义 为完成摸一个功能的程序指令(…

IRCNN-FPOCS 文章解读

1、论文概述 1)待解决的问题:地震道数据缺失(野外地震数据的质量往往受到地质环境或设备参数的影响,这些数据可能在空间上不连续,导致地震痕迹缺失,也称为下采样观测) 2)目的&…

从菜鸟到团队协同大神:产品经理工具技能修炼

现在,自雇人士和自由职业者越来越普遍。受环境影响,员工们正在放弃朝九晚五的工作,转而采用更灵活的远程工作,另一方面,随着办公数字化转型、远程办公的需求强烈、在线协协同管理工具飞项等一批知名互联网工具如雨后春…

c#入门-捕获变量

局部变量捕获 局部函数,匿名函数,可以直接在函数体内使用局部变量。 如果作为委托使用,传递给别人。可能在别人使用委托的时候,这些局部变量的作用域就已经消失了。 因此,编译器会对这些变量做出特殊的操作&#xff…

优维低代码:I18n 国际化

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 连载…

第8季3:使用字库字符实现区域显示

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、代码框架分析 在第8季2:OSD实验演示与代码分析中,我们分析了SAMPLE_RGN_CreateVideoRegion函数,该函数完成了左下角的logo区域显示、右下角的时间区域显示&a…

Ubuntu18.04安装教程

Ubuntu18.04安装教程# 阿里云源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates ma…

【Vue+Springboot】综合程序设计后端部分实现(含跨越访问)

文章目录1、功能展示2、前端部分:VueAPI3、后端部分:Springboot1、功能展示 大致分为用户管理,商品管理,收藏管理,购物车管理,订单管理五个模块。 2、前端部分:VueAPI Vue 使用 axios 库进行网…

如何在Unity中实现MVC模式?

MVC是什么? ​ MVC即Model View Controller,是模型(model)【数据层】-视图(view)【表现层】-控制器(controller)【逻辑层】的缩写。主要应用于网站开发,在游戏开发方面,因为不同游戏的需求、功能不尽相同&…

数字化转型迫在眉睫,企业应该如何面对?

火热的数字化转型,在国企、央企公布数字化转型规划后,进一步向各行各业开始扩散,吸引了很多对于数字化并不熟悉的企业。这些企业大多没有一个确定的目标,只是想要让企业完成转型改革,所以对于怎样做没有什么好的规划。…

Unity3d C#实现基于SocketIOUnity的与后端(node.js为例)Socket通信功能(含工程)

#前言 该功能主要是项目上的需求,按后端的需求就是我们通过SocketIO进行通信,之前游戏通信功能大多是基于原始的Socket进行封装,需要对包体进行设计,还需要粘包拆包等系列操作,属实有点麻烦。这次尝试了SocketIOUnity的…

Exynos_4412——RTC实验

目录 一、ADC小作业 二、RTC简介 三、Exynos_4412下的RTC控制器 四、RTC中的寄存器 五、RTC编程 六、RTC小作业 一、ADC小作业 电压在1501mv~1800mv时,LED2、LED3、LED4、LED5点亮 电压在1001mv~1500mv时,LED2、LED3、LED4点亮 电压在501mv~1000m…

什么是芯片老化测试?芯片老化测试系统NSAT-2000解决方案

随着半导体电子技术的进步,老化测试已成为保证产品质量的关键流程。除了半导体元件外,PCB、IC 和处理器部件也都需要在老化条件下进行测试。本篇文章纳米软件Namisoft小编将带大家分享一下关于芯片老化测试系统的相关知识。 一、什么是芯片老化测试&…