標籤:最新 sel 丟失 本機 預設 bsp pass 安裝 效果
一、 簡介
PostgreSql在9.0之後引入了主從的流複製機制,所謂流複製,就是從伺服器通過tcp流從主伺服器中同步相應的資料。這樣當主伺服器資料丟失時從伺服器中仍有備份。
與基於檔案記錄傳送相比,流複製允許保持從伺服器更新。 從伺服器串連主伺服器,其產生的流WAL記錄到從伺服器, 而不需要等待主伺服器寫完WAL檔案(關於Wal可以看看官方的說法https://www.postgresql.org/docs/10/static/different-replication-solutions.html)。
PostgreSQL流複製預設是非同步。在主伺服器上提交事務和從伺服器上變化可見之間有一個小的延遲,這個延遲遠小於基於檔案記錄傳送,通常1秒能完成。如果主伺服器突然崩潰,可能會有少量資料丟失。
同步複製必須等主伺服器和從伺服器都寫完WAL後才能提交事務。這樣在一定程度上會增加事務的回應時間。
配置同步複製僅需要一個額外的配置步驟: synchronous_standby_names必須設定為一個非空值。synchronous_commit也必須設定為on。
注: 主從伺服器所在節點的系統、環境等最好一致。PostgreSQL版本也最好一致,否則可能會有問題。
二、 安裝部署(使用Ubuntu的普通使用者安裝部署)
角色 |
IP地址 |
系統版本 |
資料庫版本 |
主伺服器 |
192.168.100.71 |
Ubuntu18.04 amd64 |
PostgreSQL10 |
從伺服器 |
192.168.100.70 |
Ubuntu18.04 amd64 |
PostgreSQL10 |
註:18.04版本預設的PostgreSQL版本是10,要安裝其他版本可以採用編譯的方式或者apt-get 指定版本號碼安裝
1、兩台伺服器都要安裝PostgreSQL
sudo apt-get updatel
sudo apt-get install postgresql
sudo vi /etc/postgresql/10/main/postgresql.conf
在檔案末尾添加或者找到該行,將peer改為trust
local all all trust
重啟PostgreSQL服務
sudo service postgresql restartt
這樣PostgreSQL就安裝完畢
2、配置主伺服器
切換成postgres使用者
sudo su – postgres
進入資料庫,建立一個普通的資料庫使用者使用者進行主從同步(只需賦予登入和複製的許可權即可)
postgres=# create role guoxm login replication encrypted password ‘guoxm‘
然後退出
postgres=# \q
在exit退出到原使用者
然後,修改postgresql的pg_hba.conf,配置運行剛剛建立的guoxm使用者可以進行串連
sudo vi /etc/postgresql/10/main/pg_hba.conf
在檔案尾添加如下兩行
host all all 192.168.100.70/32 trust #運行70伺服器串連到本機host replication guoxm 192.168.100.70/32 md5 #運行guoxm使用者在70上複製本機資料
註:第二個的角色必須是replication
最後,再次配置postgresql.conf
sudo vi /etc/postgresql/10/main/ postgresql.conf
這次需要配置的是主機的角色
listen_addresses = ‘*’ #監聽所有iparchive_mode = on #開啟歸檔模式archive_command = ‘cp %p /var/lib/postgresql/10/main/%f’ #歸檔命令wal_level = hot_standby #熱備模式max_wal_senders = 1 #最多有1個流複製串連wal_sender_timeout = 60s #流複製逾時時間max_connections = 100 #最大連線時間,必須要小於從庫的配置
儲存退出後,重啟資料庫服務
sudo service postgresql restartt
3、配置從伺服器
首先,先測試一下是否能串連主伺服器
psql -h 192.168.100.70 -U postgres
如果可以,說明主機配置正常,否則檢查一下主機的pg_hba.conf配置
進入到postgres使用者
sudo su - postgres
先清空main目錄下的資料(main檔案夾就是PostgreSQL資料的隱藏檔夾)
rm -rf 10/main/*
或者
rm -rf /var/lib/postgresql/10/main/*
因為PostgreSQL的home目錄就在/var/lib/postgresql中
所以上面兩條命令到達的效果是一樣的
然後,開始從主伺服器上copy資料到本機上,這一步叫做“基礎備份”
pg_basebackup -h 192.168.100.71 -U guoxm –D 10/main/ -X stream –P
或者
pg_basebackup -F p --progress -D 10/main/ -h 192.168.100.71 -p 5432 -U guoxm --password
pg_basebackup是PostgreSQL內建的基礎備份工具
這樣,基礎備份就完成了
然後,建立recovery.conf用於從庫恢複從主庫擷取的資料
vi recovery.conf
然後編輯如下配置
standby_mode = on #表示該節點是從庫primary_conninfo = ‘host=192.168.100.71 post=5432 user=guoxm password=guoxm’#從機資訊和串連使用者recovery_target_timelint = ‘latest’ #說明恢複到最新狀態
保持並退出後,
複製或在移動到main檔案夾中
cp recovery.conf 10/main/
或者
mv recovery.conf 10/main/
然後,exit退出到原使用者
最後,配置從機的postgresql.conf檔案
sudo vi /etc/postgresql/10/main/postgresql.conf
在檔案末尾添加如下配置
wal_level = hot_standby #熱備模式max_connections = 300 #最大連線時間,必須要小於從庫的配置hot_standby = on #說明這台機器不僅用於資料歸檔,還可以用於資料查詢max_standby_streaming_delay = 30s #流備份的最大延遲時間wal_receiver_status_interval = 10s #向主機彙報本機狀態的間隔時間hot_standby_feedback = on #r出現錯誤複製,向主機反饋
儲存並退出
到這裡,從機配置完成
重啟資料庫服務
sudo service postgresql restart
4、驗證主從配置是否成功
在主機上,切換到postgres使用者
sudo su – postgres
進入資料庫
執行如下查詢
select client_addr,sync_state from pg_stat_replication;
如果看到如下查詢結果
說明192.168.100.70是從伺服器,在接收流,而且是非同步流複製。說明主從配置成功
註:必須切換到postgres使用者下進行查詢
此外,還可以查看相關進程來驗證是否配置成功
在主機、從機上分別執行
ps aux | grep postgres
主機上可以看到正在向從機發送資料流
從機上可以看到正在接收資料流
到此,主從配置完成;
參考連結:
https://www.jianshu.com/p/2d07339774c0
https://www.cnblogs.com/yjf512/p/4499547.html
Postgresql主從配置