ZooKeeper Client API 安装及使用指北

下载

bash 复制代码
wget https://archive.apache.org/dist/zookeeper/zookeeper-3.5.4-beta/zookeeper-3.5.4-beta.tar.gz

解压

bash 复制代码
tar -zxf zookeeper-3.5.4-beta.tar.gz

安装

bash 复制代码
cd zookeeper-3.5.4-beta/src/c/
./configure
make
sudo make install

make 这一步大概率会出现报错:

bash 复制代码
User
make[1]: Entering directory '/root/zookeeper-3.5.4-beta/src/c'
/bin/bash ./libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.  -I./include -I./tests -I./generated   -Wall -Werror -Wdeclaration-after-statement -g -O2 -D_GNU_SOURCE -MT zookeeper.lo -MD -MP -MF .deps/zookeeper.Tpo -c -o zookeeper.lo `test -f 'src/zookeeper.c' || echo './'`src/zookeeper.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I./include -I./tests -I./generated -Wall -Werror -Wdeclaration-after-statement -g -O2 -D_GNU_SOURCE -MT zookeeper.lo -MD -MP -MF .deps/zookeeper.Tpo -c src/zookeeper.c  -fPIC -DPIC -o .libs/zookeeper.o
src/zookeeper.c: In function 'print_completion_queue':
src/zookeeper.c:2530:5: error: argument 1 null where non-null expected [-Werror=nonnull]
 2530 |     fprintf(LOGSTREAM,"Completion queue: ");
      |     ^~~~~~~
In file included from ./include/zookeeper.h:35,
                 from src/zookeeper.c:28:
/usr/include/stdio.h:312:12: note: in a call to function 'fprintf' declared 'nonnull'
  312 | extern int fprintf (FILE *__restrict __stream,
      |            ^~~~~~~
src/zookeeper.c:2532:9: error: argument 1 null where non-null expected [-Werror=nonnull]
 2532 |         fprintf(LOGSTREAM,"empty\n");
      |         ^~~~~~~
/usr/include/stdio.h:312:12: note: in a call to function 'fprintf' declared 'nonnull'
  312 | extern int fprintf (FILE *__restrict __stream,
      |            ^~~~~~~
src/zookeeper.c:2538:9: error: argument 1 null where non-null expected [-Werror=nonnull]
 2538 |         fprintf(LOGSTREAM,"%d,",cptr->xid);
      |         ^~~~~~~
/usr/include/stdio.h:312:12: note: in a call to function 'fprintf' declared 'nonnull'
  312 | extern int fprintf (FILE *__restrict __stream,
      |            ^~~~~~~
src/zookeeper.c:2541:5: error: argument 1 null where non-null expected [-Werror=nonnull]
 2541 |     fprintf(LOGSTREAM,"end\n");
      |     ^~~~~~~
/usr/include/stdio.h:312:12: note: in a call to function 'fprintf' declared 'nonnull'
  312 | extern int fprintf (FILE *__restrict __stream,
      |            ^~~~~~~
cc1: all warnings being treated as errors
Makefile:1025: recipe for target 'zookeeper.lo' failed
make[1]: *** [zookeeper.lo] Error 1
make[1]: Leaving directory '/root/zookeeper-3.5.4-beta/src/c'
Makefile:684: recipe for target 'all' failed
make: *** [all] Error 2

主要原因还是linux的版本问题,这边用的是ubuntu18+gcc13,网上找了一圈解决方法少之又少,基本是通过换centos解决,其实只需要将当前目录 Makefile 文件中 -Werror 选项去除即可,这样报错就会变成警告。

本地集群搭建

新建三个文件夹,将原先zookeeper-3.5.4-beta中的所有文件分别复制到三个文件夹中。

修改zoo.cfg中的datDirclientPort,同时添加集群的配置信息:
server.A = B:C:D

A是一个数字,代表是哪台机器,对应myid里面的值。

B是指这台服务器地址。

C是leader和follow之间进行交换信息的端口号。

D是当集群中的leader节点挂掉后,要进行重新选举leader,这个端口号就是用来执行选举的时候进行互相通信的端口号。

zkData文件夹中新建myid文件,标识是哪台机器,文件里填写数字即可。

通过bin文件夹下zkServer.sh start/stop/status管理服务端。zkCli.sh管理客户端。

什么是ZooKeeper?

Zookeeper实际上运行在Zab协议(ZooKeeper Atomic Broadcast)之上,Zab几乎与Raft是一样的。从Raft说起,Raft实际上就是一个库。你可以在一些更大的多副本系统中使用Raft库。但是Raft不是一个你可以直接交互的独立的服务,你必须要设计你自己的应用程序来与Raft库交互。所以这里有一个有趣的问题:是否有一些有用的,独立的,通用的系统可以帮助人们构建分布式系统?是否有这样的服务可以包装成一个任何人都可以使用的独立服务,并且极大的减轻构建分布式应用的痛苦?所以,对于一个通用的服务,API应该是怎样?Zookeeper可以被认为是一个通用的协调服务(General-Purpose Coordination Service)。

Zookeeper 允许客户端将读请求发送给任意副本,并由副本根据自己的状态来响应读请求。副本的 Log 可能并没有拥有最新的条目,所以尽管系统中可能有一些更新的数据,这个副本可能还是会返回旧的数据。

Zookeeper 的一致性保证:写请求是线性一致的、 FIFO 客户端序列(所有客户端发送的请求以一个特定的序列执行,通过 zxid 维护)。

使用场景

TODO

Client API

TODO

相关推荐
Tim风声(网络工程师)2 小时前
不同射频对应不同mac地址(查找无线用户连接AP信息)
服务器·网络·tcp/ip·智能路由器·无线ap
ajassi20003 小时前
开源 C++ QT Widget 开发(十五)多媒体--音频播放
linux·c++·qt·开源
wan5555cn4 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
JosieBook4 小时前
【远程运维】Linux 远程连接 Windows 好用的软件:MobaXterm 实战指南
linux·运维·windows
文档搬运工4 小时前
Linux MInt启动速度的优化
linux
Broken Arrows5 小时前
Linux学习——管理网络安全(二十一)
linux·学习·web安全
雁于飞6 小时前
vscode中使用git、githup的基操
笔记·git·vscode·学习·elasticsearch·gitee·github
Light606 小时前
领码方案|Linux 下 PLT → PDF 转换服务超级完整版:异步、权限、进度
linux·pdf·可观测性·异步队列·plt转pdf·权限治理·进度查询
鳄鱼杆6 小时前
服务器 | Docker应用开发与部署的实践以及阿里云镜像加速配置
服务器·阿里云·docker
rannn_1116 小时前
【Javaweb学习|实训总结|Week1】html基础,CSS(选择器、常用样式、盒子模型、弹性盒布局、CSS定位、动画),js(基本类型、运算符典例)
css·笔记·学习·html