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
# 驗證能夠查詢出結果來
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章