8

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

 1 year ago
source link: https://www.51cto.com/article/743693.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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

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 [email protected]:/usr/local/
[root@localhost data]# scp -r /usr/local/zookeeper [email protected]:/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官方文档。
责任编辑:武晓燕 来源: GreatSQL社区

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK