CTDB 脚本配置文件指南
适用版本:CTDB ≥ 4.20,Ubuntu 20.04 LTS 及更新版本。
文件定位与优先级
每个事件脚本按以下顺序读取配置,后读入者优先:
-
全局文件
/etc/ctdb/script.options
存放所有脚本共享的通用变量,避免重复定义。 -
脚本专用文件
SCRIPT.options
(与脚本同名、同目录,仅后缀为.options
)
当变量名冲突时,此文件内容覆盖全局文件。
语法与阈值表达式
- 仅支持 Shell 变量赋值 与 行注释
#
。 - 布尔值统一使用
yes
/no
。 - 阈值语法:
WARNING_THRESHOLD[:ERROR_THRESHOLD]
- 仅给出警告阈值:当监控指标 ≥ 该值时记录 warning,脚本继续运行。
- 同时给出错误阈值:当指标 ≥ 错误阈值时脚本以非 0 退出,节点会被标记为 UNHEALTHY。
网络事件脚本
10.interface – 公网接口与连接重置
变量 | 取值范围 | 默认值 | 说明 |
---|---|---|---|
CTDB_KILLTCP_USE_SS_KILL |
yes / try / no | no | 是否在 releaseip 阶段使用 ss -K 强制重置 TCP 连接。 yes :仅用 ss; try :先 ss,失败退回 ctdb_killtcp; no :始终使用 ctdb_killtcp。 |
CTDB_PARTIALLY_ONLINE_INTERFACES |
yes / no | no | yes 时,只要还有一个接口在线,节点状态为 PARTIALLYONLINE 而非 UNHEALTHY。 注意:与 NAT 网关或 LVS 同时启用时,需确保对应接口必须在线,否则流量会中断。 |
11.natgw – NAT 网关
场景:当节点未持有任何公网 IP 时,通过 leader 节点做 SNAT,保证节点仍可访问外部网络。
变量 | 是否必填 | 示例值 | 说明 |
---|---|---|---|
CTDB_NATGW_NODES |
✔ | /etc/ctdb/natgw_nodes |
节点列表,每行格式:IPADDR [follower-only] 。标记 follower-only 的节点永远不会被选为 leader。 |
CTDB_NATGW_PRIVATE_NETWORK |
✔ | 192.168.1.0/24 |
需做 NAT 的私网段。 |
CTDB_NATGW_PUBLIC_IP |
✔(leader) | 10.0.0.227/24 |
Leader 节点出向 SNAT 地址,不能是 CTDB 公网 IP。 |
CTDB_NATGW_PUBLIC_IFACE |
✔(leader) | eth0 |
上述地址所在接口。 |
CTDB_NATGW_DEFAULT_GATEWAY |
✘ | 10.0.0.1 |
Leader 节点额外默认网关,用于出向流量。 |
CTDB_NATGW_STATIC_ROUTES |
✘ | 10.0.0.0/24 172.16.5.0/24@10.0.0.254 |
为特定网段创建静态路由而非整网默认路由,可避免流量绕路。 |
最小可运行配置示例
# /etc/ctdb/script.options
CTDB_NATGW_NODES=/etc/ctdb/natgw_nodes
CTDB_NATGW_PRIVATE_NETWORK=192.168.1.0/24
CTDB_NATGW_PUBLIC_IP=10.0.0.227/24
CTDB_NATGW_PUBLIC_IFACE=eth0
13.per_ip_routing – 策略路由
若公网地址位于不同二层网段,需要为每个地址独立出接口路由。
变量 | 推荐值 | 说明 |
---|---|---|
CTDB_PER_IP_ROUTING_CONF |
/etc/ctdb/policy_routing |
每行格式:<公网IP> <目标网段/掩码> [网关] 。 |
CTDB_PER_IP_ROUTING_RULE_PREF |
100 |
ip rule 优先级,需避开系统保留区间。 |
CTDB_PER_IP_ROUTING_TABLE_ID_LOW |
1000 |
自动生成路由表号下限,必须 >255。 |
CTDB_PER_IP_ROUTING_TABLE_ID_HIGH |
9000 |
上限。 |
示例 policy_routing 文件
192.168.100.10/32 0.0.0.0/0 10.10.10.254
192.168.101.10/32 0.0.0.0/0 10.10.11.254
91.lvs – LVS 负载均衡
与 NAT 网关变量完全对应,仅前缀改为 CTDB_LVS_
。
需额外注意:
CTDB_LVS_PUBLIC_IP
为 对外提供服务的虚拟 IP。- 若节点标记为
follower-only
,则无需配置PUBLIC_IFACE
与PUBLIC_IP
。
服务事件脚本
启用/禁用脚本:
ctdb enablescript 50.samba
ctdb disablescript 70.iscsi
20.multipathd – 多路径设备监控
CTDB_MONITOR_MPDEVICES="mpatha mpathb"
31.clamd – ClamAV 防病毒
- 默认未启用。
CTDB_CLAMD_SOCKET="/var/run/clamav/clamd.ctl"
40.vsftpd – FTP 服务
CTDB_VSFTPD_MONITOR_THRESHOLDS="3:5"
连续 3 次检查失败记录警告,5 次失败则标记节点 UNHEALTHY。
48.netbios – NetBIOS 名称解析
CTDB_SERVICE_NMB="nmbd"
(不同发行版可能为samba-nmbd
)
49.winbind – Samba Winbind
变量 | 作用 |
---|---|
CTDB_SERVICE_WINBIND |
服务名,如 winbind |
CTDB_SAMBA_INTERFACES_FILE |
自动生成 interfaces.conf 供 Samba 使用,限制 SMB 多通道 |
CTDB_SAMBA_INTERFACES_EXTRA |
额外绑定接口列表 |
示例:
CTDB_SAMBA_INTERFACES_FILE="/etc/samba/interfaces.conf"
CTDB_SAMBA_INTERFACES_EXTRA="bond0"
50.samba – SMB 文件服务
变量 | 默认值 | 说明 |
---|---|---|
CTDB_SAMBA_CHECK_PORTS |
Samba 实际监听端口 | 可强制指定端口列表 |
CTDB_SAMBA_SKIP_SHARE_CHECK |
no |
共享目录存在性检查开关 |
CTDB_SERVICE_SMB |
发行版决定 | smbd 服务名 |
60.nfs – NFS 服务
变量 | 默认值 | 说明 |
---|---|---|
CTDB_NFS_CALLOUT |
nfs-linux-kernel-callout |
可替换为 Ganesha 等外部脚本 |
CTDB_NFS_CHECKS_DIR |
/etc/ctdb/nfs-checks.d |
监控 RPC 服务的检查脚本目录 |
CTDB_NFS_EXPORTS_FILE |
见下 | 导出文件路径 |
CTDB_NFS_SKIP_SHARE_CHECK |
no |
导出目录存在性检查开关 |
CTDB_NFS_SHARED_STATE_DIR |
无 | 存放集群 NFS 状态,需位于共享文件系统 |
CTDB_RPCINFO_LOCALHOST |
127.0.0.1 |
rpcinfo IPv4 测试地址 |
CTDB_RPCINFO_LOCALHOST6 |
::1 |
IPv6 |
CTDB_STATD_CALLOUT_SHARED_STORAGE |
无 | NFSv3 statd 状态共享方式 |
CTDB_NFS_EXPORTS_FILE
默认值:
- 内核 NFS:
/var/lib/nfs/etab
- Ganesha:
/etc/ganesha/ganesha.conf
statd 共享存储三种模式:
persistent_db[:TDB]
:本地队列 + TDB,性能较好,有短暂窗口丢失锁风险。shared_dir[:DIR]
:共享目录,需评估延迟。none
:不共享,NFSv3 锁回收失效,仅测试用。
70.iscsi – iSCSI target 服务
CTDB_START_ISCSI_SCRIPTS="/cluster/tgtd.d"
该目录需位于共享存储,每个公网 IP 对应一个启动脚本。
数据库完整性及备份策略
变量 | 默认值 | 说明 |
---|---|---|
CTDB_MAX_CORRUPT_DB_BACKUPS |
10 |
启动时发现损坏的易失 TDB 备份数 |
CTDB_PERSISTENT_DB_BACKUP_DIR |
无 | 持久 TDB 每日备份目录(需共享文件系统) |
CTDB_PERSISTENT_DB_BACKUP_LIMIT |
14 |
备份保留上限 |
若不想在监控事件内备份,可改用定时任务:
# /etc/cron.d/ctdb-backup
0 2 * * * root /etc/ctdb/ctdb-backup-persistent-tdbs.sh -l /cluster/ctdb-backups
系统资源监控
05.system 脚本防止因磁盘或内存耗尽导致集群异常。
变量 | 默认值 | 示例 |
---|---|---|
CTDB_MONITOR_FILESYSTEM_USAGE |
含数据库目录的文件系统 90% | /:85:95 /data:90:97 |
CTDB_MONITOR_MEMORY_USAGE |
80 | 75:90 |
事件脚本调试
当脚本长时间阻塞,可设置:
CTDB_DEBUG_HUNG_SCRIPT_STACKPAT="exportfs|rpcinfo|smbd|python3"
匹配进程将打印堆栈至系统日志,结合 ctdb scriptstatus
可迅速定位死锁位置。
常用文件路径索引
- 全局配置:
/etc/ctdb/script.options
- 脚本专用:
/etc/ctdb/events.d/*.options
- NAT 网关节点列表:
/etc/ctdb/natgw_nodes
- LVS 节点列表:
/etc/ctdb/lvs_nodes
- 策略路由表:
/etc/ctdb/policy_routing
- NFS 检查脚本:
/etc/ctdb/nfs-checks.d/
- 持久 TDB 备份:
/cluster/ctdb-backups/
(示例)