1. CTDB概述
CTDB是一个集群TDB数据库,可以被Samba或者其他的应用使用来存储数据。如果一个应用是使用TDB来暂时存放数据,那么这个应用可以很轻松的使用CTDB扩展为集群模式。CTDB提供与TDB相同的函数接口,并且是构建在多台物理机器上的集群。
特性:
- CTDB提供一个横跨多个节点的并且数据一致、锁一致的TDB数据库;
- CTDB非常快速;
- 对于节点故障,CTDB将自动恢复和修复其所管理的所有TDB数据库;
- CTDB是Samba3/4的一个核心组件;
- CTDB提供高可用特性,例如节点监控、节点切换、IP切换;
- CTDB为其多个节点上的应用提供可靠的传输通道;
- CTDB提供可热拔插的后端传输通道,目前实现了TCP和IB;
- CTDB可以提供为应用指定特定的管理脚本,使得应用能够实现高可用。
2. CTDB配置
CTDB的配置相对简单,对于搭建一个三节点的CTDB配置步骤说明如下。
2.1 节点信息
节点名称 | 节点IP | 说明 |
---|---|---|
node1 | 10.10.10.90 | CTDB节点 |
node2 | 10.10.10.91 | CTDB节点 |
node3 | 10.10.10.92 | CTDB节点 |
node4 | 10.10.10.99 | 共享存储 |
说明:此处为快速简单的搭建ctdb集群,采用单节点NFS共享,不考虑NFS共享的可靠性。
实际应用时,共享存储应由高可靠的集群担当。
2.2搭建CTDB集群
2.2.1 安装软件
在三个CTDB节点分别安装ctdb,nfsd,samba,可以通过命令 yum install ctdb依次进行安装;
2.2.2 创建共享存储
在node4创建一个共享目录/share,并设置权限777,在/etc/exports文件中添加如下:
/share *(sync,rw)
然后在节点4上执行如下命令:
# exoprtfs -rv
CTDB节点之间需要通过一个共享的存储来实现其基于锁机制的选举过程。
2.2.3 挂载共享存储
在三个CTDB节点上分别执行如下命令:
# mount -t nfs 10.10.10.99:/share /mnt
node1, node2,node3上都挂载了node4共享出来的目录,这样三个节点就可以访问到一个相同的锁文件了。
2.2.4 修改CTDB服务配置
在三个CTDB节点上修改如下文件:
~# vi /etc/sysconfig/ctdb
CTDB_RECOVERY_LOCK=/mnt/ctdb_lock
CTDB_MANAGES_SAMBA=yes
CTDB_MANAGES_WINBIND=yes
CTDB_MANAGES_NFS=yes
这个步骤中主要配置CTDB管理哪些应用。还有就是指定共享锁文件的目录。
2.2.5 修改CTDB节点配置
在三个CTDB节点上创建或者修改如下文件:
~# vi /etc/ctdb/nodes
10.10.10.91
10.10.10.92
10.10.10.90
2.2.6 修改CTDB IP配置
在三个CTDB节点上创建或者修改如下文件:
~# vi /etc/ctdb/public_addresses
10.0.0.1/24 eth0
其中eth0是节点上存在的并且在线的网卡。10.0.0.1就是配置给这个三个节点CTDB集群对外提供业务的IP。
2.2.7 重启CTDB服务
在三个CTDB节点上执行如下命令:
~# systemctl restart ctdb
2.2.8 查看CTDB服务状态
在节点1上执行:
# ctdb status
Number of nodes:3
pnn:0 10.10.10.91 OK
pnn:1 10.10.10.92 OK
pnn:2 10.10.10.90 OK (THIS NODE)
Generation:1699238992
Size:3
hash:0 lmaster:0
hash:1 lmaster:1
hash:2 lmaster:2
Recovery mode:NORMAL (0)
Recovery master:1
[root@xenserver-yzulkyuc ~]#
集群搭建完成。
说明:如果节点数量较少,可以将某一个CTDB节点作为共享存储,同时节点数量也可以为1。但是将CTDB节点作为共享存储的话,需要将/etc/sysconfig/ctdb 文件中的CTDB_MANAGES_NFS设置位NO。
3. CTDB源码分析
3.1 关键数据结构
3.1.1 ctdb
CTDB有两个进程构成,ctdbd和recoveryd。在这个两个进程进行各种事物处理时,一般都带有一个参数:ctdb。该数据结构是包含了基本上所有逻辑所需或者相关的数据。在CTDBD启动阶段就是对ctdb数据结构的填充阶段。
struct