最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

1. 配置環(huán)境

1.1 環(huán)境介紹

主機(jī)名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é)點(diǎn)配置 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é)點(diǎn),搭建 異步/同步 流復(fù)制,步驟歸納:

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

2.1 備份恢復(fù)

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

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

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

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

關(guān)閉 Standby 節(jié)點(diǎn),清空 Standby 節(jié)點(diǎn)的數(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 文件表示實(shí)例為 Standby 節(jié)點(diǎn)。在使用 pg_basebackup 備份添加 -R 參數(shù)(write configuration for replication)會(huì)在 postgresql.auto.conf 文件中寫入 primary_conninfo 參數(shù)信息,這里我們需要按照實(shí)際情況調(diào)整:

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

2.4 啟動(dòng)并檢查

參數(shù)配置完成后,啟動(dòng) Standby 節(jié)點(diǎn)即可:

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

在主節(jié)點(diǎn),可通過下方 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 中的信息,或者啟動(dòng)的時(shí)候就 tail -f error_log,實(shí)時(shí)關(guān)注輸出的異常信息。

2.5 同步流復(fù)制

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

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

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

synchronous_standby_names = 's1,s2,s3'

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

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

在這個(gè)例子中,如果有四個(gè)后備服務(wù)器 s1、s2、s3 和 s4 在運(yùn)行,兩個(gè)后備服務(wù)器 s1 和 s2 將被選中為同步后備,因?yàn)樗鼈兂霈F(xiàn)在后備服務(wù)器名稱列表的前部。s3 是一個(gè)潛在的同步后備,當(dāng) s1 或 s2 中的任何一個(gè)失效, 它就會(huì)取而代之。s4 則是一個(gè)異步后備因?yàn)樗拿植辉诹斜碇小?/p>

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

在這個(gè)例子中,如果有四臺后備服務(wù)器 s1、s2、s3 以及 s4 正在運(yùn)行,事務(wù)提交將會(huì)等待來自至少其中任意兩臺后備服務(wù)器的回復(fù)。s4 是一臺異步后備,因?yàn)樗拿植辉谠摿斜碇小?/p>

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

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

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

pg_ctl reload -D /data/pgsql12/data/

在 Primary 節(jié)點(diǎn)查詢流復(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)注一個(gè)參數(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é)點(diǎn)落后主庫多少字節(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)程啟動(dòng)時(shí)使用的第一個(gè) WAL 日志的位置。
  • receive_start_tli:WAL 接收進(jìn)程啟動(dòng)時(shí)使用的第一個(gè)時(shí)間線編號。
  • received_lsn:已經(jīng)接收到并且已經(jīng)被寫入磁盤的最后一個(gè) WAL 日志的位置。
  • received_tli:已經(jīng)接收到并且已經(jīng)被寫入磁盤的最后一個(gè) WAL 日志的時(shí)間線編號。
  • last_msg_send_time:接收到最后一條 WAL 日志消息后,向主庫發(fā)回確認(rèn)消息的發(fā)送時(shí)間。
  • last_msg_receipt_time:備庫接收到最后一條 WAL 日志消息的接收時(shí)間。
  • slot_name:使用復(fù)制槽的名稱。
  • conninfo:連接主庫的連接串,密碼等安全相關(guān)的信息會(huì)被隱去。
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 存儲(chǔ)函數(shù)調(diào)用變量的3種方法小結(jié)

    postgresql 存儲(chǔ)函數(shù)調(diào)用變量的3種方法小結(jié)

    這篇文章主要介紹了postgresql 存儲(chǔ)函數(shù)調(diào)用變量的3種方法小結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL主從復(fù)制的監(jiān)控與故障切換指南

    PostgreSQL主從復(fù)制的監(jiān)控與故障切換指南

    PostgreSQL作為一款功能強(qiáng)大、開源且高度可擴(kuò)展的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),憑借其穩(wěn)定性、性能和豐富的特性,被廣泛應(yīng)用于金融、電商、物聯(lián)網(wǎng)等關(guān)鍵業(yè)務(wù)場景,本文將深入探討PostgreSQL主從復(fù)制的監(jiān)控機(jī)制與自動(dòng)化故障切換策略,需要的朋友可以參考下
    2026-03-03
  • 解決PostgreSQL數(shù)據(jù)遷移過程中的數(shù)據(jù)類型不匹配問題

    解決PostgreSQL數(shù)據(jù)遷移過程中的數(shù)據(jù)類型不匹配問題

    在數(shù)據(jù)遷移的過程中,經(jīng)常會(huì)遇到源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫之間的數(shù)據(jù)類型不匹配的情況,對于 PostgreSQL 數(shù)據(jù)庫來說,處理這種數(shù)據(jù)類型不匹配問題需要一些特定的策略和技巧,需要的朋友可以參考下
    2024-07-07
  • PostGIS中ST_Union與ST_Collect的區(qū)別與使用詳解

    PostGIS中ST_Union與ST_Collect的區(qū)別與使用詳解

    這篇文章主要介紹了PostGIS中ST_Union與ST_Collect的區(qū)別與使用,對于初入PostGIS世界的新手來說,眾多的地理空間函數(shù)可能會(huì)讓人感到眼花繚亂,不知從何下手,而ST_Union與ST_Collect這兩個(gè)函數(shù),由于它們在功能上存在一定的相似性,常常容易被混淆,需要的朋友可以參考下
    2026-01-01
  • PostgreSQL中NULL陷阱的排除過濾指南

    PostgreSQL中NULL陷阱的排除過濾指南

    文章講述了在SQL中處理NULL值時(shí)遇到的常見問題,尤其在使用三值邏輯時(shí)容易出現(xiàn)問題,通過具體例子展示了如何避免隱式過濾NULL值,并提出了清晰的解決方案,同時(shí),還列舉了其他常見的NULL值陷阱,并提供了快速驗(yàn)證字段NULL情況的方法,需要的朋友可以參考下
    2026-05-05
  • PostgreSQL中使用dblink實(shí)現(xiàn)跨庫查詢的方法

    PostgreSQL中使用dblink實(shí)現(xiàn)跨庫查詢的方法

    這篇文章主要介紹了PostgreSQL中使用dblink實(shí)現(xiàn)跨庫查詢的方法,需要的朋友可以參考下
    2017-05-05
  • 教你在PostgreSql中使用JSON字段的方法

    教你在PostgreSql中使用JSON字段的方法

    這篇文章主要介紹了干貨教你在PostgreSql中使用JSON字段,通過本文可掌握在pg數(shù)據(jù)庫中如何正確使用json字段,如何進(jìn)行數(shù)據(jù)查詢,在where子查詢中如何使用,以及對json值進(jìn)行聚合查詢使用,需要的朋友可以參考下
    2022-11-11
  • PostgreSQL數(shù)據(jù)庫部署linux服務(wù)器完整教程

    PostgreSQL數(shù)據(jù)庫部署linux服務(wù)器完整教程

    本文主要述了在Linux服務(wù)器上部署PostgreSQL數(shù)據(jù)庫的過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-05-05
  • PostgreSQL實(shí)現(xiàn)透視表查詢的方法詳解

    PostgreSQL實(shí)現(xiàn)透視表查詢的方法詳解

    PostgreSQL 8.3版本發(fā)布時(shí),引入了一個(gè)名為tablefunc的新擴(kuò)展,這個(gè)擴(kuò)展提供了一組非常有趣的函數(shù),其中之一是交叉表函數(shù),用于創(chuàng)建數(shù)據(jù)透視表,這就是我們將在本文中討論的內(nèi)容,本文給大家介紹了PostgreSQL實(shí)現(xiàn)透視表查詢的方法,需要的朋友可以參考下
    2024-12-12
  • PgSQL條件語句與循環(huán)語句示例代碼詳解

    PgSQL條件語句與循環(huán)語句示例代碼詳解

    這篇文章主要介紹了PgSQL條件語句與循環(huán)語句,pgSQL中有兩種條件語句分別為if與case語句,每種語句通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07

最新評論

博湖县| 周宁县| 云霄县| 平远县| 福鼎市| 新野县| 西充县| 洛扎县| 宿州市| 滨州市| 甘德县| 大厂| 鸡泽县| 连城县| 容城县| 新河县| 溧阳市| 望奎县| 昌图县| 洪洞县| 右玉县| 河北区| 尖扎县| 巴塘县| 潮州市| 济阳县| 辽宁省| 墨江| 城固县| 双桥区| 宁阳县| 大城县| 宽甸| 巫溪县| 福建省| 肃南| 象州县| 修水县| 辽阳市| 雷波县| 永平县|