使用互動式指令碼配置 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)
透過 SSH 登入到 PG Master 機器
下載配置指令碼:
curl -O https://openresty.com/client/oredge/openresty-edge-db-ha-master.sh
執行配置指令碼:
sudo bash openresty-edge-db-ha-master.sh
按照提示輸入以下資訊:
- Standby 主機地址:用於配置訪問控制,例如
192.168.0.2
- Master 資料目錄:預設為
/var/postgres12/data
(PG12)或/var/postgres/data
(PG9) - 複製使用者名稱:用於資料複製,預設為
replicator
- 複製使用者密碼:如果是新使用者,可以使用隨機生成的密碼
- Standby 主機地址:用於配置訪問控制,例如
確認重啟 PostgreSQL 服務
指令碼執行完成後,會顯示主庫配置資訊,請妥善儲存
3. 配置從庫(Standby)
透過 SSH 登入到 PG Standby 機器
下載配置指令碼:
curl -O https://openresty.com/client/oredge/openresty-edge-db-ha-standby.sh
執行配置指令碼:
sudo bash openresty-edge-db-ha-standby.sh
按照提示輸入以下資訊:
- 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
提升成功後,該從庫將變為新的主庫,可以接受讀寫操作。請注意,您需要更新應用程式的資料庫連線資訊,並考慮為新主庫配置新的從庫以維持高可用性。