自动故障转移版本功能

实现以下功能

  • 根据服务器配置,初始化时自动配置数据库参数

  • 主实例故障时从实例自动提升为主

  • 原主实例恢复后自动切换为从实例并自动配置同步信息

  • 有多个从实例时自动切换同步模式

  • 可配置同步异步复制模式

  • 可配置实例权重

  • 可手动提升切换主从实例

名词解释

  • 监视节点:监视所有数据库节点运行状态,故障时自动执行切换

  • 编组:多个实例位于同一编组时,自动维护切换主从关系

  • 主节点:编组内第一个数据库节点为主节点,但随着故障发生会自动切换为从节点

  • 从节点:编组内第二个及以上安装的节点为从节点,但随着故障发生会自动切换为主节点

安装

建议优先使用Aiops运维系统在web页面操作,更加方便容易. 以下列出部分操作指令.

准备

  • 添加普通用户unvdb

  • 切换到普通用户unvdb

  • 准备安装目录 /data/udb/

  • 解压安装包到 /data/udb/soft 目录

  • 配置环境变量 export LD_LIBRARY_PATH=/data/udb/soft/lib PATH=$PATH:/data/udb/soft/bin

在所有节点上准备好数据及环境变量

安装监视节点

  • 创建监控节点 ud_autoctl create monitor --uddata /data/udb/data --udport 5677 --hostname 192.168.2.32 --skip-pg-hba --no-ssl --run

  • 修改hba.conf

local all all trust
host  all all 127.0.0.1/32 trust
host  all all ::1/128 trust
local replication all trust
host  replication all 127.0.0.1/32 trust
host  replication all ::1/128 trust
host all "udautofailover_monitor" 0.0.0.0/0 trust
host replication "udautofailover_replicator" 0.0.0.0/0 md5
host  replication all 0.0.0.0/0 md5
host  all all 0.0.0.0/0 md5
  • 配置同步认证

ud_sql --登录数据库
alter user autoctl_node password '同步密码'; -- 设置同步密码
  • 注册服务

vi /etc/systemd/system/unvdb5677.service
[Unit]
Description = unvdb5677 Service
After=network-online.target
Wants=network-online.target

[Service]
WorkingDirectory = /data/udb/soft/bin
Environment = 'PGDATA=/data/udb/data'
Environment = 'PGPASSWORD=同步密码'
Environment = 'LD_LIBRARY_PATH=/data/udb/soft/lib:$LD_LIBRARY_PATH'
Environment = 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/data/udb/soft/bin'
User = unvdb
ExecStart = /data/udb/soft/bin/ud_autoctl run
Restart = always
StartLimitBurst = 0
ExecReload = /data/udb/soft/bin/ud_autoctl reload
#Type=forking
TimeoutSec=30
#PrivateTmp=true

[Install]
WantedBy = multi-user.target
  • 启动监视节点 systemctl daemon-reload && systemctl start unvdb5677

  • 查看状态

export PGPASSWORD=同步密码
ud_autoctl show uri
  • 添加编组 同一编组内的多个数据库实例自动维护主从关系 不同编组之间的数据库实例互不影响 ud_autoctl create formation --pgdata /data/udb/data --kind pgsql --formation dev #创建编组dev

安装数据库主节点

  • 安装主节点

export PGPASSWORD=同步密码
ud_autoctl create unvdb --uddata /data/udb/data --pgport 5678 --hostname 192.168.2.31 --name database1 --formation dev --skip-pg-hba --no-ssl --monitor 'postgres://autoctl_node@监视节点ip:监视节点端口/ud_auto_failover?sslmode=prefer' --run
  • 修改hba.conf

local all all trust
host  all all 127.0.0.1/32 trust
host  all all ::1/128 trust
local replication all trust
host  replication all 127.0.0.1/32 trust
host  replication all ::1/128 trust
host all "udautofailover_monitor" 0.0.0.0/0 trust
host replication "udautofailover_replicator" 0.0.0.0/0 md5
host  replication all 0.0.0.0/0 md5
host  all all 0.0.0.0/0 md5
  • #配置同步认证,只需要在第一个数据库节点执行一次即可 ud_autoctl config set replication.password 同步密码 --uddata /data/udb/data

  • 注册服务

vi /etc/systemd/system/unvdb5678.service
[Unit]
Description = unvdb5678 Service
After=network-online.target
Wants=network-online.target

[Service]
WorkingDirectory = /data/udb/soft/bin
Environment = 'PGDATA=/data/udb/data'
Environment = 'LD_LIBRARY_PATH=/data/udb/soft/lib:$LD_LIBRARY_PATH'
Environment = 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/data/udb/soft/bin'
User = unvdb
ExecStart = /data/udb/soft/bin/ud_autoctl run
Restart = always
StartLimitBurst = 0
ExecReload = /data/udb/soft/bin/ud_autoctl reload
#Type=forking
TimeoutSec=30
#PrivateTmp=true

[Install]
WantedBy = multi-user.target
  • 启动主节点 systemctl daemon-reload && systemctl start unvdb5678

安装更多数据库节点

命令同安装数据库主节点相同,当编组内拥有主节点时会自动配置为从节点

管理维护

查看

ud_autoctl show state --uddata /data/udb/data/ --formation dev
显示编组内节点信息
ud_autoctl show uri --formation dev --uddata /data/udb/data/
显示编组实例连接信息
ud_autoctl show settings --formation dev
显示编组配置信息
ud_autoctl show systemd
显示注册服务文件信息

编组管理

ud_autoctl create formation --uddata /data/udb/data/ --kind pgsql --formation dev
创建编组
ud_autoctl drop formation --formation aa --uddata /data/udb/data/
删除编组
ud_autoctl get formation settings --formation dev
获取编组配置信息
ud_autoctl set formation number-sync-standbys 0 --formation dev
设置编组同步复制数量,至少要有N+1个从节点。默认是从节点数量减1,当从节点由多个个变为1个时,不会自动切换为异步复制。手动设置为0,可以转换为异步复制。

节点管理

ud_autoctl set node replication-quorum false --name 节点名称 --formation dev
将节点配置为异步复制,但仍参与故障转移
ud_autoctl set node candidate-priority 99 --formation dev --name 节点名称
配置节点权重为99,将会优先选中做为主节点。设置为0时永远不会被选为主节点
ud_autoctl drop node --destroy --formation dev
将节点从编组中移除

其它

  • 监视节点是否要高可用 监视节点用于监视其它数据库节点状态,当发生故障时自动切换主从配置。 当监视节点故障时,不会影响数据库节点的运行。但故障转移功能将失效。所以监视节点目前不需要配置高可用。 建议监视节点故障后及时恢复