[轉]PostgreSQL主從流複製部署

來源:https://www.jianshu.com/p/2d07339774c0javascript

安裝 :https://tecadmin.net/install-postgresql-11-on-centos/css

卸載:http://www.javashuo.com/article/p-bptsklvn-mr.htmlhtml

192.168.20.93上部署主服務器,192.168.20.94上部署從服務器。java

1. 簡介

postgres在9.0以後引入了主從的流複製機制,所謂流複製,就是從服務器經過tcp流從主服務器中同步相應的數據。這樣當主服務器數據丟失時從服務器中仍有備份。python

與基於文件日誌傳送相比,流複製容許保持從服務器更新。 從服務器鏈接主服務器,其產生的流WAL記錄到從服務器, 而不須要等待主服務器寫完WAL文件。sql

PostgreSQL流複製默認是異步的。在主服務器上提交事務和從服務器上變化可見之間有一個小的延遲,這個延遲遠小於基於文件日誌傳送,一般1秒能完成。若是主服務器忽然崩潰,可能會有少許數據丟失。數據庫

同步複製必須等主服務器和從服務器都寫完WAL後才能提交事務。這樣在必定程度上會增長事務的響應時間。centos

配置同步複製僅須要一個額外的配置步驟: synchronous_standby_names必須設置爲一個非空值。synchronous_commit也必須設置爲on。bash

這裏部署的是異步的流複製。服務器

注:
主從服務器所在節點的系統、環境�等最好一致。PostgreSQL版本也最好一致,不然可能會有問題。

2. 安裝部署

先在192.168.20.93和192.168.20.94均安裝PostgreSQL。

具體安裝部署步驟見:PostgreSQL安裝配置

2.1 主服務器

主服務器爲192.168.20.93

先建立一個新目錄:

mkdir /opt/pgsql/pg_archive

1.首先須要建立一個數據庫用戶進行主從同步。建立用戶replica,並賦予登陸和複製的權限。

postgres# CREATE ROLE replica login replication encrypted password 'replica' 

2.修改pg_hba.conf,容許replica用戶來同步。

在pg_hba.conf裏增長兩行:

host     all             all          192.168.20.94/32          trust   #容許94鏈接到主服務器 host replication replica 192.168.20.94/32 md5 #容許94使用replica用戶來複制 

這樣,就設置了replica這個用戶能夠從192.168.20.93進行流複製請求。

注:
第二個字段必需要填replication

4.修改postgresql.conf

listen_addresses = '*' # 監聽全部IP archive_mode = on # 容許歸檔 archive_command = 'cp %p /opt/pgsql/pg_archive/%f' # 用該命令來歸檔logfile segment wal_level = hot_standby max_wal_senders = 32 # 這個設置了能夠最多有幾個流複製鏈接,差很少有幾個從,就設置幾個wal_keep_segments = 256 # 設置流複製保留的最多的xlog數目 wal_sender_timeout = 60s # 設置流複製主機發送數據的超時時間 max_connections = 100 # 這個設置要注意下,從庫的max_connections必需要大於主庫的 

配置完兩個文件後重啓服務器。

pg_ctl stop -D /opt/pgsql/data
pg_ctl start -D /opt/pgsql/data

3.測試94可否鏈接93數據庫。在94上運行以下命令:

psql -h 192.168.20.93 -U postgres 

看看是否能進入數據庫。若能夠,則正常。

2.2 從服務器

1.從主節點拷貝數據到從節點

su - postgres
rm -rf /opt/pgsql/data/*   #先將data目錄下的數據都清空(建議先備份一下) pg_basebackup -h 192.168.20.93 -U replica -D /opt/pgsql/data -X stream -P # 從93拷貝數據到94(基礎備份) mkdir /opt/pgsql/pg_archive 

2.配置recovery.conf

複製/usr/pgsql-9.4/share/recovery.conf.sample 到 /opt/pgsql/data/recovery.conf

cp /usr/pgsql-9.4/share/recovery.conf.sample /opt/pgsql/data/recovery.conf

修改recovery.conf

standby_mode = on    # 說明該節點是從服務器 primary_conninfo = 'host=192.168.20.93 port=5432 user=replica password=replica' # 主服務器的信息以及鏈接的用戶 recovery_target_timeline = 'latest' 

3.配置postgresql.conf

wal_level = hot_standby
max_connections = 1000 # 通常查多於寫的應用從庫的最大鏈接數要比較大
hot_standby = on # 說明這臺機器不單單是用於數據歸檔,也用於數據查詢
max_standby_streaming_delay = 30s # 數據流備份的最大延遲時間 wal_receiver_status_interval = 10s # 多久向主報告一次從的狀態,固然從每次數據複製都會向主報告狀態,這裏只是設置最長的間隔時間 hot_standby_feedback = on # 若是有錯誤的數據複製,是否向主進行反饋 

配置完後重啓從服務器

pg_ctl stop -D /opt/pgsql/data
pg_ctl start -D /opt/pgsql/data

3. 驗證是否部署成功

在主節點上執行:

select client_addr,sync_state from pg_stat_replication; 

結果以下:

postgres=# select client_addr,sync_state from pg_stat_replication; client_addr | sync_state ---------------+------------ 192.168.20.94 | async (1 行記錄) 

說明94是從服務器,在接收流,並且是異步流複製。

此外,還能夠分別在主、從節點上運行 ps aux | grep postgres 來查看進程:

主服務器(93)上:

postgres 262270  0.0  0.0 337844  2832 ?        Ss   10:14   0:00 postgres: wal sender process replica 192.168.20.94(13059) streaming 0/A002A88

能夠看到有一個 wal sender 進程。

從服務器(94)上:

postgres 569868  0.0  0.0 384604  2960 ?        Ss   10:14   0:02 postgres: wal receiver process   streaming 0/A002B60

能夠看到有一個 wal receiver 進程。

至此,PostgreSQL主從流複製安裝部署完成。

在主服務器上插入數據或刪除數據,在從服務器上能看到相應的變化。從服務器上只能查詢,不能插入或刪除。

相關文章
相關標籤/搜索