Skip to content
survior edited this page Mar 6, 2018 · 2 revisions

(1).zookeeper安装:

略,套路。

(2).zookeeper使用点:

2.1.创建节点锁:

watch机制下: true==(keeperState.SyncConnected==watchedEvent.getEvent()&&EventType.None==watchedEvent.getEvent().getType()) client与zk处于状态KeeperState. SyncConnected下时,会收到通知EventType.None,这两个同时满足说明zk连接成功。

zk.create("/NEED_SCHEDULE", "NEED_SCHEDULE".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL)

创建锁节点时有两个参数需要注意:

Ids.OPEN_ACL_UNSAFE:将所有ADMIN之外的权限授予每个人。如果用CREATOR_ALL_ACL表示所有权限赋予,在某些zookeeper版本会报错 InvalidACL for…,因为权限的安全程度有不同。

CreateMode.EPHEMERAL:会话结束年结点自动被删除,EPHEMERAL结点不允许有子节点。

Zk.create和这两个参数保证这样的原则:

1.保证任何时间有且只有一个定时任务在跑:因为有且只有一个服务器节点能够创捷成功定时任务节点。

2.保证当执行定时任务所在节点服务不可用时,其他节点会通过抢锁竞争重启一个新的定时任务:因为服务不可用意味着zk连接也断掉,zk断掉时,定时任务所节点会自动删除(CreateMode.EPHEMERAL保证),让出锁给其他服务节点竞争。

CreateMode

PERSISTENT:创建后只要不删就永久存在

EPHEMERAL:会话结束年结点自动被删除,EPHEMERAL结点不允许有子节点

SEQUENTIAL:节点名末尾会自动追加一个10位数的单调递增的序号,同一个节点的所有子节点序号是单调递增的

PERSISTENT_SEQUENTIAL:结合PERSISTENT和SEQUENTIAL

EPHEMERAL_SEQUENTIAL:结合EPHEMERAL和SEQUENTIAL

Clone this wiki locally