博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zookeeper简绍
阅读量:6905 次
发布时间:2019-06-27

本文共 5562 字,大约阅读时间需要 18 分钟。

hot3.png

zookeeper是什么

ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。ZooKeeper性能上的特点决定了它能够用在大型的、分布式的系统当中。从可靠性方面来说,它并不会因为一个节点的错误而崩溃。除此之外,它严格的序列访问控制意味着复杂的控制原语可以应用在客户端上。ZooKeeper在一致性、可用性、容错性的保证,也是ZooKeeper的成功之处,它获得的一切成功都与它采用的协议——Zab协议是密不可分的。

Zookeeper安装

tar -xvfz zookeeper-3.4.5.tar.gz  -C /opt/cdh-5.3.6/cd /opt/cdh-5.3.6/zookeeper-3.4.5/confvi /etc/profileexport ZOOKEEPER_HOME=/opt/modules/jdk1.7.0_67export PATH=$PATH:ZOOKEEPER_HOME/binsource /etc/profile

zookeeper角色

领导者:领导者负责投票的发起和决议,更新系统状态学习者:1 跟随者:follower用于接收客户端请求并向客户端返回结果,在选择过程中参与投票2 观察者:observer可以接收客户端连接,不参与投票,将请求发送给领导者,同步领导者状态,目的是为了扩展系统,提高读取速度3 客户端:请求发起方

zookeeper典型应用场景

从设计模式来看,zookeeper是基于观察者模式设计的分布式服务管理框架,负责存储和管理大家关心的数据,接收观察者的注册,一旦数据发生状态变化,zookeeper负责通知已经在zookeeper上注册的观察者做出反应,从而实现类似master/slave的管理模式。

应用场景

统一命名服务 配置管理 集群管理 共享锁、同步锁

配置文件

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.# do not use /tmp for storage, /tmp here is just # example sakes.dataDir=/opt/modules/data/zookeeper# the port at which the clients will connectclientPort=2181## Be sure to read the maintenance section of the # administrator guide before turning on autopurge.## http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance## The number of snapshots to retain in dataDir#autopurge.snapRetainCount=3# Purge task interval in hours# Set to "0" to disable auto purge feature#autopurge.purgeInterval=1

initLimit:配置zookeeper接收客户端(这里所说的客户端不是用户连接zookeeper服务器的客户端,而是指zookeeper服务器集群中连接到Leader的Follower服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过10个心跳时间长度后zookeeper服务器还没有收到客户端的返回消息,那么表明这个客户端连接失败。总的时间长度就是10*2000=20秒。

syncLimit:配置Leader与Follower之间发送消息,请求和应答时间长度最长不能超过多少个ticketTime的时间长度,总的时间长度就是5*2000=4秒。

tickTime: zookeeper服务器之间或者是客户端与服务器之间维持心跳的时间间隔,也就是每隔2000毫秒发送一次心跳。

zookeeper配置

mkdir -p /opt/modules/data/zookeeper#修改zookeeper中conf目录下的zoo_sample.cfg为zoo.cfgvi zoo.cfgdataDir=/opt/modules/data/zookeeperinitLimit=10 #默认值syncLimit=5  #默认值

防火墙端口开启

在防火墙中打开要用到的端口2181 2888 3888

vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT-A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT#重启服务service iptables restart#查看状态service iptables status# 查看zookeeper服务输出信息,服务信息输出文件在.../bin/zookeeper.outtail -500f zookeeper.out

分布式集群

server.A=B:C: D 其中A是一个数字,表示这是第几号服务器。B是这台服务器的IP地址。C表示这台服务器与集群中的Leader服务器交换信息的端口。D表示的是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于B都是一样,所以不同的zookeeper实例通信端口号不能一样,所以要给他们分配不同的端口号。

修改三个zookeeper节点中的zoo.cfg文件,添加server.0、server.1、server.2

2888端口号是zookeeper服务之间通信的端口。

3888端口是zookeeper与其他应用程序通信的端口。

在zookeeper目录下,创建data目录。在3个zookeeper节点中data目录下分别创建myid文件,并分别添加内容0、1、2

./bin/zkServer.sh startJMX enabled by defaultUsing config: /opt/cdh-5.3.6/zookeeper-3.4.5/bin/../conf/zoo.cfgStarting zookeeper ... STARTED#查看状态zkServer.sh statusJMX enabled by defaultUsing config: /opt/cdh-5.3.6/zookeeper-3.4.5/bin/../conf/zoo.cfgMode: standalone#启动zookeeper shell ./bin/zkCli.sh

zookeeper命令使用

  • 创建节点
create [-s] [-e] path data acl#其中,-s或-e分别指定节点特性,顺序或临时节点,若不指定,则表示持久节点;acl用来进行权限控制。#创建顺序节点[zk: localhost:2181(CONNECTED) 3] create -s /zk-test 123Created /zk-test0000000000[zk: localhost:2181(CONNECTED) 4] create -s /zk-test 123Created /zk-test0000000001[zk: localhost:2181(CONNECTED) 5] create -s /zk-test 123Created /zk-test0000000002#可以看到创建的zk-test节点后面添加了一串数字以示区别。#创建临时节点create -e /zk-temp 123#临时节点在客户端会话结束后,就会自动删除,下面使用quit命令退出客户端#创建永久节点[zk: localhost:2181(CONNECTED) 17] create /zk-permanent 123 Created /zk-permanent[zk: localhost:2181(CONNECTED) 18] create /zk-permanent/second 123 Created /zk-permanent/fdfd可以看到永久节点不同于顺序节点,不会自动在后面添加一串数字。

读取节点

与读取相关的命令有ls 命令和get 命令,ls命令可以列出Zookeeper指定节点下的所有子节点,只能查看指定节点下的第一级的所有子节点;get命令可以获取Zookeeper指定节点的数据内容和属性信息。其用法分别如下

 ls path [watch]  get path [watch]  ls2 path [watch]  若获取根节点下面的所有子节点,使用ls / 命令即可[zk: localhost:2181(CONNECTED) 8] ls /[zk-test0000000000, zk-test0000000001, zk-permanent, zookeeper, zk-test0000000002]

若想获取根节点数据内容和属性信息,使用get / 命令即可

[zk: localhost:2181(CONNECTED) 12] get /cZxid = 0x0ctime = Wed Dec 31 19:00:00 EST 1969mZxid = 0x0mtime = Wed Dec 31 19:00:00 EST 1969pZxid = 0x8cversion = 4dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 6#或者[zk: localhost:2181(CONNECTED) 13] ls2 /[zk-test0000000000, zk-test0000000001, zk-permanent, zk-permanent3, zookeeper, zk-test0000000002]cZxid = 0x0ctime = Wed Dec 31 19:00:00 EST 1969mZxid = 0x0mtime = Wed Dec 31 19:00:00 EST 1969pZxid = 0x8cversion = 4dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 0numChildren = 6

更新节点

使用set命令,可以更新指定节点的数据内容,用法如下set path data [version]其中,data就是要更新的新内容,version表示数据版本,如将/zk-permanent节点的数据更新为456,可以使用如下命令:[zk: localhost:2181(CONNECTED) 0] set /zk-permanent 43534cZxid = 0x5ctime = Fri Jun 22 09:14:26 EDT 2018mZxid = 0xbmtime = Fri Jun 22 09:21:28 EDT 2018pZxid = 0x5cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 5numChildren = 0#现在dataVersion已经变为1了,表示进行了更新。

删除节点

使用delete命令可以删除Zookeeper上的指定节点,用法如下delete path [version]其中version也是表示数据版本,使用delete /zk-permanent 命令即可删除/zk-permanent节点[zk: localhost:2181(CONNECTED) 5] ls /[zk-test0000000000, zk-test0000000001, zk-permanent3, zookeeper, zk-test0000000002]#可以看到,已经成功删除/zk-permanent节点。值得注意的是,若删除节点存在子节点,那么无法删除该节点,必须先删除子节点,再删除父节点。

转载于:https://my.oschina.net/jiansin/blog/1839040

你可能感兴趣的文章
PHP-防止SQL注入
查看>>
Javascript监听 ESC按下事件
查看>>
Comet技术详解:基于HTTP长连接的Web端实时通信技术
查看>>
MongoDB:Ruby中嵌入Javascript实战
查看>>
亚马逊云服务与IT的未来:微博速递
查看>>
博客收藏
查看>>
关于ant-design表单问题
查看>>
十三、MySQL数据备份与恢复
查看>>
编程的修炼(中英双语)
查看>>
《Node.js实战(双色)》作者之一——吴中骅访谈录
查看>>
CCIE笔试350-001题库517Q(uncle cao中文注释版)
查看>>
jQuery Ajax 实例 ($.ajax、$.post、$.get)
查看>>
Training的第三十一天(回校的第二周)
查看>>
我的友情链接
查看>>
借助开源工具高效完成Java应用的运行分析
查看>>
SQLite header and source version mismatch
查看>>
H3C EAD开局 认证通过后不进行安全检查排错
查看>>
Linux禁止ping
查看>>
Oracle密码文件学习心得
查看>>
不要只甘于做一个程序员
查看>>