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