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

[经验分享] Zookeeper环境搭建及使用

[复制链接]

尚未签到

发表于 2017-4-19 06:54:11 | 显示全部楼层 |阅读模式
1.Zookeeper了解
    Zookeeper有能力实现集中配置的能力,举个例子,应用app1 做集群配置,配置3个节点,把app1的配置统一放置zookeeper server /APP1上,所有的app1应用启动就对节点/APP1进行监控,并实现回调方法Watcher,那么在/APP1上数据发生变化的时候,每个app应用节点就会收到通知,Watcher方法被执行,则app1的应用就可以实时得到修改的配置。
Zookeeper 自身可以做集群配置,可以预防由于单点故障导致的信息崩溃问题。
Zookeeper 数据结构类似标准的文件系统
[img]

[/img]

Zookeeper数据结构有如下这些特点:
[tr][td]1.每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1[tr][td]2.znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录[tr][td]3.znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据[tr][td]4.znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了[tr][td]5.znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2[tr][td]6.znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的。


2.Zookeeper与redis比较
Zookeeper 不是一个通用的数据库或大型数据存储,而是管理协调数据,
结合软创系统的配置信息,配置信息量不会非常大,完全在可控范围内,同时需要稳定运行,消除单点宕机故障,读取速度不是太大的影响点,综上考虑采用zookeeper作为配置管理中心比较合适。

基于上面描述,使用zookeeper实现我们的配置中心是可行的

3.Zookeeper 安装及使用
3.1安装(单机)
单机安装非常简单,具体步骤如下:
1.使用zookeeper3.3.6版本,解压zookeeper-3.3.6.tar.gz至本地目录
2.配置zoo.cfg(将自带的zoo_sample.cfg copy并改名为zoo.cfg)
# The number of milliseconds of each tick
#心跳时间,客户端与zookeeper server之间的心跳时间
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take 集群配置时,配置zookeeper接受客户端(客户端是指follower服务器,而不是client连接server的客户端) 初始化连接最长能接受的多少个心跳时间间隔数
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement  这个是集群配置时 follower与leader之间的请求应答时间
syncLimit=5
# the directory where the snapshot is stored. zookeeper保存数据目录
dataDir=D:/workspace/config-cache/zookeeper/zookeeper-3.3.6/data/zookeeper
# the port at which the clients will connect  客户端连接zookeeper server的端口
clientPort=2181

3.启动zookeeper server
执行bin目录下zkServer.cmd
3.2安装(集群)
配置zookeeper集群(或者在单机上配置伪集群)
本机设置集群,copy zookeeper-3.3.6 到另外一个目录
1.设置hosts文件,设置server对应的ip
127.0.0.1   zkserver01
127.0.0.1    zkserver02

2.修改配置文件zoo.cfg
#cluster config
server.1=zkserver01:2000:2001
server.2=zkserver02:2002:2003
解释一下上面的配置 server.1=zkserver01:2000:2001
1:表示第几号服务器,与myid中内容一致
zkserver01: 是server01 的ip地址,或者使用hosts中设置的主机名
2000:表示的是这个服务器与集群中的 Leader 服务器交换信息的端口
2001:表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口

另外,在zoo.cfg文件中,如果在同一台机器上设置集群,clientPort需要设置不同的端口号
3.添加myid文件
在zoo.cfg 配置的dataDir路径下添加文件myid(文件名),文件内容就是上面的第几号服务器的值
4.启动集群
执行server01 的zkServer.cmd
执行server02的zkServer.cmd
先执行的server01 在server02启动之前会抛出异常,随着server02启动之后趋于正常,异常可以忽略
3.3使用demo
Demo中包含两个类Executor 和 DataMonitor 负责监听zookeeper某个节点,如果该节点数据发生变化,则dataMonitor会有所反应,然后把最新的data写入文件,并调用执行本地命令。
Zookeeper的watcher是单次有效,如果需要每次变化都能通知client,需要在client接受到变化之后再次注册watcher
if (path != null && path.equals(znode)) {
                // Something has changed on the node, let's find out
                zk.exists(znode, true, this, null);
            }

Zookeeper中watcher概念及特性可以查阅zookeeperProgrammers.pdf文档

单机zkserver执行Executor 的时候设置args: zkserver01:2181 / F:/app/log.txt hostname
集群执行的时候设置的hostPort 略有不同,zkserver01:2181, zkserver02:3181 / F:/app/log.txt hostname
zookeeper-client.zip为java project ,解压后import 到workspace即可

运维网声明 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.iyunv.com/thread-366056-1-1.html 上篇帖子: zookeeper入门(2)解读zookeeper的配置项 下篇帖子: Zookeeper分布式部署(单机伪部署)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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