CTDB 脚本配置文件指南

适用版本:CTDB ≥ 4.20,Ubuntu 20.04 LTS 及更新版本。

文件定位与优先级


每个事件脚本按以下顺序读取配置,后读入者优先:

  1. 全局文件
    /etc/ctdb/script.options
    存放所有脚本共享的通用变量,避免重复定义。

  2. 脚本专用文件
    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_IFACEPUBLIC_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/(示例)

posted @ 2025-09-09 10:42  LoftyAmbition  阅读(25)  评论(0)    收藏  举报