Linux下安装Zookeeper环境

目录

一、概述

二、Zookeeper的数据结构

三、Zookeeper特点

四、Linux下搭建Zookeeper环境

五、总结


 

一、概述

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能、高可用、且具有严格顺利访问控制能力的分布式协调存储服务。

Zookeeper 官网地址:https://zookeeper.apache.org/

ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

主要应用场景:

  • 维护配置信息

Java编程经常会遇到配置项,比如数据库的url、schema、user和password等。通常这些配置项我们会放置在配置文件中,在将配置文件放置在服务器上当需要更改配置项时,需要去服务器上修改对应的配置文件。但是随着分布式系统的兴起,由于许多服务都需要使用到该配置文件,因此有必须保证该配置服务的高可用性(high availability)和各台服务器上配置数据的一致性。通常会将配置文件部署在一个集群上,然而一个集群动辄上千台服务器,此时如果再一台台服务器逐个修改配置文件那将是非常繁琐且危险的的操作,因此就需要一种服务,能够高效快速且可靠地完成配置项的更改等操作,并能够保证各配置项在每台服务器上的数据一致性。

Zookeeper就可以提供这样一种服务,其使用Zab这种一致性协议来保证一致性。现在有很多开源项目使用zookeeper来维护配置。在开源的消息队列kafka中,也使用zookeeper来维护broker的信息。在alibaba开源的soa框架dubbo中也广泛的使用zookeeper管理一些配置来实现服务治理。

如下图所示:

  • 分布式锁服务

一个集群是一个分布式系统,由多台服务器组成。为了提高并发度和可靠性,多台服务器上运行着同一种服务。当多个服务在运行时就需要协调各服务的进度,有时候需要保证当某个服务在进行某个操作时,其他的服务都不能进行该操作,即对该操作进行加锁,如果当前机器挂掉后,释放锁并fail over 到其他的机器继续执行该服务。

  • 集群管理

一个集群有时会因为各种软硬件故障或者网络故障,出现某些服务器挂掉而被移除集群,而某些服务器加入到集群中的情况,zookeeper会将这些服务器加入/移出的情况通知给集群中的其他正常工作的服务器,以及时调整存储和计算等任务的分配和执行等。此外zookeeper还会对故障的服务器做出诊断并尝试修复。

  • 分布式唯一ID生成

在过去的单库单表型系统中,通常可以使用数据库字段自带的auto_increment属性来自动为每条记录生成一个唯一的ID。但是分库分表后,就无法在依靠数据库的auto_increment属性来唯一标识一条记录了。此时我们就可以用zookeeper在分布式环境下生成全局唯一ID。做法如下:每次要生成一个新Id时,创建一个持久顺序节点,创建操作返回的节点序号,即为新Id,然后把比自己节点小的删除即可。

二、Zookeeper的数据结构

zookkeeper 提供的名称空间非常类似于标准文件系统,key-value 的形式存储。名称 key 由斜线 / 分割的一系列路径元素,zookeeper 名称空间中的每个节点都是由一个路径标识。

  • 特点

在Zookeeper中,znode是一个跟Unix文件系统路径相似的节点,可以往这个节点存储或获取数据。如果在创建znode时Flag设置为EPHEMERAL(即表示临时节点),那么当创建这个znode的节点的客户端和Zookeeper服务端断开连接后,这个znode将不再存在在Zookeeper里,Zookeeper使用Watcher监听事件信息。当客户端接收到事件信息,比如连接超时、节点数据改变、子节点改变,可以调用相应的行为来处理数据。

三、Zookeeper特点

  • 高性能

zooKeeper将全量数据存储在内存中,并直接服务于客户端的所有非事务请求,尤其适用于以读为主的应用场景。

  • 高可用

zooKeeper一般以集群的方式对外提供服务,一般3 ~ 5台机器就可以组成一个可用的Zookeeper集群了,每台机器都会在内存中维护当前的服务器状态,并且每台机器之间都相互保持着通信。只要集群中超过一半的机器都能够正常工作,那么整个集群就能够正常对外服务。

  • 严格顺序访问

对于来自客户端的每个更新请求,ZooKeeper都会分配一个全局唯一的递增编号,这个编号反映了所有事务操作的先后顺序。

四、Linux下搭建Zookeeper环境

【a】下载Zookeeper安装包

zookeeper 下载地址为:https://zookeeper.apache.org/releases.html

笔者这里选择的版本是较为稳定的一个版本:zookeeper-3.4.14.tar.gz。

注意:需要提前安装好JDK并配置环境变量。

【b】将安装包上传到Linux服务器中并进行解压缩

解压缩到指定的目录:

[root@localhost /]# tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local/
.........
[root@localhost local]# ll
total 4
drwxr-xr-x.  2 root  root    81 Nov  9 14:50 bin
drwxr-xr-x.  2 root  root     6 Apr 11  2018 etc
drwxr-xr-x.  2 root  root     6 Apr 11  2018 games
drwxr-xr-x.  2 root  root    39 Nov 16 16:09 include
drwxr-xr-x.  3 root  root    26 Dec 14 09:48 java
drwxr-xr-x.  2 root  root    54 Nov  9 14:33 lib
drwxr-xr-x.  2 root  root     6 Apr 11  2018 lib64
drwxr-xr-x.  2 root  root     6 Apr 11  2018 libexec
drwxr-xr-x.  3 root  root   120 Dec 10 11:44 mongodb-linux-x86_64-rhel70-4.4.2
drwxr-xr-x.  3 mysql mysql   69 Sep 18  2019 mysql
drwxr-xr-x. 11 root  root   151 Nov  9 17:07 nginx
drwxr-xr-x.  2 root  root     6 Apr 11  2018 sbin
drwxr-xr-x.  5 root  root    49 Sep 18  2019 share
drwxr-xr-x.  2 root  root     6 Apr 11  2018 src
drwxr-xr-x. 14  2002  2002 4096 Mar  7  2019 zookeeper-3.4.14
[root@localhost local]# cd zookeeper-3.4.14/
[root@localhost zookeeper-3.4.14]# ll
total 1676
drwxr-xr-x.  2 2002 2002     202 Mar  7  2019 bin
-rw-rw-r--.  1 2002 2002   97426 Mar  7  2019 build.xml
drwxr-xr-x.  2 2002 2002      77 Mar  7  2019 conf
drwxr-xr-x.  2 2002 2002    4096 Mar  7  2019 dist-maven
-rw-rw-r--.  1 2002 2002    1709 Mar  7  2019 ivysettings.xml
-rw-rw-r--.  1 2002 2002   10742 Mar  7  2019 ivy.xml
drwxr-xr-x.  4 2002 2002    4096 Mar  7  2019 lib
-rw-rw-r--.  1 2002 2002   11970 Mar  7  2019 LICENSE.txt
-rw-rw-r--.  1 2002 2002    3132 Mar  7  2019 NOTICE.txt
-rw-rw-r--.  1 2002 2002   31622 Mar  7  2019 pom.xml
-rw-rw-r--.  1 2002 2002    1765 Mar  7  2019 README.md
-rw-rw-r--.  1 2002 2002    1770 Mar  7  2019 README_packaging.txt
drwxr-xr-x.  3 2002 2002      22 Mar  7  2019 src
-rw-rw-r--.  1 2002 2002 1515359 Mar  7  2019 zookeeper-3.4.14.jar
-rw-rw-r--.  1 2002 2002     836 Mar  7  2019 zookeeper-3.4.14.jar.asc
-rw-rw-r--.  1 2002 2002      33 Mar  7  2019 zookeeper-3.4.14.jar.md5
-rw-rw-r--.  1 2002 2002      41 Mar  7  2019 zookeeper-3.4.14.jar.sha1
drwxr-xr-x.  3 2002 2002      47 Mar  7  2019 zookeeper-client
drwxr-xr-x. 12 2002 2002    4096 Mar  7  2019 zookeeper-contrib
drwxr-xr-x.  7 2002 2002    4096 Mar  7  2019 zookeeper-docs
drwxr-xr-x.  3 2002 2002      35 Mar  7  2019 zookeeper-it
drwxr-xr-x.  4 2002 2002      46 Mar  7  2019 zookeeper-jute
drwxr-xr-x.  5 2002 2002     176 Mar  7  2019 zookeeper-recipes
drwxr-xr-x.  3 2002 2002      32 Mar  7  2019 zookeeper-server

【c】将zoo_sample.cfg这个文件复制为zoo.cfg (必须是这个文件名)

进入到zookeeper-3.4.14/conf目录下:

[root@localhost conf]# ll
total 12
-rw-rw-r--. 1 2002 2002  535 Mar  7  2019 configuration.xsl
-rw-rw-r--. 1 2002 2002 2161 Mar  7  2019 log4j.properties
-rw-rw-r--. 1 2002 2002  922 Mar  7  2019 zoo_sample.cfg
[root@localhost conf]# cp zoo_sample.cfg zoo.cfg 
[root@localhost conf]# ll
total 16
-rw-rw-r--. 1 2002 2002  535 Mar  7  2019 configuration.xsl
-rw-rw-r--. 1 2002 2002 2161 Mar  7  2019 log4j.properties
-rw-r--r--. 1 root root  922 Dec 14 09:54 zoo.cfg
-rw-rw-r--. 1 2002 2002  922 Mar  7  2019 zoo_sample.cfg

【d】编辑zoo.cfg文件

vim zoo.cfg

修改以下内容:

dataDir=/zookeeper/data
dataLogDir=/zookeeper/log

【e】创建zookeeper的数据和日志存放目录

[root@localhost conf]# vim zoo.cfg 
[root@localhost conf]# mkdir -p /zookeeper/data
[root@localhost conf]# mkdir -p /zookeeper/log

【e】启动服务端

进入bin目录,并启动zookeep。如果不是在bin目录下执行,启动zookeeper时会报错: bash: ./zkServer.sh:  No such file or directory。

可以看到,bin目录下有很多可执行脚本,通常我们使用最多的就是zkServer.sh和zkCli.sh两个。

启动服务端使用如下命令:

[root@localhost bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED

【f】查看服务端状态(启动单机节点)

[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: standalone

如果出现如上图所示,说明我们的zk服务端已经成功启动。

【g】启动客户端

启动客户端,我们使用的是zkCli.sh脚本:

[root@localhost bin]# ./zkCli.sh
Connecting to localhost:2181
2020-12-14 10:08:46,047 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
2020-12-14 10:08:46,049 [myid:] - INFO  [main:Environment@100] - Client environment:host.name=localhost
2020-12-14 10:08:46,049 [myid:] - INFO  [main:Environment@100] - Client environment:java.version=1.8.0_161
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:java.home=/usr/local/java/jdk1.8.0_161/jre
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:java.class.path=/usr/local/zookeeper-3.4.14/bin/../zookeeper-server/target/classes:/usr/local/zookeeper-3.4.14/bin/../build/classes:/usr/local/zookeeper-3.4.14/bin/../zookeeper-server/target/lib/*.jar:/usr/local/zookeeper-3.4.14/bin/../build/lib/*.jar:/usr/local/zookeeper-3.4.14/bin/../lib/slf4j-log4j12-1.7.25.jar:/usr/local/zookeeper-3.4.14/bin/../lib/slf4j-api-1.7.25.jar:/usr/local/zookeeper-3.4.14/bin/../lib/netty-3.10.6.Final.jar:/usr/local/zookeeper-3.4.14/bin/../lib/log4j-1.2.17.jar:/usr/local/zookeeper-3.4.14/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper-3.4.14/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/zookeeper-3.4.14/bin/../zookeeper-3.4.14.jar:/usr/local/zookeeper-3.4.14/bin/../zookeeper-server/src/main/resources/lib/*.jar:/usr/local/zookeeper-3.4.14/bin/../conf:.:/usr/local/java/jdk1.8.0_161/lib:/usr/local/java/jdk1.8.0_161/jre/lib
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:java.compiler=<NA>
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:os.name=Linux
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:os.arch=amd64
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:os.version=3.10.0-862.el7.x86_64
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:user.name=root
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:user.home=/root
2020-12-14 10:08:46,051 [myid:] - INFO  [main:Environment@100] - Client environment:user.dir=/usr/local/zookeeper-3.4.14/bin
2020-12-14 10:08:46,052 [myid:] - INFO  [main:ZooKeeper@442] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@5c29bfd
2020-12-14 10:08:46,078 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1025] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
JLine support is enabled
2020-12-14 10:08:46,171 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@879] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session
2020-12-14 10:08:46,205 [myid:] - INFO  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1299] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x100001aaa9e0000, negotiated timeout = 30000

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] 

如上图,说明我们已经进入zk客户端命令行里面,也就是我们的zk客户端也启动成功了。

【h】查看zookeeper帮助命令

[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
	stat path [watch]                  #查看节点状态
	set path data [version]            #更新节点中的数据
	ls path [watch]                    #列出path下所有子节点  
	delquota [-n|-b] path
	ls2 path [watch]                   #ls2拓展了ls命令,比ls命令输出更多的节点信息
	setAcl path acl
	setquota -n|-b val path
	history                            #列出最近的历史命令
	redo cmdno                         #再次执行某命令,先用history命令获取命令的ID,然后在使用redo命令 
	printwatches on|off
	delete path [version]              #删除指定路径上的节点(节点中不能含有子节点)
	sync path                          #强制同步(由于请求在半数以上的zk sever上生效就表示此请求生效,那么就会有一些状况server上的数据是旧的。 sync命令就是强制同步所有更新操作)
	listquota path                     #显示配额
	rmr path                           #删除节点包括节点下面的子节点,此处的path应该是绝对路径
	get path [watch]                   #获取指定节点的数据内容和属性信息
	create [-s] [-e] path data acl     #创建Zookeeper节点,即创建Znode
	addauth scheme auth                #节点认证
	quit                               #退出客户端
	getAcl path
	close                              #断开客户端与服务端的连接
	connect host:port                  #连接服务端,指定IP地址和端口号

五、总结

本文主要介绍了Zookeeper的概念以及作用,并详细总结了如何在Linux环境下搭建zk分布式协调环境,接下来我们将详细介绍相关命令的操作用法。

已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值