PG資料庫非同步流複製
阿新 • • 發佈:2022-01-15
PG資料庫非同步流複製
背景說明
- 最近想進行一個數據庫高可用課題的研究.
- 因為之前某種原因,這次選擇的是PG資料庫.
- 為了簡單起見, 暫時採用PG非同步流複製的場景.
- 這次僅是為了測試, 不考慮高可用綠色切換的場景.
設定過程
- 本次學習自如下網站:
http://blog.itpub.net/26442936/viewspace-2771065/
- 原作者對資料非常有研究, 這裡僅是進行一次簡單學習與整理.
設定過程
- 安裝PG資料庫.
yum localinstall *.rpm
- 需要主要主從庫都能夠準確安裝上資料庫.
- 第一個資料庫需要執行建立操作
# 本次是 PG13為例進行說明 systemct status postgresql-13 # 檢視資料庫的資訊 #一般啟動指令碼為 /usr/pgsql-13/bin/ 資料目錄為: /var/lib/pgsql/13/data su - postgres # 切換使用者後進行資料庫初始化的操作 cd /usr/pgsql-13/bin ./initdb -D /var/lib/pgsql/13/data
設定過程
- 資料庫安裝完成之後需要進行流複製的初始化設定.
- 設定的事項應該不需要太多.
#修改 postgresql.conf的設定 #主要有兩處 listen_addresses ='*' wal_level = replica #修改pg_hba.conf的配置檔案 host replication repl the_Slave_server_ip/32 md5 host replication repl the_master_server_ip/32 md5 # 注意 repl 是需要建立一個數據庫的使用者 # 需要使用pgsql 命令執行下來. create role repl login replication encrypted password 'yourpassword';
設定過程
- 需要設定.pgpass 的預設配置
vim /postgres/can/rw/.pgpass
#新增內容為:
The_ip_of_master:5432:replication:repl:$yourpassword
# 注意這個檔案需要讓備份庫可以讀寫.
- 設定完成後需要執行一下重啟操作
# 注意是在主庫
systemctl restart postgresql-13
設定過程
- 主庫備份
pg_basebackup -h The_ip_of_master -U repl -D /var/lib/pgsql/13/databackup -Xs -P -R # 注意需要使用非127.0.0.1的ip不然容易出問題. # 這裡會複製一下別人的專門說法.
- 引數說明
# /var/lib/pgsql/13/databackup是從庫建立一個新目錄,用來恢復主庫的cluster databases
# -h 主庫ip地址
# -U 指定連線主庫的使用者
# -D 從庫複製資料的目錄
# -Xs 主庫備份時,以流式傳輸WAL日誌內容
# -P 進度報告
# -R 建立一個standby.signal空檔案,用於在叢集中啟用standby server,有這個standby.signal檔案即為備庫;
另外也可以把主庫一些連線資訊primary_conninfo寫入備庫postgresql.auto.conf
設定過程
- 從庫的處理
注意需要將上一步 -D 產生的目錄 複製到從資料庫的特定目錄上面
scp -r /var/lib/pgsql/13/databackup [email protected]:/var/lib/pgsql/13
注意檔案目錄的許可權和屬主必須保持準確.
注意需要修改啟動指令碼. 修改 systemd 的service 檔案裡面的 資料目錄
處理步驟與前面相同
systemctl status postgresql-13
vi /usr/lib/systemd/system/postgresql-13.service
修改檔案.
新增核心配置檔案.
設定過程
- 注意 pg_basebackup 會產生一個檔案:
standby.signal
注意包含這個檔案的資料目錄 在PG資料庫啟動之後
會提示沒有寫入許可權
如果需要改為主庫, 需要移除這個檔案
注意這個檔案一般是空的, 需要從 postgresql.auto.conf
複製配置檔案到此目錄才可以實現.
注意需要注意檔案的許可權,避免檔案丟失許可權導致無法啟動.
設定過程
- 啟動從庫
systemctl restart postgresql-13
- 驗證流複製是否準確
# 主庫查詢
select * from pg_stat_replication;
# 從庫查詢
select * from pg_stat_wal_receiver;
簡單驗證
- 主庫插入從庫驗證
#主庫設定:
create table zhaobsh (master varchar(200))
insert into zhaobsh values ('主庫自主插入')
#從庫查詢:
select * from zhaobsh
# 驗證能夠查詢出結果來