zookeeper简单学习记录

zookeeper提供的通用服务
  1. 命名服务:确定一个集群中的节点名字
  2. 集群管理:加入节点的集群和加点状态实时离开
  3. 配置管理:系统最近加入节点的向上最新配置信息
  4. 节点领导者选举:选举一个节点作为镰刀这协调的目的
  5. 锁定和同步服务:锁定数据同时修改它,这种机制可以版主自动故障恢复,同时连接其他的分布式应用程序
  6. 高可靠到数据注册表:一个或几个几点的可用性的数据向下
zookeeper下载完成后,复制config目录下的zoo_simple.cfg重命名为 zoo.cfg

zoo.cfg

//服务器之间或客户端与服务器之间维持心跳的时间间隔
tickTime=2000 
//超出   10*2000=20 秒,没有收到返回信息,表示连接失败
initLimit=10 
//标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,不能超出 5*2000=10 秒 
syncLimit=5    
//日志文件保存的位置 
dataDir=/tmp/zookeeper
//客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
clientPort=2181
 //server.A=B:C:D:
 //A 是一个数字,表示这个是第几号服务器;
 //B 是这个服务器的 ip 地址;
 //C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
 //D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
server.1=10.2.143.5:2887:3887    
server.2=10.2.143.36:2888:3888    
server.3=10.2.143.37:2889:3889 
//此处声明表示作为一个观察者角色存在   
peerType=observer
//注意观察者角色的末尾,需要拼接上observer  
 server.4=10.2.143.38:2886:3886:observe
zookeeper的一些基本操作
操作描述
String create(final String path, byte data[], List acl, CreateMode createMode)参数: 路径、 znode内容,ACL(访问控制列表)、 znode创建类型;用途:创建znode节点
void delete(final String path, int version)参数: 路径、版本号;如果版本号与znode的版本号不一致,将无法删除,是一种乐观加锁机制;如果将版本号设置为-1,不会去检测版本,直接删除;用途:删除节点
Stat exists(final String path, Watcher watcher)参数: 路径、Watcher(监视器);当这个znode节点被改变时,将会触发当前Watcher用途:判断znode节点是否存在
Stat exists(String path, boolean watch)参数: 路径、并设置是否监控这个目录节点,这里的 watcher 是在创建 ZooKeeper 实例时指定的 watcher;判断znode节点是否存在
Stat setData(final String path, byte data[], int version)参数: 路径、数据、版本号;如果为-1,跳过版本检查用途:设置znode上的数据
byte[] getData(final String path, Watcher watcher, Stat stat)参数: 路径、监视器、数据版本等信息用途:获取znode上的数据
List getChildren(final String path, Watcher watcher)参数: 路径、监视器;该方法有多个重载用途:获取节点下的所有子节点

Zookeeper中的更新操作是有条件的。在使用delete或者setData操作时必须提供被更新znode的版本号,如果版本号不匹配,则更新操作失败。一般情况下设置-1即可

/*创建zookeeper连接
ZooKeeper(java.lang.String connectString, int sessionTimeout, org.apache.zookeeper.Watcher watcher) 
connectString:zookeeper服务地址,例如“192.168.117.128:2181”
sessionTimeout :超时时间,单位为毫秒
watcher:实现org.apache.zookeeper.Watcher接口的实现类,需实现process(WatchedEvent watchedEvent) 方法*/
ZooKeeper zooKeeper = new ZooKeeper("192.168.117.128:2181",5000, new MyWatcher());
同步创建
create(java.lang.String path, byte[] data, java.util.List<org.apache.zookeeper.data.ACL> acl, org.apache.zookeeper.CreateMode createMode)
	path:创建节点路径,需保证父节点已存在
	data:节点数据
	acl:权限列表
		1.提供默认的权限OPEN_ACL_UNSAFE、CREATOR_ALL_ACL、READ_ACL_UNSAFE
			  OPEN_ACL_UNSAFE:完全开放
			  CREATOR_ALL_ACL:创建该znode的连接拥有所有权限
			  READ_ACL_UNSAFE:所有的客户端都可读
		2.自定义权限  
				ACL aclIp = new ACL(ZooDefs.Perms.READ,new Id("ip","127.0.0.1"));
                ACL aclDigest = new ACL(ZooDefs.Perms.READ| ZooDefs.Perms.WRITE,
                        new Id("digest", DigestAuthenticationProvider.generateDigest("id:pass")));
			3.session设置权限 
				zk.addAuthInfo("digest", "id:pass".getBytes());  
			4.createMode:节点类型
				PERSISTENT:持久化节点
				PERSISTENT_SEQUENTIAL:持久化有序节点
				EPHEMERAL:临时节点(连接断开自动删除)
				EPHEMERAL_SEQUENTIAL:临时有序节点(连接断开自动删除)
异步创建
create(java.lang.String path,
	    byte[] data, 
	    java.util.List<org.apache.zookeeper.data.ACL> acl,
		org.apache.zookeeper.CreateMode createMode, 
		org.apache.zookeeper.AsyncCallback.StringCallback cb, 
		java.lang.Object ctx) 

StringCallback cb:回调接口,执行创建操作后,结果以及数据发送到此接口的实现类中
Object ctx:自定义回调数据,在回调实现类可以获取此数据

示例代码

观察触发器

可以设置观察的操作:exists,getChildren,getData
可以触发观察的操作:create,delete,setData

EventType:
NodeCreated:节点创建事件
NodeDeleted:节点被删除事件
NodeDataChanged:节点数据改变事件
NodeChildrenChanged:节点的子节点改变事件

ACL(zookeeper的访问控制列表)
ACL权限允许的操作
CREATE创建节点create(“name”)
READgetChildren() getData()
WRITEsetData
DELETEdelete(“name”)删除节点
ADMINsetACL()设置权限

ACL都是身份验证模式、符合该模式的一个身份和一组权限的组合。
身份验证模式有三种:

  • digest:用户名,密码

  • host:通过客户端的主机名来识别客户端

  • ip: 通过客户端的ip来识别客户端

更详细的文章,加上一些经典的例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值