zookeeper学习
来源:互联网 发布:无线传感器网络 编辑:程序博客网 时间:2024/05/29 18:01
公司用到了zookeeper,没有让做相关开发,因此仅仅先简单了解下。
1. zookeeper安装
安装环境
yum install java-1.7.0-openjdk-devel.i686如需卸载使用:rpm -e --nodeps tzdata-java-2015g-1.el7.noarch查看java环境变量:[root@localhost zookeeper-3.4.6]# env | grep javaJAVA_HOME=/usr/java/jdk1.7.0_71而目标java目录为:[root@localhost zookeeper-3.4.6]# ls /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141/bin/java/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141/bin/java修改环境变量:[root@localhost zookeeper-3.4.6]# export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141/[root@localhost zookeeper-3.4.6]# env | grep javaJAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141/
2.修改配置文件
[root@localhost zookeeper-3.4.6]# cp conf/zoo_sample.cfg conf/zoo.cfg[root@localhost zookeeper-3.4.6]# vim conf/zoo.cfg dataDir=/var/lib/zookeeper (保存内存数据库快照信息的位置)
3.启动
[root@localhost zookeeper-3.4.6]# bin/zkServer.sh startJMX enabled by defaultUsing config: /home/bo/zookeeper-3.4.6/bin/../conf/zoo.cfgStarting zookeeper ... STARTED查看进程:[root@localhost zookeeper-3.4.6]# ps -ef | grep zookroot 5857 1 0 10:47 pts/0 00:00:00 /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.141//bin/java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /home/bo/zookeeper-3.4.6/bin/../build/classes:/home/bo/zookeeper-3.4.6/bin/../build/lib/*.jar:/home/bo/zookeeper-3.4.6/bin/../lib/slf4j-log4j12-1.6.1.jar:/home/bo/zookeeper-3.4.6/bin/../lib/slf4j-api-1.6.1.jar:/home/bo/zookeeper-3.4.6/bin/../lib/netty-3.7.0.Final.jar:/home/bo/zookeeper-3.4.6/bin/../lib/log4j-1.2.16.jar:/home/bo/zookeeper-3.4.6/bin/../lib/jline-0.9.94.jar:/home/bo/zookeeper-3.4.6/bin/../zookeeper-3.4.6.jar:/home/bo/zookeeper-3.4.6/bin/../src/java/lib/*.jar:/home/bo/zookeeper-3.4.6/bin/../conf:.:%JAVA_HOME%/lib/dt.jar:%JAVA_HOME%/lib/tools.jar -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /home/bo/zookeeper-3.4.6/bin/../conf/zoo.cfgroot 6224 10408 0 10:52 pts/0 00:00:00 grep zook
4.如果进程不存在
可以查看输出;[root@localhost zookeeper-3.4.6]# cat zookeeper.out nohup: failed to run command `/usr/java/jdk1.7.0_71/bin/java': No such file or directory此时原因是环境变量未配好。
5.运行客户端
[root@localhost zookeeper-3.4.6]# bin/zkCli.sh...[zk: localhost:2181(CONNECTED) 0] help[zk: localhost:2181(CONNECTED) 5] create /zk_test mydata #创建一个新的znodeCreated /zk_test[zk: localhost:2181(CONNECTED) 18] ls /[zookeeper, zk_test][zk: localhost:2181(CONNECTED) 17] get /zk_test #验证数据是否与znode关联上my_datacZxid = 0x54ctime = Sat May 13 11:13:08 CST 2017mZxid = 0x54mtime = Sat May 13 11:13:08 CST 2017pZxid = 0x54cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 7numChildren = 0[zk: localhost:2181(CONNECTED) 19] set /zk_test junk #改变数据与zk_test的关联cZxid = 0x54ctime = Sat May 13 11:13:08 CST 2017mZxid = 0x59mtime = Sat May 13 11:14:39 CST 2017pZxid = 0x54cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 4numChildren = 0[zk: localhost:2181(CONNECTED) 20] get /zk_test #获取数据,junk改变junkcZxid = 0x54ctime = Sat May 13 11:13:08 CST 2017mZxid = 0x59mtime = Sat May 13 11:14:39 CST 2017pZxid = 0x54cversion = 0dataVersion = 1aclVersion = 0ephemeralOwner = 0x0dataLength = 4numChildren = 0[zk: localhost:2181(CONNECTED) 21] delete /zk_test #删除节点
6.开始编程(C接口)
编译安装库
cd zookeeper-3.4.6/src/c./configuremakemake install
示例:
#include<stdio.h> #include<string.h> #include"zookeeper.h" #include"zookeeper_log.h" void zktest_watcher_g(zhandle_t* zh, int type, int state, const char* path, void* watcherCtx) { printf("Something happened.\n"); printf("type: %d\n", type); printf("state: %d\n", state); printf("path: %s\n", path); printf("watcherCtx: %s\n", (char *)watcherCtx); } //自己的监听函数 void watcher_myself(zhandle_t *zh,int type,int state,const char *path,void *watcherCtx) { printf("just for testing\n"); printf("path:%s\n",path); } //同步方式创建节点 void create(zhandle_t *zkhandle,char *str) { char path_buffer[64]; int bufferlen=sizeof(path_buffer); printf("同步方式创建节点-----------------------\n"); int flag = zoo_create(zkhandle,str,"hahah",5, &ZOO_OPEN_ACL_UNSAFE,0, path_buffer,bufferlen); if (flag!=ZOK) { printf("节点创建失败 \n"); exit(EXIT_FAILURE); } else { printf("创建的节点名称为:%s\n",path_buffer); } } //同步方式获取节点数据 void get(zhandle_t* zkhandle, char* dir) { printf("同步方式获取节点数据-----------------------\n"); char buffer1[64]; int bufferlen1=sizeof(buffer1); int flag1=zoo_get(zkhandle,dir,0, buffer1,&bufferlen1,NULL); if (flag1 ==ZOK) { printf("节点/xyz3的数据为: %s\n",buffer1); } } //exists void exists(zhandle_t *zkhandle,char *str) { int flag = zoo_exists(zkhandle,str,1,NULL); } int wexists(zhandle_t *zkhandle,char *str) { int flag=zoo_wexists(zkhandle,str,watcher_myself,"test",NULL); return flag;} //同步方式获得子节点信息 void getChildren(zhandle_t *zkhandle,char *str) { struct String_vector strings; struct Stat stat; int flag = zoo_wget_children2(zkhandle,str, watcher_myself,"testgetChildren", &strings,&stat); if (flag==ZOK) { int32_t i=0; for (;i<strings.count;++i) printf("%s\n",strings.data[i]); } } //获取ACL信息 void getACL(zhandle_t *zkhandle,char *str) { struct ACL_vector acl; struct Stat stat; int flag = zoo_get_acl(zkhandle,str,&acl,&stat); if (flag==ZOK) { printf("-----------------the ACL of %s:\n------------",str); printf("%d\n",acl.count); printf("%d\n",acl.data->perms); printf("%s\n",acl.data->id.scheme); printf("%s\n",acl.data->id.id); } } void delete(zhandle_t *zkhandle,char *str) { int flag = zoo_delete(zkhandle,str,-1); if (flag==ZOK) { printf("delete node success\n"); } } int main(int argc, const char *argv[]) { const char* host = "192.168.1.106:2181"; int timeout = 30000; char buffer[512]; int *bufferlen; zoo_set_debug_level(ZOO_LOG_LEVEL_WARN); //set loglevel zhandle_t* zkhandle = zookeeper_init(host,zktest_watcher_g, timeout, 0, "hello zookeeper.", 0); if (zkhandle ==NULL) { fprintf(stderr, "Error when connecting to zookeeper servers...\n"); exit(EXIT_FAILURE); } char str[]="/zk_test"; if(wexists(zkhandle,str) < 0) { printf("%s not existed..\n", str); create(zkhandle,str); } get(zkhandle, str); getChildren(zkhandle,str); getACL(zkhandle,str); delete(zkhandle,str); return 0;}
编译:
gcc test.c -I ../include/ -lzookeeper_mt (注意将.h文件都移至include目录)
运行:
[bo@localhost test_z]$ ./a.out Something happened.type: -1state: 3path: watcherCtx: hello zookeeper./zk_test not existed..同步方式创建节点-----------------------just for testingpath:/zk_test创建的节点名称为:/zk_test同步方式获取节点数据-----------------------节点/xyz3的数据为: hahah-----------------the ACL of /zk_test:------------131worldanyonejust for testingpath:/zk_testdelete node success
参考:
http://www.cnblogs.com/haippy/archive/2013/02/21/2919365.html
后续学习:
1.zookeeper分布式锁
2.watch功能
0 0
- zookeeper学习
- ZooKeeper学习
- zookeeper学习
- zookeeper学习
- zookeeper 学习
- zookeeper学习
- Zookeeper学习
- zookeeper学习
- Zookeeper学习
- zookeeper学习
- zookeeper学习
- zookeeper学习
- zookeeper学习
- 学习zookeeper
- Zookeeper 学习
- zookeeper学习
- zookeeper学习
- zookeeper学习
- 1083: 十->二进制转换
- hihoCoder
- 自定义 React Native 二维码扫描组件(简单,易用!)
- python中list的四种查找方法
- resin3.10 resin4:多实例部署使用记录。
- zookeeper学习
- codeforces 514d[补]
- JS 性能优化工具 Facebook Prepack
- Odoo10 开发者文档(2)--建立一个网站
- CTF逆向工程入门_2
- mkimage使用详解
- AsyncTask
- hihocoder 1304 : 搜索一·24点(DFS+回溯)
- linux 文本处理命令cat