Zookeeper 简介
Zookeeper是一个高效的分布式协调服务,可以提供配置信息管理、命名、分布式同步、集群管理、数据库切换等服务。它不适合用来存储大量信息,可以用来存储一些配置、发布与订阅等少量信息。Hadoop、Storm、消息中间件、RPC服务框架、分布式数据库同步系统,这些都是Zookeeper的应用场景。
Zookeeper集群中节点个数一般为奇数个(>=3),若集群中Master挂掉,剩余节点个数在半数以上时,就可以推举新的主节点,继续对外提供服务。
Zookeeper集群搭建
- 下载zookeeper对应的tar包,上传
- 将解压后的文件名zookeeper-3.4.10修改为zookeeper。tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/
- 在三个zookeeper节点配置环境变量
- vim /etc/profile
- 添加export ZOOKEEPER_HOME=/usr/local/zookeeper
- 在path中添加$ZOOKEEPER_HOME/bin
- 执行source /etc/profile 使环境变量立即生效
- 修改zookeeper中conf目录下的zoo_sample.cfg为zoo.cfg
修改三个zookeeper节点中的zoo.cfg文件,修改dataDir- 在zookeeper目录下,创建data目录。在3个zookeeper节点中data目录下分别创建myid文件,并分别添加内容0、1、2
- 启动zookeeper
-
ZK常见命令
命令 | 含义 |
---|---|
ls / | 查找根目录 |
create /test abc | 创建节点并赋值 |
get /test | 获取指定节点的值 |
set /test cb | 设置已存在节点的值 |
rmr /test | 递归删除节点 |
delete /test/test01 | 删除不存在子节点的节点 |
ZK 的java连接API
/**
*
*/
package zookeeper;
import java.util.List;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
public class zk {
public static void main(String[] args) throws Exception {
String connectionString = "master:2181,node1:2181,node2:2181";
int sessionTimeout = 30000;
ZooKeeper zk = new ZooKeeper(connectionString,sessionTimeout,null);
zk.create("/testRoot","testRoot".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
zk.create("/testRoot/child1","child1_data".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
List<String>children=zk.getChildren("/testRoot",new Watcher() {
public void process(WatchedEvent event) {
System.out.println("this is children node event");
System.out.println(event);
}
});
System.out.println(children);
zk.delete("/testRoot", -1);
zk.delete("/testRoot/child1", -1);
zk.close();
}
}