Zookeeper超级用户
2015-12-02 10:30
363 查看
Zookeeper管理员会因为某些客户端对某些节点设置了权限,而导致在紧急的情况下无法修改这些节点感到困扰。在这种情况下,管理员可以通过Zookeeper超级用户模式访问这些节点,一旦设置了超级权限访问节点,后续的操作就不需要check ACL了。
使用超级用户模式,可以通过Zookeeper的zookeeper.DigestAuthenticationProvider.superDigest参数开启。
使用org.apache.zookeeper.server.auth.DigestAuthenticationProvider生成superDigest:
在${ZOOKEEPER_HOME}/bin/zkServer.sh配置启动参数:
我使用的是zookeeper-3.4.6,修改zkServer.sh文件的第109行:
超级权限是通过DigestAuthenticationProvider实现的,示例:
使用超级用户模式,可以通过Zookeeper的zookeeper.DigestAuthenticationProvider.superDigest参数开启。
使用org.apache.zookeeper.server.auth.DigestAuthenticationProvider生成superDigest:
@Test public void generate() { try { System.out.println(DigestAuthenticationProvider.generateDigest("super:superpw")); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } }输出
super:g9oN2HttPfn8MMWJZ2r45Np/LIA=
在${ZOOKEEPER_HOME}/bin/zkServer.sh配置启动参数:
我使用的是zookeeper-3.4.6,修改zkServer.sh文件的第109行:
nohup "$JAVA" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.DigestAuthenticationProvider.superDigest=super:g9oN2HttPfn8MMWJZ2r45Np/LIA=" \
超级权限是通过DigestAuthenticationProvider实现的,示例:
@Test public void testSuperServer() { List<ACL> acls = new ArrayList<ACL>(2); try { Id id1 = new Id("digest", DigestAuthenticationProvider.generateDigest("fish:fishpw")); ACL acl1 = new ACL(ZooDefs.Perms.WRITE, id1); Id id2 = new Id("digest", DigestAuthenticationProvider.generateDigest("qsd:qsdpw")); ACL acl2 = new ACL(ZooDefs.Perms.READ, id2); acls.add(acl1); acls.add(acl2); } catch (NoSuchAlgorithmException e1) { e1.printStackTrace(); } ZooKeeper zk = null; try { zk = new ZooKeeper("10.0.1.75:2181,10.0.1.76:2181,10.0.1.77:2181", 300000, new Watcher() { // 监控所有被触发的事件 public void process(WatchedEvent event) { System.out.println("已经触发了" + event.getType() + "事件!"); } }); if (zk.exists("/test", true) == null) { System.out.println(zk.create("/test", "ACL测试".getBytes(), acls, CreateMode.PERSISTENT)); } } catch (IOException e) { e.printStackTrace(); } catch (KeeperException e1) { e1.printStackTrace(); } catch (InterruptedException e1) { e1.printStackTrace(); } } @Test public void testSuperClient() { try { ZooKeeper zk = new ZooKeeper("10.0.1.75:2181,10.0.1.76:2181,10.0.1.77:2181", 300000, new Watcher() { // 监控所有被触发的事件 public void process(WatchedEvent event) { System.out.println("已经触发了" + event.getType() + "事件!"); } }); zk.addAuthInfo("digest", "super:superpw".getBytes()); System.out.println(new String(zk.getData("/test", null, null))); zk.setData("/test", "I change!".getBytes(), -1); } catch (KeeperException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }示例先使用digest对Znode /test 设置读写权限,然后通过super:superpw的超级用户去访问。
相关文章推荐
- 高级文件权限管理 facl和超级权限chattr
- 我的大学——学习生活总结
- 每个人都应该知道的14个电脑使用技巧
- Git 的 .gitignore 配置
- SQL基础---增删查询操作
- autoload-cache-2.4 发布
- Spark使用经验分享
- 如何用VisualStudio2013、VisualStudioTools命令行 编写C语言程序
- JAVA AQS源码分析
- 找出文件中的完全平方数
- compass模块----Helpers
- OpenCv ROI操作
- HTTP请求中浏览器的缓存机制
- LeetCode-- Palindrome Number
- SQL----函数
- watchOS 2 教程(四): Watch Connectivity
- c/c++ 数字转字符串, 字符串转数字
- SpringMVC整合Tiles框架
- android EditText禁止复制粘贴完整代码
- D. Mike and Feet---cf548D(最值)