阿里云服务器上部署zookeeper 3.6.3(1)- 简介篇

本文介绍了ZooKeeper,一款由雅虎开发的开源分布式协调服务。它简化了分布式系统中常见的复杂任务,如数据发布/订阅、负载均衡及集群管理等。ZooKeeper提供了简单易用的API,确保数据的一致性和可靠性。

zookeeper是什么?

zookeeper是一个开放源代码的分布式协调服务是雅虎创建,是Google Chubby的开源实现。

设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使

用。

有哪些功能

zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于zookeeper实现数据发布/订阅、负载均衡,命名服

务,分布式协调/通知,集群管理,Master选举,分布式锁和分布式队列等功能。

zookeeper可以保证如下分布式一致性特性:

  • 顺序一致性:从同一客户端发起的请求,最终将会严格按照其发起顺序被应用到zookeeper中。

  • 原子性:所有的事务请求结果在整个集群中所有机器上的应用情况是一致的。不会出现集群中部分机器应用了该事务,而另一部分没用应用的情况。

  • 单一视图:无论客户端连接那个zookeeper服务器,看到的服务器数据模型是一致的。

  • 可靠性:一旦服务器成功地应用了一个事务,并完成对客户端的响应,那么该事务引起的服务端状态变更将会一直保留下来,除非有另一个事务对其进行变更。

  • 实时性:zookeeper仅仅保证在一定时间段内,客户端最终一定能够从服务端上读取到最新的数据状态。

zookeeper的设计目标

zookeeper致力于提供一个高性能、高可用,且具有严格的顺序访问控制能力的分布式协调服务。

  • 目标一:简单的数据模型 zookeeper使得分布式程序能够通过一个共享的、树型结构的名字空间来进行相互协调。

  • 目标二:可以构建集群 一个zookeeper集群通常由一组机器组成。 组成zookeeper集群的每台机器都会在内存中维护当前的服务器状态,并且每一台机器之间都互相保持通信。只要集群中超过一半机器正常工作,那么整个集群就能够正常对外服务。

  • 目标三:顺序访问 对于来自客户端的每个更新请求,zookeeper都会分配一个全局的递增编号,来反映所有事务操作的顺序,应用程序可以使用zookeeper的这个特性来实现更高层次的同步原语。

  • 目标四:高性能 zookeeper将全量数据存储在内存中,并直接服务于客户端的所有的非事务请求,因此zookeeper尤其适用以读操作为主的应用场景。

Zookeeper数据模型

如果我们把zookeeper当成是一个内存数据库的话,那么crud就是对zookeeper内存数据库进行一个数 据的增删改查操作,那zookeeper的数据结构是什么样的呢?如图所示,zookeeper的视图结构和标 准的文件系统非常类似,每一个节点称之为ZNode, 是zookeeper的最小单元。每个znode上都可以保 存数据以及挂载子节点,构成一个层次化的树形结构

img

节点类型

Zookeeper中包含4种类型的节点,分别说明如下。

持久化节点

持久化节点可以细分为两种节点,分别是:

PERSISTENT:持久化,不会随客户端的断开而自动删除,默认类型

 

PERSISTENT_SEQUENTIAL:带序号的持久化,znode的名字将被附加一个单调递增的数字

 

临时节点

EPHEMERAL:临时节点,当客户端断开时自动删除,如图9-6所示,如果该Client创建了/Server1 和/Server2这两个节点,当Client的session断开后,这两个节点会被Zookeeper自动删除。

 

EPHEMERAL_SEQUENTIAL:带序号的临时节点,znode的名字将被附加一个单调递增的数字, 如图9-7所示 注意,临时节点不能存在子节点

 

Container节点

CONTAINER:container节点是一个特殊用途的节点,它是为Leader、Lock等操作而设计的节点 类型,它的作用是: 当容器节点的最后一个子节点被删除后,容器节点将会被标注并且在一段时 间后删除 。

由于容器节点存在这个特性,所以当我们在容器节点下创建一个子节点时,需要捕获 KeeperException.NoNodeException异常,如果捕获到这个异常,就需要重新创建容器节点。

TTL节点

如果某个节点设置为TTL节点类型,那么这个节点在指定TTL时间(单位为毫秒)段内没有修改并且没有 子节点时,该节点会在一段时间后被删除。

PERSISTENT_WITH_TTL:zookeeper的扩展类型,如果znode在给定的TTL内没有被修改,它将 在没有子节点时被删除。要想使用该类型,必须在zookeeper的bin/zkService.sh中的启动 zookeeper的java环境中设置环境变量zookeeper.extendedTypesEnabled=true(具体做法在下 边),否则KeeperErrorCode = Unimplemented for /**。

设置zookeeper.extendedTypesEnabled=true

打开zookeeper bin/zkServer.sh(win是zkService.cmd),修改启动zookeeper的命令,加上Dzookeeper.extendedTypesEnabled=true,也就是设置java的一个环境变量。

 

PERSISTENT_SEQUENTIAL_WITH_TTL:同上,是不过是带序号的。

常用命令

\1. 启动ZK服务:

bin/zkServer.sh start

\2. 查看ZK服务状态:

bin/zkServer.sh status

\3. 停止ZK服务:

bin/zkServer.sh stop

\4. 重启ZK服务:

bin/zkServer.sh restart

\5. 连接服务器

zkCli.sh -timeout 0 -r -server ip:port

每天努力一点,每天都在进步。

阿里云服务器上配置 Zookeeper 可按以下步骤进行: ### 下载与上传 可以使用指令 `wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.1/apache-zookeeper-3.7.1-bin.tar.gz` 下载,若此指令下载失败,可考虑本地下载后远程上传,例如通过 Winscp 连接阿里云服务器,将本地下载好的 Zookeeper 压缩包传送到 `/usr` 目录下 [^3][^5]。 ### 解压与重命名 在云服务控制台终端处对压缩包进行解压,并对解压后的文件夹进行重命名 [^3]。 ### 配置文件 复制相关文件并改名为 `zoo.cfg`,在 Zookeeper 目录下新建 `data` 和 `logs` 文件夹。在 `zoo.cfg` 中进行如下基本配置: ```plaintext tickTime=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper clientPort=2181 dataDir=/opt/module/zookeeper-3.5.7/zkData ``` 如果是配置集群,还需添加如下集群配置: ```plaintext # 这里的 server1,server2,server3阿里云服务器的内网地址 # 在 /etc/hosts 文件中配置 # xxx.xxx.xxx.xxx server1 # xxx.xxx.xxx.xxx server2 # xxx.xxx.xxx.xxx server3 # 在这里就能用 server1 了 server.2=server1:2888:3888 server.3=server2:2888:3888 server.4=server3:2888:3888 ``` 注:服务器一共三台,其他两台的 Zookeeper 配置一样 [^2]。 ### 配置环境变量 进入相关配置文件,在最后面加入 Zookeeper 路径 [^3]。 ### 模拟多台服务器(可选) 若要模拟多台服务器,可在服务器创建路径(三个路径分别模拟三台服务器): ```plaintext /user/local/zookeeper-cluster/zookeeper-1 /user/local/zookeeper-cluster/zookeeper-2 /user/local/zookeeper-cluster/zookeeper-3 ``` [^1] ### 本地连接配置 1. 配置 `yml` 文件,设置 `connect-string: 39.101.70.108:2181`,并保证该 IP(购买的阿里云服务器公网 IP)在本地命令行窗口能够 `ping` 通。 2. 打开 Zookeeper 客户端:`zkCli.sh`,打开连接后,使用 `ls/` 查看根目录,使用 `ls /services` 查看注册的服务,如果本地项目打开,则能够看到注册的服务名称。 3. 注意在服务器安全组中配置规则,允许 2181 端口任意对象 `0.0.0.0/0` 访问,优先级 100,且一定要用云服务器的外网 IP [^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

powerfuler

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值