1.Zookeeper的安装使用
在官网上下载zk的安装包(http://labs.renren.com/apache-mirror/zookeeper/),解压后cd到zk的目录下。
单机版安装方法:
在conf目录下创建一个 “zoo.cfg”的默认配置文件,稍后我们将用到它,编辑其内容为:
tickTime=2000 dataDir=~/src/zktest clientPort=2181
zk的存储结构类似于文件系统,分为很多节点,每个节点会有值和一些权限控制信息。
2.启动service和client
service:bin/zkServer.sh start
client:bin/zkCli.sh -server 127.0.0.1:2181
启动之后可以用help命令察看命令列表
zk的存储结构类似于
3.编写客户端的一个HelloWorld
3.1建立节点信息:
struct ACL acl[] = { {ZOO_PERM_ALL,{"world","anyone"}} }; int demo_acl_size1 = sizeof(acl)/sizeof(acl[0]); struct ACL_vector acl_vector = { demo_acl_size1, acl }; int rc = zoo_create(this->zh, “/test”, "test_value", 10, &acl_vector, 0, 0, 0); if (rc !=ZOK) { std::cerr<< zerror(rc) <<std::endl; exit(-1); }
在zk的命令行客户端中 输入命令 get /test 就会发现值“test_value ”已存在于节点 /test 下。
3.1向节点中赋值
void zk_set(const char *path, const char *value){ int len = strlen(value); Stat stat; int rc = zoo_set2(this->zh, path, value, len, -1, &stat); if (rc != ZOK) { std::cerr << zerror(rc) << std::endl; } //std::cout<<"Set Value:"<<value<<" for path:"<<path<<" succeed!"<<std::endl; }
3.2取得节点中的值
char *zk_get(const char *path){ int buf_len = sizeof(this->buf); struct Stat stat; //zhandle_t *zh1 = zookeeper_init("127.0.0.1:2181", 0, 10000, 0, 0, 0); int rc = zoo_get(zh, path, 0, this->buf, &buf_len, &stat); if (rc != ZOK){ std::cerr<< zerror(rc) <<std::endl; exit(-1); } std::cout<<strlen(buf)<<std::endl; return this->buf; }