使用交互式脚本配置 OpenResty Edge 数据库高可用

1. 前言

OpenResty Edge 使用 PostgreSQL 作为其数据库系统。在 OpenResty Edge 的架构中,我们将 Edge Admin 使用的数据库称为 Edge Admin DB,将 Edge Log Server 使用的数据库称为 Edge Log Server DB。这两个数据库可以共用同一个 PostgreSQL 实例或集群。

为了确保数据的安全性和系统的可用性,我们强烈建议配置至少一个从库(Standby)。本文将指导您使用交互式脚本来配置 OpenResty Edge 数据库的高可用性,适用于 PostgreSQL 9 和 12 版本。

2. 配置主库(Master)

  1. 通过 SSH 登录到 PG Master 机器

  2. 下载配置脚本:

    curl -O https://openresty.com/client/oredge/openresty-edge-db-ha-master.sh
    
  3. 执行配置脚本:

    sudo bash openresty-edge-db-ha-master.sh
    
  4. 按照提示输入以下信息:

    • Standby 主机地址:用于配置访问控制,例如 192.168.0.2
    • Master 数据目录:默认为 /var/postgres12/data(PG12)或 /var/postgres/data(PG9)
    • 复制用户名:用于数据复制,默认为 replicator
    • 复制用户密码:如果是新用户,可以使用随机生成的密码
  5. 确认重启 PostgreSQL 服务

  6. 脚本执行完成后,会显示主库配置信息,请妥善保存

3. 配置从库(Standby)

  1. 通过 SSH 登录到 PG Standby 机器

  2. 下载配置脚本:

    curl -O https://openresty.com/client/oredge/openresty-edge-db-ha-standby.sh
    
  3. 执行配置脚本:

    sudo bash openresty-edge-db-ha-standby.sh
    
  4. 按照提示输入以下信息:

    • Standby 端口:默认为 5432
    • Standby 数据目录:默认为 /var/postgres12/data(PG12)或 /var/postgres/data(PG9)
    • Master 主机地址:例如 192.168.0.1
    • Master 端口:默认为 5432
    • 复制用户名:与主库配置中相同
    • 复制用户密码:与主库配置中相同

注意:如果指定的数据目录不为空,脚本会询问是否清空该目录。请确保目录中的数据可以安全删除,否则请先进行备份。

4. 验证配置

在主库机器上执行以下命令来验证复制状态:

# 对于 PG12
/usr/local/openresty-postgresql12/bin/psql -x -c "select * from pg_stat_replication" -U postgres

# 对于 PG9
/usr/local/openresty/postgresql/bin/psql -x -c "select * from pg_stat_replication" -U postgres

如果配置成功,您将看到类似以下的输出:

-[ RECORD 1 ]----+------------------------------
pid              | 29015
usesysid         | 22228
usename          | replicator
application_name | walreceiver
client_addr      | 192.168.122.1
client_hostname  |
client_port      | 38440
backend_start    | 2022-02-21 23:36:46.418257-08
backend_xmin     | 5222925
state            | streaming
sent_lsn         | 2/C5151CE8
write_lsn        | 2/C5151CE8
flush_lsn        | 2/C5151CE8
replay_lsn       | 2/C5151CE8
write_lag        | 00:00:00.000435
flush_lag        | 00:00:00.001187
replay_lag       | 00:00:00.001394
sync_priority    | 0
sync_state       | async
reply_time       | 2022-02-21 23:42:21.456685-08

5. 提升从库为主库

在主库发生故障时,您可能需要将从库提升为新的主库。

5.1 检查主从复制状态

在相应的机器上执行以下命令:

# 对于 PG12
sudo -u postgres /usr/local/openresty-postgresql12/bin/pg_controldata /var/postgres12/data

# 对于 PG9
sudo -u postgres /usr/local/openresty/postgresql/bin/pg_controldata /var/postgres/data

可能的状态:

  • 主库正常:Database cluster state: in production
  • 主库故障:Database cluster state: shut down
  • 从库:Database cluster state: in archive recovery

5.2 提升从库为主库

从库上执行:

# 对于 PG12
sudo -u postgres /usr/local/openresty-postgresql12/bin/pg_ctl promote -D /var/postgres12/data

# 对于 PG9
sudo -u postgres /usr/local/openresty/postgresql/bin/pg_ctl promote -D /var/postgres/data

提升成功后,该从库将变为新的主库,可以接受读写操作。请注意,您需要更新应用程序的数据库连接信息,并考虑为新主库配置新的从库以维持高可用性。