欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PostgreSQL?流復(fù)制配置環(huán)境搭建過程

 更新時間:2023年09月07日 11:48:32   作者:Bing@DBA  
PostgreSQL 流復(fù)制是 9.0 提供的一種新的 WAL 傳遞方法,使用流復(fù)制時,每當(dāng) Primary 節(jié)點 WAL 產(chǎn)生,就會馬上傳遞到 Standby 節(jié)點,流復(fù)制提供異步和同步兩種模式,同步模式可以保障數(shù)據(jù) 0 丟失,這篇文章主要介紹了PostgreSQL?流復(fù)制搭建,需要的朋友可以參考下

前言

PostgreSQL 流復(fù)制(Streaming Replication)是 9.0 提供的一種新的 WAL 傳遞方法。使用流復(fù)制時,每當(dāng) Primary 節(jié)點 WAL 產(chǎn)生,就會馬上傳遞到 Standby 節(jié)點,流復(fù)制提供 異步 同步 兩種模式,同步模式可以保障數(shù)據(jù) 0 丟失。

1. 配置環(huán)境

1.1 環(huán)境介紹

主機名IP 地址角色數(shù)據(jù)目錄
172-16-104-7172.16.104.7Master/data/pgsql12/data/
172-16-104-56172.16.104.56Standby/data/pgsql12/data/

PostgreSQL 版本:PostgreSQL 12.2操作系統(tǒng):CentOS Linux release 7.8.2003 (Core)

1.2 主庫白名單

Master 節(jié)點配置 pg_hba.conf 表示接受流復(fù)制的用戶連接:

host    replication     all             0/0                     md5

上面這條 SQL 語句的含義是允許任意用戶從任何網(wǎng)絡(luò)(0/0)網(wǎng)絡(luò)上發(fā)起到本數(shù)據(jù)庫的流復(fù)制連接,使用MD5的密碼認(rèn)證。

1.3 主庫參數(shù)配置

# 監(jiān)聽
listen_addresses = '*'
# 流復(fù)制客戶端的最大并發(fā)數(shù),設(shè)置為 0 表示禁用復(fù)制
max_wal_senders = 10
# WAL 日志級別
wal_level = replica

上面的參數(shù)需要重啟 PostgreSQL 服務(wù)后生效。

2. 流復(fù)制搭建

使用 pg_basebackup 將主庫數(shù)據(jù)備份恢復(fù)到 Standby 節(jié)點,搭建 異步/同步 流復(fù)制,步驟歸納:

  • 準(zhǔn)備環(huán)境 PostgreSQL 主節(jié)點和備節(jié)點。
  • 參數(shù)調(diào)整 pg_hba.conf、postgresql.conf,創(chuàng)建復(fù)制用戶。
  • 備份主節(jié)點的數(shù)據(jù),恢復(fù)到備節(jié)點。
  • 修改 primary_conninfo 啟動備庫。
  • 檢查是否啟動成功。

2.1 備份恢復(fù)

在主庫執(zhí)行全量備份:

pg_basebackup -D /data/pgsql12/backup  -v -P -X stream -Upostgres -h 127.0.0.1 -p5432 -R

將備份 SCP 到備庫節(jié)點:

scp -r ./backup/ root@172.16.104.56:/data/backup

關(guān)閉 Standby 節(jié)點,清空 Standby 節(jié)點的數(shù)據(jù)文件,或者使用 mv 修改目錄名:

# 備份數(shù)據(jù)目錄,或者可以直接清空
mv /data/pgsql12/data /data/pgsql12/data_bak
# 將備份文件轉(zhuǎn)移到數(shù)據(jù)目錄
mv /data/pgsql12/backup /data/pgsql12/data
# 修改文件屬組
chown -R postgres:postgres /data/pgsql12

2.2 創(chuàng)建復(fù)制用戶

主庫創(chuàng)建專用于流復(fù)制的用戶:

CREATE ROLE repl REPLICATION LOGIN PASSWORD 'repl123';

2.3 參數(shù)修改

PostgreSQL 使用 standby.signal 文件表示實例為 Standby 節(jié)點。在使用 pg_basebackup 備份添加 -R 參數(shù)(write configuration for replication)會在 postgresql.auto.conf 文件中寫入 primary_conninfo 參數(shù)信息,這里我們需要按照實際情況調(diào)整:

primary_conninfo = 'host=172.16.104.7 port=5432 user=repl password=repl123'

2.4 啟動并檢查

參數(shù)配置完成后,啟動 Standby 節(jié)點即可:

pg_ctl -D /data/pgsql12/data/ -l /data/pgsql12/logs/start.log start

在主節(jié)點,可通過下方 SQL 查詢流復(fù)制的監(jiān)控信息:

postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 27408
usesysid         | 24865
usename          | repl
application_name | walreceiver
client_addr      | 172.16.104.56
client_hostname  | 
client_port      | 40990
backend_start    | 2023-09-05 14:11:56.978627+08
backend_xmin     | 
state            | streaming
sent_lsn         | 6/4001BB0
write_lsn        | 6/4001BB0
flush_lsn        | 6/4001BB0
replay_lsn       | 6/4001BB0
write_lag        | 
flush_lag        | 
replay_lag       | 
sync_priority    | 0
sync_state       | async
reply_time       | 2023-09-05 15:03:58.408518+08

其中 state = streaming 表示流復(fù)制狀態(tài)正常,如果有異常,可以查看 error log 中的信息,或者啟動的時候就 tail -f error_log,實時關(guān)注輸出的異常信息。

2.5 同步流復(fù)制

上面 2.1~2.4 是介紹如何搭建 異步 流復(fù)制。

PostgreSQL 異步流復(fù)制的缺點是當(dāng)主庫損壞的時候,激活備庫可能會丟失一部分?jǐn)?shù)據(jù),這于 MySQL 異步復(fù)制相同,主庫只管發(fā)送增量日志,掛掉后可能有部分日志從庫還沒有接收到,此時發(fā)生切換就會出現(xiàn)數(shù)據(jù)丟失,同步復(fù)制可以解決該類問題。不過需要注意的是,如果配置同步復(fù)制 Standby 節(jié)點掛掉,會導(dǎo)致 Priamry 節(jié)點卡住,所以一般會有多個 Standby 節(jié)點,至少保障 WAL 同步到一個 Standby 節(jié)點。

同步復(fù)制配置多加一個 synchronous_standby_names 參數(shù),有 3 種配置方法:

synchronous_standby_names = 's1,s2,s3'

在這個例子中,如果有 s1、s2、s3 三臺 Standby 節(jié)點在運行,意味著 s1 為同步節(jié)點,其他節(jié)點均為潛在同步節(jié)點,即 WAL 只需傳遞給 s1 節(jié)點就可以提交。

synchronous_standby_names = 'FIRST 2 (s1, s2, s3)'

在這個例子中,如果有四個后備服務(wù)器 s1、s2、s3 和 s4 在運行,兩個后備服務(wù)器 s1 和 s2 將被選中為同步后備,因為它們出現(xiàn)在后備服務(wù)器名稱列表的前部。s3 是一個潛在的同步后備,當(dāng) s1 或 s2 中的任何一個失效, 它就會取而代之。s4 則是一個異步后備因為它的名字不在列表中。

synchronous_standby_names = 'ANY 2 (s1, s2, s3)'

在這個例子中,如果有四臺后備服務(wù)器 s1、s2、s3 以及 s4 正在運行,事務(wù)提交將會等待來自至少其中任意兩臺后備服務(wù)器的回復(fù)。s4 是一臺異步后備,因為它的名字不在該列表中。

現(xiàn)在我們的架構(gòu)是一個 Primary 節(jié)點一個 Standby 節(jié)點,現(xiàn)在通過修改參數(shù)調(diào)整為 同步流復(fù)制 修改主庫參數(shù):

# 其中 walreceiver 為 Standby 節(jié)點的名字,由 primary_conninfo 中的 application_name 設(shè)置
synchronous_standby_names = 'walreceiver'

修改該參數(shù)不需要重啟數(shù)據(jù)庫,使用 reload 重新加載配置即可:

pg_ctl reload -D /data/pgsql12/data/

在 Primary 節(jié)點查詢流復(fù)制的狀態(tài)信息:

postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 13561
usesysid         | 24865
usename          | repl
application_name | walreceiver
client_addr      | 172.16.104.56
client_hostname  | 
client_port      | 42126
backend_start    | 2023-09-06 17:18:48.297466+08
backend_xmin     | 
state            | streaming
sent_lsn         | 6/50007D0
write_lsn        | 6/50007D0
flush_lsn        | 6/50007D0
replay_lsn       | 6/50007D0
write_lag        | 
flush_lag        | 
replay_lag       | 
sync_priority    | 1
sync_state       | sync
reply_time       | 2023-09-06 17:45:00.706196+08

其中 sync_stateasync 變?yōu)?sync 表示為同步模式。

2.6 同步復(fù)制級別

影響同步復(fù)制還需要關(guān)注一個參數(shù) synchronous_commit 用來設(shè)置事務(wù)的同步級別:

postgres=# select * from pg_settings where name = 'synchronous_commit';
-[ RECORD 1 ]---+------------------------------------------------------
name            | synchronous_commit
setting         | on
unit            | 
category        | Write-Ahead Log / Settings
short_desc      | Sets the current transaction's synchronization level.
extra_desc      | 
context         | user
vartype         | enum
source          | default
min_val         | 
max_val         | 
enumvals        | {local,remote_write,remote_apply,on,off}
boot_val        | on
reset_val       | on
sourcefile      | 
sourceline      | 
pending_restart | f
  • local:WAL 日志被本地持久化后(不用管遠(yuǎn)程)事務(wù) commit 就可以返回。
  • remote_write:WAL 日志被傳到備庫的內(nèi)存中(不必等其被持久化)事務(wù) commit 才返回。
  • remote_apply:WAL 日志被傳到備庫并被 apply,事務(wù) commit 才返回。
  • on:WAL 日志被傳到備庫并被持久化(不必等其被 apply)事務(wù) commit 才返回。
  • off:不必等 WAL 日志被本地持久化,也不管是否傳到遠(yuǎn)程,事務(wù) commit 都可以立即返回。

對于同步復(fù)制,可選的值有 remote_write、remote_apply、on。

3. 流復(fù)制監(jiān)控

3.1 角色判斷

select pg_is_in_recovery();

判斷數(shù)據(jù)庫是否為主庫 f 表示是主庫, t 表示屬于備庫角色。

3.2 主庫查看流復(fù)制

查看流復(fù)制信息,可以在主庫查看 pg_stat_replication 視圖,可以查看流復(fù)制的狀態(tài)信息:

  • sent_lsn:發(fā)送 WAL 的位置。
  • write_lsn:備庫已接收到這部分日志,但還沒有刷到磁盤中。
  • flush_lsn:備庫已把 WAL 寫入到磁盤中。
  • replay_lsn:備庫應(yīng)用 WAL 的位置。
  • sync_state:同步模式。
  • state:流復(fù)制狀態(tài)。
select * from pg_stat_replication;

輸出結(jié)果:

postgres=# \x
Expanded display is on.

postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 13561
usesysid         | 24865
usename          | repl
application_name | walreceiver
client_addr      | 172.16.104.56
client_hostname  | 
client_port      | 42126
backend_start    | 2023-09-06 17:18:48.297466+08
backend_xmin     | 
state            | streaming
sent_lsn         | 6/50007D0
write_lsn        | 6/50007D0
flush_lsn        | 6/50007D0
replay_lsn       | 6/50007D0
write_lag        | 
flush_lag        | 
replay_lag       | 
sync_priority    | 1
sync_state       | sync
reply_time       | 2023-09-07 10:06:18.000504+08

3.3 延遲監(jiān)控

使用下方 SQL 可以查看 Standby 節(jié)點落后主庫多少字節(jié) WAL 日志:

select pg_wal_lsn_diff(pg_current_wal_lsn(),replay_lsn) from pg_stat_replication; 

3.4 備庫查詢復(fù)制信息

在備庫也可以通過查詢 pg_stat_wal_receiver 視圖,獲得流復(fù)制的監(jiān)控信息:

  • pid:WAL 接收進(jìn)程 ID。
  • status:流復(fù)制狀態(tài),只有 streaming 為正常狀態(tài)。
  • receive_start_lsn:WAL 接收進(jìn)程啟動時使用的第一個 WAL 日志的位置。
  • receive_start_tli:WAL 接收進(jìn)程啟動時使用的第一個時間線編號。
  • received_lsn:已經(jīng)接收到并且已經(jīng)被寫入磁盤的最后一個 WAL 日志的位置。
  • received_tli:已經(jīng)接收到并且已經(jīng)被寫入磁盤的最后一個 WAL 日志的時間線編號。
  • last_msg_send_time:接收到最后一條 WAL 日志消息后,向主庫發(fā)回確認(rèn)消息的發(fā)送時間。
  • last_msg_receipt_time:備庫接收到最后一條 WAL 日志消息的接收時間。
  • slot_name:使用復(fù)制槽的名稱。
  • conninfo:連接主庫的連接串,密碼等安全相關(guān)的信息會被隱去。
select * from pg_stat_wal_receiver;
postgres=# \x
Expanded display is on.
postgres=# 
postgres=# select * from pg_stat_wal_receiver;
-[ RECORD 1 ]---------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
pid                   | 113395
status                | streaming
receive_start_lsn     | 6/5000000
receive_start_tli     | 3
received_lsn          | 6/50007D0
received_tli          | 3
last_msg_send_time    | 2023-09-07 10:20:00.207856+08
last_msg_receipt_time | 2023-09-07 10:20:00.20971+08
latest_end_lsn        | 6/50007D0
latest_end_time       | 2023-09-06 17:19:46.661221+08
slot_name             | 
sender_host           | 172.16.104.7
sender_port           | 5432
conninfo              | user=repl password=******** dbname=replication host=172.16.104.7 port=5432 fallback_application_name=walreceiver sslmode=disable sslcompression=0 gssencmode=disable krbsrvname=postgres target_session_attrs=any

到此這篇關(guān)于PostgreSQL 流復(fù)制搭建的文章就介紹到這了,更多相關(guān)PostgreSQL 流復(fù)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Postgresql開啟SQL執(zhí)行語句收集過程

    Postgresql開啟SQL執(zhí)行語句收集過程

    本文介紹如何修改PostgreSQL的配置文件來啟用SQL執(zhí)行語句的日志記錄,包括打開配置文件、修改日志相關(guān)設(shè)置以及查看日志文件的方法,關(guān)鍵步驟包括刪除注釋符號、設(shè)定日志存儲路徑和文件名、選擇記錄的SQL語句類型,此操作有助于數(shù)據(jù)庫管理和問題調(diào)試
    2024-10-10
  • PostgreSQL 慢查詢SQL跟蹤操作

    PostgreSQL 慢查詢SQL跟蹤操作

    這篇文章主要介紹了PostgreSQL 慢查詢SQL跟蹤操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL 字符串拆分與合并案例

    PostgreSQL 字符串拆分與合并案例

    這篇文章主要介紹了PostgreSQL 字符串拆分與合并案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • postgresql數(shù)據(jù)庫根據(jù)年月查詢出本月的所有數(shù)據(jù)操作

    postgresql數(shù)據(jù)庫根據(jù)年月查詢出本月的所有數(shù)據(jù)操作

    這篇文章主要介紹了postgresql數(shù)據(jù)庫根據(jù)年月查詢出本月的所有數(shù)據(jù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL圖(graph)的遞歸查詢實例

    PostgreSQL圖(graph)的遞歸查詢實例

    這篇文章主要給大家介紹了關(guān)于PostgreSQL圖(graph)的遞歸查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用PostgreSQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • PostgreSQL 存儲過程的進(jìn)階講解(含游標(biāo)、錯誤處理、自定義函數(shù)、事務(wù))

    PostgreSQL 存儲過程的進(jìn)階講解(含游標(biāo)、錯誤處理、自定義函數(shù)、事務(wù))

    PL/pgSQL 游標(biāo)允許我們封裝一個查詢,然后每次處理結(jié)果集中的一條記錄,這篇文章主要介紹了PostgreSQL 存儲過程的進(jìn)階介紹(含游標(biāo)、錯誤處理、自定義函數(shù)、事務(wù)),需要的朋友可以參考下
    2023-03-03
  • PostgreSQL 序列增刪改案例

    PostgreSQL 序列增刪改案例

    這篇文章主要介紹了PostgreSQL 序列增刪改案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 淺談PostgreSQL 11 新特性之默認(rèn)分區(qū)

    淺談PostgreSQL 11 新特性之默認(rèn)分區(qū)

    這篇文章主要介紹了淺談PostgreSQL 11 新特性之默認(rèn)分區(qū),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL創(chuàng)建自增序列、查詢序列及使用序列代碼示例

    PostgreSQL創(chuàng)建自增序列、查詢序列及使用序列代碼示例

    數(shù)據(jù)庫中主鍵的生成一般是通過序列來生成,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL創(chuàng)建自增序列、查詢序列及使用序列的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 詳解PostgreSQL中實現(xiàn)數(shù)據(jù)透視表的三種方法

    詳解PostgreSQL中實現(xiàn)數(shù)據(jù)透視表的三種方法

    數(shù)據(jù)透視表(Pivot Table)是進(jìn)行數(shù)據(jù)匯總、分析、瀏覽和展示的強大工具,可以幫助我們了解數(shù)據(jù)中的對比情況、模式和趨勢,是數(shù)據(jù)分析師和運營人員必備技能之一,本給大家介紹PostgreSQL中實現(xiàn)數(shù)據(jù)透視表的三種方法,需要的朋友可以參考下
    2024-04-04

最新評論