tdb是一个简易的单机kv数据库,samba中有些组件需要依赖它。而CTDB(clustered tdb)可以将tdb变成一个分布式kv数据库。各个tdb节点中数据的同步迁移依赖于ctdb节点,原理见:CTDB_database_design。
用法
参考test目录下的例子。
操作tdb的程序需要作为ctdb daemon进程的一个client,通过unix domain与ctdb daemon进程建链通信。
操作数据库时不再调用tdb原生的借口,而是使用ctdb_client.h中封装的操作接口。
使用ctdb_client.h中的接口会依赖好几个ctdb中的.c文件,因此想单独拿出来编译比较麻烦(直接在ctdb的waf中添加一个新的编译命令是不是更方便)。
关于ctdb链路
ctdb有两个进程:daemon和recover,后者是前者的子进程。
集群中daemon进程之间会相互建链(tcp),每个节点daemon和recover之间会建链(unix domain,daemon是服务端),ctdb工具也是通过unix domain的方式和daemon进程建链。和daemon建立unix domain通信的进程被叫做daemon的client(如:recover;ctdb工具;自定义的操作分布式tdb的进程)。
daemon和recover的通信相关代码简单介绍
recover是作为客户端,主动向daemon建链,但是它有时也需要向集群中其他daemon进程发控制消息,方式是,先把消息发到本地的daemon,本地daemon进程转发消息到相应的其他节点的daemon。recover发消息是同步的(没注意有没有异步),发了一条控制消息就原地等reply或等超时,用的都是tevent_loop_once。
daemon是服务端,同时监听tcp消息(集群其他节点的daemon进程)和unix domain(client)。它处理消息是异步的,用的是tevent_loop_wait。
recover和daemon都是单线程的。