PG數據庫異步流複製
背景說明
- 最近想進行一個數據庫高可用課題的研究.
- 因爲之前某種原因,這次選擇的是PG數據庫.
- 爲了簡單起見, 暫時採用PG異步流複製的場景.
- 這次僅是爲了測試, 不考慮高可用綠色切換的場景.
設置過程
http://blog.itpub.net/26442936/viewspace-2771065/
- 原作者對數據非常有研究, 這裏僅是進行一次簡單學習與整理.
設置過程
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';
設置過程
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
# 驗證能夠查詢出結果來