原理介紹:流復制(Streaming Replication)。流復制提供了將 WAL 記錄連續發送並應用到從服務器以使其保持最新狀態的功能。通過流復制,從服務器不斷從主服務器同步相應的數據,
同時,從服務器作為主服務器的一個備份。
pg_basebackup:提供一個全量備份。常用來搭建流復制環境。屬於物理備份。邏輯備份工具時pg_dump;
-D:–pgdata=DIRECTORRY,接收備份的目錄
-F:–format=p | t,指定輸出格式,支持p(原樣輸出)或者t(tar格式輸出)
-r:–max-rate=RATE,最大傳輸率(kB/s,或用前綴 k,M)
-R,–write-recovery-conf,備份后寫recovery.conf文件
-s,–slot=SLOTNAME,使用的復制槽
-T:–tablespace-mapping=OLDDIR=NEWDIR,使用NEWDIR替代OLDDIR
-x:–xlog,備份開始后,啟動另一個流復制連接從主庫接收WAL
-X:–xlog-method=fetch| stream
–xlogdir=XLOGDIR
-z:–gzip
-Z:–compress=0-9
–target-gp-dbid:根據給定的dbid創建表空間子目錄
-C,–checkpoint=fast| spread
-l,–label=LABLE:設置backup label
-E,–exclude
–exclude-from=FILE
一、兩台服務器上分別安裝pg:默認為12版本,路徑:/var/lib/postgresql/12
1、安裝命令:
sudo apt-get install postgresql
或者
sudo apt-get install postgresql-12
2、創建系統賬號:
命令: sudo su - postgres -c "createuser -s odoo"
sudo -u postgres psql
alter role odoo with password 'odoo';
退出方式:最好用\q,這樣會將進程結束掉
Control +Z 退出 或 \q
3、安裝完成后各目錄說明
(1) 配置文件config所在目錄 /etc/postgresql/12/main
(2) 數據文件data所在目錄 /var/lib/postgresql/12/main
(3) 端口號 5432
(4) 安裝目錄 /usr/lib/postgresql/12/
二、主數據庫【10.14.22.143】配置
1、使用postgres用戶登陸數據庫,創建復制用戶
#需要一個賬號進行主從同步
1.1、登錄: sudo -u postgres psql
1.2、創建: postgres=#create role replica login replication encrypted password 'replica';
2、修改認證文件:pg_hba.conf
添加如下配置:
host all all 10.14.22..0/16 trust # 允許連接
host replication replica 10.14.22.0/16 trust # 允許replica用戶復制本機數據
3、配置 postgrsql.conf
配置參數:
listen_addresses = '*' #監聽所有ip
archive_mode = on #開啟歸檔模式
archive_command = 'cp %p /var/lib/postgresql/12/main/%f' #歸檔命令
wal_level = replica # 決定多少信息寫入WAL,此處為replica模式
max_wal_senders = 10 #最大流復制連接,一般和從服務相等
wal_sender_timeout = 60s #流復制超時時間
max_connections = 100 #最大連接數,必須不大於從庫的配置
4、重啟數據庫:
命令:
sudo service postgresql restart
Or
systemctl start postgresql
查看狀態:
systemctl status postgresql
登錄數據庫: sudo -u postgres psql
其他命令:
查看當前目錄大小:
du -sh
ls -aslsh
二、從數據庫【10.14.22.144】配置:
注意點:Pg13 做主從庫與pg10基本一致,在從庫的配置文件上有所不同Pg12后,棄用了resovery.conf文件,不用配置;
另外postgresql.auto.conf文件的優先級高於postgresql.conf文件
1、 進入目錄:cd /var/lib/postgresql
執行basebackup命令
-R 表示自動生成recovery.conf文件,若不加,可以自定義該文件:
standby_mode = on #表示該節點是從庫
primary_conninfo = 'host=172.17.0.2 post=5432 user=replicator password=12345678'
###recovery_target_timelint = 'latest' #說明恢復到最新狀態—— 這一行我刪除了
2、 將復制的data2 替換掉原來的data目錄
修改配置文件 postgresql.conf
cd 進入到: /etc/postgresql/12/main/postgresql.conf
修改參數:
wal_level = hot_standby #熱備模式
max_connections = 200 #最大連接
hot_standby = on #說明這台機器不僅用於數據歸檔,還可以用於數據查詢
max_standby_streaming_delay = 30s #流備份的最大延遲時間
wal_receiver_status_interval = 10s #向主機匯報本機狀態的間隔時間
hot_standby_feedback = on #r出現錯誤復制,向主機反饋
三、驗證配置是否成功
1、在主庫上執行:能看到從庫IP :sudo -u postgres psql
2、可以在兩台服務器上執行 ps aux | grep postgres 來驗證部署成功
3、通過創建數據庫來驗證:
原理是在自主庫上創建數據,然后看從庫是否存在
主庫上操作:
在從庫上查詢