生产环境中,经常会有多个项目使用zookeeper,例如多个hbase集群。每个项目搭建一套独立的zookeeper,无论从机器成本,还是运维成本,都是一笔额外的开销。
然而多项目,多集群共用zookeeper又涉及一个权限隔离的问题。zookeeper本身提供了ACL机制,表示为scheme:id:permissions,第一个字段表示采用哪一种机制,第二个id表示
用户,permissions表示相关权限( CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管理权限,这5种权限简写为crwda)。
zookeeper提供了如下几种机制(scheme):
- world: 它下面只有一个id, 叫anyone, 代表任何人
- auth: 它不需要id, 只要是通过认证的user都有权限(zookeeper支持通过kerberos来进行认证 , 也支持username/password形式的认证)
- digest: 它对应的id为username:BASE64(SHA1(password)),它需要先通过username:password形式的认证
- ip: 它对应的id为客户机的IP地址,设置的时候可以设置一个ip段,比如ip:192.168.1.0/16, 表示匹配前16个bit的IP段
- super: 在这种scheme情况下,对应的id拥有超级权限,可以做任何事情(cdrwa)
下面演示一个通过digest(用户名密码的方式)为创建的节点设置ACL的例子:
import org.apache.zookeeper.*;
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
import org.apache.zookeeper.data.*;
import java.util.*;
public class NewDigest {
import org.apache.zookeeper.server.auth.DigestAuthenticationProvider;
import org.apache.zookeeper.data.*;
import java.util.*;
public class NewDigest {
public static void main(String[] args) throws Exception {
// new一个acl
List<ACL> acls = new ArrayList<ACL>();
// 添加第一个id,采用用户名密码形式
Id id1 = new Id("digest",
DigestAuthenticationProvider.generateDigest("admin:admin"));
ACL acl1 = new ACL(ZooDefs.Perms.ALL, id1);
acls.add(acl1);
// 添加第二个id,所有用户可读权限
Id id2 = new Id("world", "anyone");
ACL acl2 = new ACL(ZooDefs.Perms.READ, id2);
acls.add(acl2);
// zk用admin认证,创建/test ZNode。
ZooKeeper zk = new ZooKeeper(
"host1:2181,host2:2181,host3:2181",
2000, null);
zk.addAuthInfo("digest", "admin:admin".getBytes());
zk.create("/test", "data".getBytes(), acls, CreateMode.PERSISTENT);
}
}
List<ACL> acls = new ArrayList<ACL>();
// 添加第一个id,采用用户名密码形式
Id id1 = new Id("digest",
DigestAuthenticationProvider.generateDigest("admin:admin"));
ACL acl1 = new ACL(ZooDefs.Perms.ALL, id1);
acls.add(acl1);
// 添加第二个id,所有用户可读权限
Id id2 = new Id("world", "anyone");
ACL acl2 = new ACL(ZooDefs.Perms.READ, id2);
acls.add(acl2);
// zk用admin认证,创建/test ZNode。
ZooKeeper zk = new ZooKeeper(
"host1:2181,host2:2181,host3:2181",
2000, null);
zk.addAuthInfo("digest", "admin:admin".getBytes());
zk.create("/test", "data".getBytes(), acls, CreateMode.PERSISTENT);
}
}
然而,ACL毕竟仅仅是访问控制,并非完善的权限管理,通过这种方式做多集群隔离,还有很多局限性:
(1)ACL并无递归机制,任何一个znode创建后,都需要单独设置ACL,无法继承父节点的ACL设置。
(2)除了ip这种scheme,digest和auth的使用对用户都不是透明的,这也给使用带来了很大的成本,很多依赖zookeeper的开源框架也没有加入对ACL的支持,例如hbase,storm
相关推荐
ZooKeeper本身没有提供访问控制列表(ACL)的机制,但它提供了一个可扩展的权限模式,允许用户自己定义谁可以做什么。 在ZooKeeper中,节点的操作权限分为五种:CREATE、READ、WRITE、DELETE和ADMIN,它们的简写...
增加 ACL 权限需要使用 ZooKeeper 的 AddAuth 命令,指定要添加的权限和访问者的信息。 ZooKeeper 没有鉴权访问 ZooKeeper 没有鉴权访问是指在没有权限的情况下访问 ZooKeeper 服务器。这种情况下, ZooKeeper ...
Zookeeper 使用 ACL(Access Control List)来控制访问 Znode,ACL 的实现和 UNIX 的实现非常相似:它采用权限位来控制哪些操作被允许,哪些操作被禁止。但是和标准的 UNIX 权限不同的是,Znode 没有限制用户(user...
Zookeeper-ACL权限控制
ZooKeeper 客户端使用与集群特性 本文将详细介绍 ZooKeeper 客户端的使用和集群特性,包括客户端简介、客户端连接参数说明、客户端 CRUD、客户端监听、集群架构说明、集群配置及参数说明、选举投票机制、主从复制...
在IT行业中,ZooKeeper是一个广泛使用的分布式协调服务,它由Apache软件基金会开发并维护。ZooKeeper的设计目标是提供高可用性、高性能的分布式一致性服务,常用于管理分布式应用中的配置信息、命名服务、分布式同步...
ZooKeeper 支持 SASL 认证和 ACL(Access Control Lists)权限控制,可以对不同用户或角色设置不同的访问权限,确保数据的安全。 8. **ZooKeeper 集群** 在实际应用中,ZooKeeper 通常运行在多个服务器组成的集群...
**ZooKeeper 3.8.4:分布式协调服务详解** Apache ZooKeeper 是一个高度可靠的分布式协调服务,广泛应用于...正确理解和使用 ZooKeeper 可以帮助开发者解决许多分布式环境下的难题,提高系统的整体性能和可靠性。
ZooKeeper 的访问权限配置是通过 ACL(Access Control List)来实现的。ACL 是一种访问控制机制,通过设置不同的权限来控制用户对 ZooKeeper 节点的访问。 ZooKeeper 中的 ACL 由三部分组成:权限、用户和节点。 1...
查看节点ACL使用`ls -s <path>`,设置ACL则用`setacl <path> <acl_spec>`,其中`<acl_spec>`是一个或多个`schema:principal:perm`格式的ACL条目。 例如,要为路径`/mynode`设置一个只允许用户`user1`读取的ACL,...
使用Zookeeper可视化工具的步骤 - **安装和配置**:下载并安装相应的Zookeeper可视化工具,根据工具文档配置连接到Zookeeper集群的参数,如服务器地址、端口等。 - **连接Zookeeper**:启动工具,输入配置好的连接...
7.1 监控工具:使用JMX(Java Management Extensions)监控ZooKeeper的运行状态,例如CPU使用率、内存使用等。 7.2 日志分析:定期检查日志文件,排查可能的错误和异常。 总结,ZooKeeper 3.4.9在Windows和Linux上...
在`zookeeperTest`这个示例中,你可以看到如何使用这些概念来实现具体的功能,比如创建ZNode、设置ACL、使用Curator或ZkClient进行数据操作等。通过深入研究这些代码,你可以更好地理解ZooKeeper的工作原理,并在...
4. **安全性**: 使用ACL来限制对Zookeeper资源的访问。 **七、故障恢复与一致性保证** Zookeeper通过Zab协议确保数据一致性,即使在部分服务器故障的情况下也能保证服务的正常运行。 **八、Zookeeper与Hadoop、...
Zookeeper的数据模型类似于文件系统,由节点(ZNode)构成,每个节点都可以存储数据,并具有版本号、ACL(访问控制列表)和时间戳等属性。节点分为临时节点(会话结束自动删除)和持久节点(直到被显式删除)两种。 ...
《Zookeeper3八本》是针对Apache ZooKeeper的深度学习资料集合,特别关注在Windows操作系统下的部署和使用。Zookeeper是一个分布式协调服务,广泛应用于分布式系统中,如Hadoop、HBase、Kafka等,它提供了命名服务、...
1. **创建节点**:使用`create(String path, byte[] data, List<ACL> acl, CreateMode createMode)`方法创建节点,`createMode`参数决定了节点类型(临时或永久)。 2. **读取数据**:通过`getData(String path, ...
本篇文章将重点探讨 ZooKeeper 的客户端使用,帮助开发者更好地理解和应用这一强大的工具。 ### 1. ZooKeeper 的基本概念 ZooKeeper 是一个开源的分布式协调服务,由雅虎创建并贡献给了 Apache 基金会。它提供了一...
本文将深入探讨ZooKeeper客户端API的使用方法和核心概念。 ### 1. 连接ZooKeeper 在使用ZooKeeper客户端API之前,首先需要建立与ZooKeeper服务器的连接。这通常通过`ZooKeeper`类的构造函数完成,传入服务器地址...
对于开发者来说,理解ZooKeeper的API和最佳实践也至关重要,如何正确地创建、更新和删除Znode,以及如何设置和使用Watchers,都是实际开发中必须掌握的技能。 总的来说,《ZooKeeper:分布式过程协同技术详解》和...