Skip to content

Zookeeper实际操作

Zookeeper伪集群搭建

1.安装

zookeeper官网:http://zookeeper.apache.org/ 直接下载压缩文件解压到目录下

2.核心配置文件

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/zookeeper/zookeeper1/data
dataLogDir=/opt/zookeeper/zookeeper1/logs
clientPort=2185
server.1=127.0.0.1:2887:3887
server.2=127.0.0.1:2888:3888
server.3=127.0.0.1:2889:3889

配置说明:

tickTime: ZooKeeper 中使用的基本时间单元, 以毫秒为单位, 默认值是 2000。它用来调节心跳和超时。例如, 默认的会话超时时间是两倍的 tickTime

clientPort: 服务器监听客户端连接的端口, 也即客户端尝试连接的端口, 默认值是 2181

dataDir: ZooKeeper 用来存储内存数据库快照的目录, 并且除非指定其它目录, 否则数据库更新的事务日志也将会存储在该目录下。建议配置 dataLogDir 参数来指定 ZooKeeper 事务日志的存储目录

initLimit: follower连接并同步到leader的初始化连接时间,它是通过tickTime的倍数表示。当初始化连接时间超过设置的时间时,则连接失败

syncLimit: follower和leader之间发送消息时请求和应答的时间长度,如果follower在设置的时间范围内不能和leader通信,那么该follower将被丢弃,它也是按tickTime的倍数进行配置的

server.A=B:C:D

其中 A 是一个数字,表示这个是第几号服务器,即Server ID。(需要在数据目录(即 dataDir 指定的目录) 下创建一个 myid 文件, 该文件只有一行内容, 即对应于每台服务器的Server ID);

B 是这个服务器的 ip 地址;

C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;

D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

3. 操作命令

1. 启动服务

zkServer.sh start [zoo_config_path] 启动服务

zkServer.sh status [zoo_config_path] 查看服务器状态

2. 客户端连接

zkCli.sh -server host:port

3. 操作命令

​ (1). connect host:port 连接服务器

​ (2) . get path 获取 ZooKeeper 指定节点的数据内容和相关信息

​ (3). ls path 查看指定节点下的第一级子节点

​ (4). create [-s] [-e] path data acl

​ -s 用于指定节点是否是顺序的, -e 用于指定节点是否是临时的, -s 和 -e 是可选的, 默认创建持久节点。

​ path用于指定节点路径, data 表示节点数据, acl 用于权限控制, 默认情况下不做权限控制

​ (5). delete path [version] 删除指定的节点, 如果要删除的节点有子节点, 则删除会失败

​ (6). rmr path 删除节点及其子节点

​ (7). set path data 更新节点的数据

​ (8). stat path [watch] 输出节点的统计信息

​ (9). printwathches on|off 设置和显示监视状态

​ (10). delquota [-n | -b] path 删除配额

​ (11). setquota -n|-b val path 设置子节点个数和数据长度配额

​ setquota –n 4 /zookeeper/node 设置/zookeeper/node子节点个数最大为4

​ setquota –b 100 /zookeeper/node 设置/zookeeper/node节点长度最大为100

​ (12). listquota path

​ (13). addauth scheme auth 节点认证

​ (14). ls2 path [watch] ls命令的扩展,比ls命令多输出本节点信息

​ (15). setAcl path acl 权限控制

​ (16). getAcl path 查看权限

​ (17). sync path

​ 强制同步由于请求在半数以上的zk server上生效就表示此请求生效,

​ 那么就会有一些zk server上的数据是旧的。sync命令就是强制同步所有的更新操作

​ (18). redo cmdno 再次执行某命令, 需与history配合使用

​ (19). history 历史命令

​ (20). close 关闭session

​ (21). quit 退出

4. ACL 权限控制详细

​ ZK的节点有5种操作权限: CREATE、READ、WRITE、DELETE、ADMIN,也就是 增、删、改、查、管理权限,这5种权限简写为crwda。

特性:

​ 1. ZooKeeper的权限控制是基于每个znode节点的,需要对每个节点设置权限**

​ 2. 每个znode支持设置多种权限控制方案和多个权限

​ 3. 子节点不会继承父节点的权限,客户端无权访问某节点,但可能可以访问它的子节点

权限相关命令:

geAcl <path> 读取权限

setAcl <path> <acl> 设置权限

addauth <scheme> <auth> 添加认证用户

身份的认证有4种方式:

​ 1. world:默认方式,相当于全世界都能访问

​ 设置方式: setAcl <path> world:anyone:<acl>

​ 2. auth:代表已经认证通过的用户(可以通过addauth digest user:pwd 来添加授权用户)

​ 设置方式:addauth digest <user>:<password> #添加认证用户

setAcl <path> auth:<user>:<acl>

​ 3. digest:即用户名:密码方式认证,业务系统中最常用的

setAcl <path> digest:<user>:<password>:<acl>

​ 这里的password是经过SHA1及BASE64处理的密文,在SHELL中可以通过以下命令计算:

echo -n <user>:<password> | openssl dgst -binary -sha1 | openssl base64

​ 4. ip:使用Ip地址认证

​ 设置方式: setAcl <path> ip:<ip>:<acl>

Kazoo

python连接zookeeper的库

pip install kazoo