Postgresql主從配置


 

一、   簡介

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 = ‘*’   #監聽所有ip

archive_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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM