1. 程式人生 > 其它 >PG資料庫非同步流複製

PG資料庫非同步流複製

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
# 驗證能夠查詢出結果來