一、zookeeper有什么用?
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集, [1] 提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
ZooKeeper提供c接口:《Zookeeper C API 指南》
二、zookeeper简单使用
- zookeeper服务的开启、停止及状态查询
cd $zookeeper_Home
./bin/zkServer.sh start #开启
./bin/zkServer.sh status #状态
./bin/zkServer.sh stop #停止
在状态查询中,如果显示 Mode: standalone,则表示为单机模式。集群模式需要在./conf/zoo.cfg中配置server1,server2,…servern3的IP地址,及客户端端口和选举端口。
- zookeeper客户端连接
./bin/zkCli.sh #客户端连接2181端口
- zookeeper节点管理
ls /
create /zkPro mydata #创建节点
ls /
get /zkPro
set /zkPro mydata123 #设置
delete /zkPro #删除节点
zookeeper的简单使用见博文《Zookeeper入门看这篇就够了》。
zookeeper的常用命令《zookeeper常用命令》。
三、一些问题
1. 权限管理
《zookeeper的ACL权限控制》
个人理解digest是比auth方式更加安全的一种方式,digest需要把密码经过sha1加密和base64编码。
addauth可以说是添加认证,其实也就是登陆。
2. zookeeper在codis中的使用
codis集群利用到了zookeeper。
codis各组建中有两个需要配置zookeeper,一个是proxy,一个dashboard。
其中proxy把代理节点信息注册到/jodis节点下, dashboard把缓存集群的一系列信息注册到/codis节点下。
jodis下的信息如下:
其中的codis-test是集群名称。
codis下的信息如下:
以上截图可以看到jodis和codis配置了Acl权限,配置方法就是编辑proxy.toml中的jodis_auth和dashboard.toml中的coordinator_auth。
格式为 “user:passwd”
如果不做配置,则jodis节点和codis节点的Acl为world。
生产环境中,codis的zookeeper被扫描到安全问题,应对策略为根目录添加ip白名单,codis集群添加digest认证。