设为首页 收藏本站
查看: 811|回复: 0

[经验分享] 单机安装ZooKeeper

[复制链接]

尚未签到

发表于 2019-1-7 14:28:51 | 显示全部楼层 |阅读模式
zookeeper下载、安装以及配置环境变量
  本节介绍单机的zookeeper安装,官方下载地址如下:

  https://archive.apache.org/dist/zookeeper/

  我这里使用的是3.4.11版本,所以找到相应的版本点击进去,复制到.tar.gz的下载链接到Linux上进行下载。命令如下:

[root@study-01 ~]# cd /usr/local/src/
[root@study-01 /usr/local/src]# wget https://archive.apache.org/dist/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz
  下载完成之后将其解压到/usr/local/目录下:

[root@study-01 /usr/local/src]# tar -zxvf zookeeper-3.4.11.tar.gz -C /usr/local/
[root@study-01 /usr/local/src]# cd ../zookeeper-3.4.11/
[root@study-01 /usr/local/zookeeper-3.4.11]# ls
bin        dist-maven       lib          README_packaging.txt  zookeeper-3.4.11.jar.asc
build.xml  docs             LICENSE.txt  recipes               zookeeper-3.4.11.jar.md5
conf       ivysettings.xml  NOTICE.txt   src                   zookeeper-3.4.11.jar.sha1
contrib    ivy.xml          README.md    zookeeper-3.4.11.jar
[root@study-01 /usr/local/zookeeper-3.4.11]#
  安装完成之后,我们就可以配置环境变量了。如下:

[root@study-01 ~]# vim ./.bash_profile  # 增加内容如下
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.11/
export PATH=$PATH:$ZOOKEEPER_HOME/bin
[root@study-01 ~]# source ./.bash_profile
zookeeper文件夹主要目录介绍


  • bin:存放主要的一些常用目录
  • conf:存放配置文件,一会我们需要修改zoo.cfg配置文件
  • contrib:附加的一些功能
  • dist-maven:mvn编译后的目录
  • docs:存放帮助文档文件
  • lib:需要依赖的jar包
  • recipes:官方提供的案例demo代码
  • src:源码

zookeeper配置文件介绍,运行zk
  进入conf目录,拷贝官方提供的模板配置文件,然后进行编辑:

[root@study-01 /usr/local/zookeeper-3.4.11]# cd conf/
[root@study-01 /usr/local/zookeeper-3.4.11/conf]# cp zoo_sample.cfg zoo.cfg
[root@study-01 /usr/local/zookeeper-3.4.11/conf]# vim zoo.cfg  # 配置内容如下
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper-3.4.11/dataDir
dataLogDir=/usr/local/zookeeper-3.4.11/dataLogDir
clientPort=2181
[root@study-01 /usr/local/zookeeper-3.4.11/conf]# cd ../
[root@study-01 /usr/local/zookeeper-3.4.11]# mkdir {dataDir,dataLogDir}
  zoo.cfg配置:


  • tickTime:用于计算的时间单元。比如session超时:N * tickTime
  • initLimit:用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来表示
  • syncLimit:用于集群,master主节点与从节点之间发送消息,请求和应答时间长度(心跳包机制)
  • dataDir:必须配置,数据文件所存放的目录
  • dataLogDir:日志目录,如果不配置就和dataDir共用同一个目录
  • clientPort:连接服务器的端口,默认为2181
  以上我们就完成了单机的zookeeper安装与配置,接下来我们尝试启动一下zookeeper服务:

[root@study-01 ~]# zkServer.sh start  # 启动zookeeper服务
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@study-01 ~]# netstat -lntp | grep java  # 检查端口是否有正常监听
tcp6       0      0 :::58056                :::*                    LISTEN      3057/java           
tcp6       0      0 :::2181                 :::*                    LISTEN      3057/java           
[root@study-01 ~]# zkServer.sh status  # 查看zookeeper服务状态
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: standalone
[root@study-01 ~]# ps aux |grep java  # 检查服务进程
root       3057  0.9  0.9 5230652 79840 pts/0   Sl   04:26   0:01 /usr/local/jdk1.8/bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /usr/local/zookeeper-3.4.11/bin/../build/classes:/usr/local/zookeeper-3.4.11/bin/../build/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-log4j12-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/slf4j-api-1.6.1.jar:/usr/local/zookeeper-3.4.11/bin/../lib/netty-3.10.5.Final.jar:/usr/local/zookeeper-3.4.11/bin/../lib/log4j-1.2.16.jar:/usr/local/zookeeper-3.4.11/bin/../lib/jline-0.9.94.jar:/usr/local/zookeeper-3.4.11/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/zookeeper-3.4.11/bin/../zookeeper-3.4.11.jar:/usr/local/zookeeper-3.4.11/bin/../src/java/lib/*.jar:/usr/local/zookeeper-3.4.11/bin/../conf: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg
root       3146  0.0  0.0 112680   976 pts/0    S+   04:29   0:00 grep --color=auto java
[root@study-01 ~]#
  然后再关闭zookeeper服务:

[root@study-01 ~]# zkServer.sh stop
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg
Stopping zookeeper ... STOPPED
[root@study-01 ~]#
  能够正常开/关后,就代表我们的zookeeper成功安装好了。

zk数据模型介绍
  zookeeper基本数据模型:


  •   基本数据模型是一个树形结构,类似于前端开发中的tree.js组件。或者像一个网站的目录结构:


  •   zk的数据模型也可以理解为linux/unix的文件目录,如:/usr/local/...。如下图:


  • 每一个节点都称之为znode,它可以有子节点,也可以有数据
  • 每个节点分为临时节点和永久节点,临时节点在客户端断开后就会消失
  • 每个zk节点都有各自的版本号,可以通过命令行来显示节点信息
  • 每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)
  • 删除/修改过时的节点,版本号不匹配则会报错
  • 每个zk节点存储的数据不宜过大,几k即可
  • 节点可以设置权限acl,可以通过权限来控制用户访问

zk客户端连接关闭服务端,查看znode
  启动zk服务端:

[root@study-01 ~]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.11/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@study-01 ~]#
  启动zk客户端连接:

[root@study-01 ~]# zkCli.sh
  查看可以使用哪些命令:

[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port
[zk: localhost:2181(CONNECTED) 1]
  查看znode,十分类似于在Linux下查看目录的操作:

[zk: localhost:2181(CONNECTED) 2] ls /  # 根节点
[zookeeper]
[zk: localhost:2181(CONNECTED) 3] ls /zookeeper  # 父节点
[quota]
[zk: localhost:2181(CONNECTED) 4] ls /zookeeper/quota  # 子节点
[]
[zk: localhost:2181(CONNECTED) 5]
  关闭zk客户端连接:

[zk: localhost:2181(CONNECTED) 5] quit  # 退出
Quitting...
2018-04-21 17:48:35,534 [myid:] - INFO  [main:ZooKeeper@687] - Session: 0x1000034ed8d0000 closed
2018-04-21 17:48:35,536 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread@520] - EventThread shut down for session: 0x1000034ed8d0000
[root@study-01 ~]#
zookeeper的作用体现


  • master节点选举,主节点挂了以后,从节点就会接手工作,并且保证这个节点是唯一的,这也是所谓的首脑模式,从而保证我们的集群是高可用的。
  • 统一配置文件管理,即只需要部署一台服务器,则可以把相同的配置文件同步更新到其他所有服务器,此操作在云计算中用的特别多(假设某一台机器修改了redis配置文件,就可以同步更新到其他机器上)
  •   发布与订阅,类似消息队列MQ(amq,rmq...),dubbo发布者把数据存在znode上,订阅者会读取这个数据。


  •   提供分布式锁,分布式环境中也会有不同进程之间争夺资源,这时候就需要锁机制来保证数据的一致性,类似于多线程中的锁。例如下图中这种多个服务器访问同一个文件时,就需要分布式锁来让他们进行排队访问:


  • 集群管理,集群中保证数据的强一致性。能够让客户端访问集群中任意一个服务器时,保证访问到的数据都是一致的:





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660415-1-1.html 上篇帖子: ZooKeeper解惑 下篇帖子: ZooKeeper Watcher
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表