zookeeper介绍 和 编译踩坑

zookeeper 分布式协调服务

ZooKeeper原理及介绍 - 鹿泉 - 博客园

Zookeeper是在分布式环境中应用非常广泛,它的优秀功能很多,比如分布式环境中全局命名服务,服务注册中心,全局分布式锁等等。 本项目使用其分布式服务配置中心,记录所有的服务器的ip和端口号。它是一个为分布式应用提供一致性协调服务的中间件,对微服务的 注册与发现过程 解除 客户端和服务提供者的紧耦合。

编译

zookeeper已经提供了原生的C/C++和Java API开发接口,需要通过源码编译生成。也就是会所linux下的C++开发,需要手动编译zookeeper的client,生成库文件。

新版本的zookeeper源码编译非常复杂,设计Java的ant/maven等。故编译老版本的3.4.10版本,文件附在文章末尾。

但新版本的C++编译器会对老版本的源码报错,故更改MakeFile文件的第548行,忽略报错。原文链接如下:Linux安装zookeeper原生C API接口出现的make编译错误_error: '%d' directive writing between 1 and 5 byte-CSDN博客

进入解压目录的src/c下面,过程如下:

bash 复制代码
~/package/zookeeper-3.4.10/src/c$ sudo ./configure

~/package/zookeeper-3.4.10/src/c$ sudo make

~/package/zookeeper-3.4.10/src/c$ sudo make install
使用(假设zk为根目录)
  • 可以在zk/conf/zoo.conf配置文件中更改zk的数据存放目录,可以设置为zk/data目录
  • 默认工作端口2181
  • zk/bin/zkServer.sh start 启动服务
  • zk/bin/zkCli.sh使用客户端连接服务
  • zk客户端常用命令:ls使用绝对目录、get查看节点数据、create创建节点(父节点需存在)、set修改节点的值、delete删除节点(需无子节点)
zk的数据组织 - znode节点
  • zk的注册中心保存了能提供的服务的名称 ,以及URL
  • 首先这些服务会在注册中心进行注册,当客户端来查询的时候,只需要给出名称,注册中心就会给出一个URL。
  • 所有的客户端在访问服务前,都需要向这个注册中心进行询问,以获得最新的地址。
  • 注册中心可以是树形结构,每个服务下面有若干节点,每个节点表示服务的实例。
  • 注册中心和各个服务实例直接建立Session,要求实例们定期发送心跳,一旦特定时间收不到心跳,则认为实例挂了,删除该实例。
zk的watcher机制

一种事件回调机制,zkserver节点信息发生改变时,会调用zkclient的回调函数,保证能及时接收到服务节点信息。

相关推荐
海绵天哥3 小时前
LeetCode Hot 100 | 链表(下)· 分组翻转与设计(C++ 题解)
c++·leetcode·链表
choumin3 小时前
行为型模式——中介者模式
c++·设计模式·中介者模式·行为型模式
Lee_jerome14 小时前
《C/C++编译全家桶:g++四阶段、.a与.so区别、CMake构建、ARM交叉编译,这篇全讲透了》
c语言·开发语言·arm开发·c++·编译·cmake·cmakelists
冰心孤城14 小时前
C++ 与 C#混合编程 示例 (基于VS)
java·c++·c#
珠***格15 小时前
分布式光伏电站:四可装置如何实现 “可观、可测、可控、可调”
网络·人工智能·分布式·架构·能源
一只旭宝17 小时前
C++手写shared_ptr共享智能指针|原子引用计数、强弱引用控制块、赋值重载底层深度剖析
开发语言·c++·面试
L16247617 小时前
消息队列(MQ)总览:RabbitMQ & Kafka 完整手册
分布式·kafka·rabbitmq
开发者联盟league18 小时前
Java 通过 JNA 调用 C++ DLL:关键流程总结
java·c++·jna
库克克19 小时前
【C++】智能指针
java·开发语言·c++
fīɡЙtīиɡ ℡20 小时前
分布式ID生成策略
java·分布式·算法