PostgreSQL DBA快速入門(二) - 高可用流複製配置

PostgreSQL DBA快速入門(二) - 高可用流複製配置

以前的文章中咱們談論了單機PostgreSQL實例的部署,有人可能會說這不是生產級別的配置,由於沒有任何高可用機制呀。那麼本篇文章,咱們來談談如何配置高可用流複製。sql

主從複製

PostgreSQL一直以來不支持複製,複製經過Pgpool、Slony等外部工具來實現。由於這些解決方案並非開箱即用的,因此大部分方案的實現都須要進行復雜的配置。因爲這個缺點,致使不少人轉向已經提供複製功能好久的MySQL。工具

從PostgreSQL9.0開始,PostgreSQL自身完善了複製功能 - 主從之間的WAL流複製。下面讓咱們來一塊兒看一下如何給一個PostgreSQL主節點增長一個從節點。post

這裏咱們須要有兩臺PostgreSQL主機。例子中,主節點IP爲10.0.0.101,從節點IP爲10.0.0.102。咱們假設10.0.0.101和10.0.0.102上的PostgreSQL已經運行,下面咱們將102配置添加爲101的從節點。postgresql

首先咱們須要建立一個用於複製的用戶。在主節點咱們運行如下命令:code

postgres=# CREATE ROLE repl WITH REPLICATION PASSWORD 'password' LOGIN;
CREATE ROLE

接下來,須要修改主節點的pg_hba.conf文件並重載PostgreSQL,以開放訪問:blog

host  replication  repl              10.0.0.102/32  md5

service postgresql reload

咱們也能夠在從節點的pg_hba.conf文件上添加一條主節點的相似信息,由於在將來的某一刻,從節點會提高爲主節點:md5

host  replication  repl              10.0.0.101/32  md5

接下來,咱們須要對主節點和從節點的postgresql.conf文件進行部分配置。其中一些配置是當主節點切換爲從節點時才能用到的,咱們在這裏提早配置好。部署

  • wal_level - 設置爲hot_standby
  • max_wal_senders - 設置爲超過當前從節點數量的值
  • checkpoint_segments - 默認值爲3,建議設置的比默認值大一點,一個較好的實踐值爲16。
  • wal_keep_segments - 設置爲同checkpoint_segments相同的值
  • hot_standby - 開啓該選項

接下來須要將主節點的數據轉移到從節點。要完成該操做,咱們使用pg_basebackup工具,在這以前咱們須要先將從節點的數據目錄內容刪除:it

rm -rf /var/lib/postgresql/9.4/main/*

上面命令執行完後,咱們能夠在從節點上執行如下pg_basebackup命令:io

pg_basebackup --xlog-method=stream -D /var/lib/postgresql/9.4/main/ -U repl -h 10.0.0.101

上面命令完成後,能夠看到在從節點的數據目錄下面出現不少新的數據文件。下面還有一些事情要作,咱們須要建立一個recovery.conf文件來讓從節點能夠連接到主節點。配置信息以下:

standby_mode = 'on'
primary_conninfo = 'host=10.0.0.101 port=5432 user=repl password=password'
trigger_file = '/tmp/failover.trigger'

最後,咱們須要確認一下數據目錄的權限是否配置正確。若是沒問題,下面能夠啓動從節點了:

chmod -R g-rwx,o-rwx /var/lib/postgresql/9.4/main/ ; chown -R postgres.postgres /var/lib/postgresql/9.4/main/

service postgresql start

從下面的信息,咱們能夠確認主從複製已經配置完畢:

$ psql
psql (9.4.8)
Type "help" for help.

postgres=# select client_addr, state, sent_location, write_location,
postgres-#         flush_location, replay_location from pg_stat_replication;
 client_addr |   state   | sent_location | write_location | flush_location | replay_location
-------------+-----------+---------------+----------------+----------------+-----------------
 10.0.0.102  | streaming | 0/130011E0    | 0/130011E0     | 0/130011E0     | 0/130011E0
(1 row)

總結

正如咱們所見,PostgreSQL的主從複製配置並不複雜。一主多從的機制能夠爲生產環境提供更好的保障。

相關文章
相關標籤/搜索