OpenResty Edge 高可用数据库集群管理工具

简介

OpenResty Edge 高可用数据库集群管理工具是一个用于管理高可用数据库集群的命令行工具。它可以帮助用户快速搭建和管理一个包含监控节点(monitor)和数据节点(data)的数据库集群。

架构

集群包含以下组件:

  • 一个监控节点:管理集群状态并协调故障转移
  • 两个或多个数据节点:一个主节点(primary)和一个或多个备用节点(secondary)

系统要求

  • 操作系统:Linux(支持 systemd)
  • 内存:最少 2GB
  • 硬盘空间:最少 5GB,具体大小需根据实际数据库数据大小来调整
  • 已安装 OpenResty PostgreSQL 12 或更高版本
  • 防火墙端口:5432
  • 网络:所有节点之间必须能够相互通信

功能特性

  • 安装、启动、停止监控节点或数据节点
  • 查询数据库集群状态
  • 管理数据库 HBA(Host-Based Authentication)配置
  • 支持切换集群监控节点
  • 自动故障转移能力

重要提示

  1. 建议先在非生产环境进行测试
  2. 安装前务必备份重要数据,可参考此文档
  3. 在维护时间执行操作
  4. 切换监控节点时,先对主数据节点(如存活)执行切换操作,再对从数据节点执行切换操作
  5. 谨慎使用 -y 选项,因为它会跳过所有确认提示,可能会造成数据不一致、损坏或丢失。

安装步骤

  1. 下载管理工具:
curl -O https://openresty.com/client/oredge/openresty-edge-db-cluster-manager.sh
  1. 安装监控节点:
sudo bash openresty-edge-db-cluster-manager.sh -a install -t monitor -n 监控节点IP
  1. 安装一个或多个数据节点:(第一个成功安装的节点将作为主节点)
sudo bash openresty-edge-db-cluster-manager.sh -a install -t data -m 监控节点IP -n 节点IP
  1. 检查集群状态:
sudo bash openresty-edge-db-cluster-manager.sh -a get -c "cluster state" -m 监控节点IP

工具用法

基本语法

sudo bash openresty-edge-db-cluster-manager.sh [选项]

命令选项

-a, --action       操作类型 (install/start/stop/get/set/switchover/uninstall)
-t, --type         节点类型 (monitor/data)
-m, --monitor-ip   监控节点 IP 地址
-n, --node-ip      当前节点 IP 地址
-v, --pg-version   PostgreSQL 版本(默认:12)
-y, --yes          跳过所有确认并使用默认值(警告:这将自动确认破坏性操作)
-c, --config       配置类型 (get: cluster state/node type/service status, set: pghba)
-i, --pg-hba-ips   PostgreSQL HBA IP 地址列表(逗号分隔)
-s, --switch-type  切换类型 (switch to new monitor)
-h, --help         显示帮助信息

常用示例

以完全交互的模式执行:

sudo bash openresty-edge-db-cluster-manager.sh

安装监控节点:

sudo bash openresty-edge-db-cluster-manager.sh -a install -t monitor -n 192.168.1.10

安装数据节点:

sudo bash openresty-edge-db-cluster-manager.sh -a install -t data -m 192.168.1.10 -n 192.168.1.11

检查集群状态:

sudo bash openresty-edge-db-cluster-manager.sh -a get -c "cluster state" -m 192.168.1.10

获取节点类型:

sudo bash openresty-edge-db-cluster-manager.sh -a get -c "node type"

配置数据库 HBA:

sudo bash openresty-edge-db-cluster-manager.sh -a set -c pghba -t data -i "192.168.1.10,192.168.1.11"

切换到新的监控节点:

sudo bash openresty-edge-db-cluster-manager.sh -a switchover -s "switch to new monitor" -m 192.168.1.12

卸载监控节点:

sudo bash openresty-edge-db-cluster-manager.sh -a uninstall -t monitor

切换监控节点的场景

本节详细描述了不同场景下的监控节点切换操作步骤。 假设初始集群包含:1个监控节点(monitor),1个主数据节点(primary),1个备用数据节点(secondary)。 监控节点没有故障时,通常无需进行切换,如果希望进行切换,请先停止监控节点。

请注意:

  1. 执行切换操作前,请确保新监控节点已经正确安装并运行
  2. 切换操作期间可能会短暂影响数据库服务
  3. 每次切换后都要验证集群状态
  4. 建议在维护时间窗口执行切换操作
  5. 操作前备份重要数据
  6. 保留详细的操作日志,以便故障排查

可以使用以下命令在数据节点上获取该节点的类型:

sudo bash openresty-edge-db-cluster-manager.sh -a get -c "node type"
  • monitor: 监控节点
  • primary: 主节点
  • secondary:备用节点

场景一:监控节点可恢复

当监控节点发生临时故障但可恢复时,那么无需进行监控节点切换:

  1. 修复监控节点的故障

  2. 重新启动监控节点服务:

    sudo bash openresty-edge-db-cluster-manager.sh -a start -t monitor
    
  3. 验证集群状态:

    sudo bash openresty-edge-db-cluster-manager.sh -a get -c "cluster state" -m MONITOR_IP
    

场景二:监控节点无法恢复,但所有数据节点正常

当监控节点无法恢复,但所有数据节点正常运行时,需要将所有数据节点都迁移到新的监控节点。

  1. 在新服务器上安装新的监控节点:

    sudo bash openresty-edge-db-cluster-manager.sh -a install -t monitor -n NEW_MONITOR_IP
    
  2. 切换主数据节点到新监控节点:

    sudo bash openresty-edge-db-cluster-manager.sh -a switchover -s "switch to new monitor" -m NEW_MONITOR_IP
    
  3. 在备用数据节点上执行相同的切换操作:

    sudo bash openresty-edge-db-cluster-manager.sh -a switchover -s "switch to new monitor" -m NEW_MONITOR_IP
    
  4. 验证集群状态:

    sudo bash openresty-edge-db-cluster-manager.sh -a get -c "cluster state" -m NEW_MONITOR_IP
    

场景三:监控节点和备用节点故障,主节点正常

当监控节点和备用数据节点同时故障,但主数据节点正常时:

  1. 在新服务器上安装新的监控节点:

    sudo bash openresty-edge-db-cluster-manager.sh -a install -t monitor -n NEW_MONITOR_IP
    
  2. 切换主数据节点到新监控节点:

    sudo bash openresty-edge-db-cluster-manager.sh -a switchover -s "switch to new monitor" -m NEW_MONITOR_IP
    
  3. 验证集群状态:

    sudo bash openresty-edge-db-cluster-manager.sh -a get -c "cluster state" -m NEW_MONITOR_IP
    
  4. 修复或重新安装备用节点(可选)

场景四:监控节点和主数据节点故障,备节点正常

当监控节点和主数据节点同时故障,但备用数据节点正常时:

  1. 在新服务器上安装新的监控节点:

    sudo bash openresty-edge-db-cluster-manager.sh -a install -t monitor -n NEW_MONITOR_IP
    
  2. 切换备用数据节点到新监控节点:

    sudo bash openresty-edge-db-cluster-manager.sh -a switchover -s "switch to new monitor" -m NEW_MONITOR_IP
    

    当工具提示"Will promote current node to primary. Continue?“时,选择"y"以将此节点提升为主节点。

  3. 验证集群状态:

    sudo bash openresty-edge-db-cluster-manager.sh -a get -c "cluster state" -m NEW_MONITOR_IP
    
  4. 修复或重新安装原主节点作为备用节点(可选)

操作日志和历史记录

  • 每次运行都会创建独立的历史记录目录:oredge-db-cluster-histories/<时间戳>
  • 所有操作日志都保存在 oredge-db-cluster-histories/<时间戳>/script.log

错误处理

如果遇到错误,可以按照以下步骤排查:

  1. 检查日志文件中的详细信息
  2. 验证节点之间的网络连接
  3. 确认系统要求已满足
  4. 确保没有端口冲突
  5. 验证数据库服务安装状态

常见问题

  1. 监控节点故障时会发生什么?

    • 数据节点将继续运行
    • 可以使用切换命令切换到新的监控节点
  2. 自动故障转移是如何触发的?

    • 监控节点持续检查数据节点的健康状态
    • 如果主节点发生故障或重启,将自动提升一个备用节点
  3. 能否向现有集群添加更多节点?

    • 可以,使用带数据节点类型的安装命令
    • 新节点中旧数据将被清空,并自动与主节点同步
  4. 节点启动失败时该怎么办?