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

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

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

前言

PostgreSQL 流復制(Streaming Replication)是 9.0 提供的一種新的 WAL 傳遞方法。使用流復制時,每當 Primary 節(jié)點 WAL 產(chǎn)生,就會馬上傳遞到 Standby 節(jié)點,流復制提供 異步 同步 兩種模式,同步模式可以保障數(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 表示接受流復制的用戶連接:

host    replication     all             0/0                     md5

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

1.3 主庫參數(shù)配置

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

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

2. 流復制搭建

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

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

2.1 備份恢復

在主庫執(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

關閉 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)建復制用戶

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

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 查詢流復制的監(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 表示流復制狀態(tài)正常,如果有異常,可以查看 error log 中的信息,或者啟動的時候就 tail -f error_log,實時關注輸出的異常信息。

2.5 同步流復制

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

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

同步復制配置多加一個 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)'

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

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

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

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

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

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

pg_ctl reload -D /data/pgsql12/data/

在 Primary 節(jié)點查詢流復制的狀態(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 同步復制級別

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

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 日志被本地持久化后(不用管遠程)事務 commit 就可以返回。
  • remote_write:WAL 日志被傳到備庫的內(nèi)存中(不必等其被持久化)事務 commit 才返回。
  • remote_apply:WAL 日志被傳到備庫并被 apply,事務 commit 才返回。
  • on:WAL 日志被傳到備庫并被持久化(不必等其被 apply)事務 commit 才返回。
  • off:不必等 WAL 日志被本地持久化,也不管是否傳到遠程,事務 commit 都可以立即返回。

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

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

3.1 角色判斷

select pg_is_in_recovery();

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

3.2 主庫查看流復制

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

  • sent_lsn:發(fā)送 WAL 的位置。
  • write_lsn:備庫已接收到這部分日志,但還沒有刷到磁盤中。
  • flush_lsn:備庫已把 WAL 寫入到磁盤中。
  • replay_lsn:備庫應用 WAL 的位置。
  • sync_state:同步模式。
  • state:流復制狀態(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 備庫查詢復制信息

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

  • pid:WAL 接收進程 ID。
  • status:流復制狀態(tài),只有 streaming 為正常狀態(tài)。
  • receive_start_lsn:WAL 接收進程啟動時使用的第一個 WAL 日志的位置。
  • receive_start_tli:WAL 接收進程啟動時使用的第一個時間線編號。
  • received_lsn:已經(jīng)接收到并且已經(jīng)被寫入磁盤的最后一個 WAL 日志的位置。
  • received_tli:已經(jīng)接收到并且已經(jīng)被寫入磁盤的最后一個 WAL 日志的時間線編號。
  • last_msg_send_time:接收到最后一條 WAL 日志消息后,向主庫發(fā)回確認消息的發(fā)送時間。
  • last_msg_receipt_time:備庫接收到最后一條 WAL 日志消息的接收時間。
  • slot_name:使用復制槽的名稱。
  • conninfo:連接主庫的連接串,密碼等安全相關的信息會被隱去。
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

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

相關文章

  • postgresql 實現(xiàn)啟動、狀態(tài)查看、關閉

    postgresql 實現(xiàn)啟動、狀態(tài)查看、關閉

    這篇文章主要介紹了postgresql 實現(xiàn)啟動、狀態(tài)查看、關閉的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL表操作之表的創(chuàng)建及表基礎語法總結(jié)

    PostgreSQL表操作之表的創(chuàng)建及表基礎語法總結(jié)

    在PostgreSQL中創(chuàng)建表命令用于在任何給定的數(shù)據(jù)庫中創(chuàng)建新表,下面這篇文章主要給大家介紹了關于PostgreSQL表操作之表的創(chuàng)建及表基礎語法的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • PostgreSQL數(shù)據(jù)類型格式化函數(shù)操作

    PostgreSQL數(shù)據(jù)類型格式化函數(shù)操作

    這篇文章主要介紹了PostgreSQL數(shù)據(jù)類型格式化函數(shù)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL教程(十六):系統(tǒng)視圖詳解

    PostgreSQL教程(十六):系統(tǒng)視圖詳解

    這篇文章主要介紹了PostgreSQL教程(十六):系統(tǒng)視圖詳解,本文講解了pg_tables、pg_indexes、pg_views、pg_user、pg_roles、pg_rules、pg_settings等視圖的作用和字段含義等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • PostgreSQL 啟動失敗的解決方案

    PostgreSQL 啟動失敗的解決方案

    這篇文章主要介紹了PostgreSQL 啟動失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL數(shù)據(jù)目錄遷移的全過程

    PostgreSQL數(shù)據(jù)目錄遷移的全過程

    生產(chǎn)環(huán)境中隨著PostgreSQL數(shù)據(jù)庫表數(shù)據(jù)的不斷產(chǎn)生,數(shù)據(jù)庫目錄會不斷增長,當磁盤空間不足時會有將PostgreSQL數(shù)據(jù)庫數(shù)據(jù)目錄遷移到其他目錄的需求,下面詳細介紹目錄遷移過程,需要的朋友可以參考下
    2024-04-04
  • postgresql設置id自增的基本方法舉例

    postgresql設置id自增的基本方法舉例

    這篇文章主要給大家介紹了關于postgresql設置id自增的基本方法,自增字段主要用于實現(xiàn)自增主鍵或生成唯一版本號,文中通過代碼以及圖文介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Navicat連接postgresql時出現(xiàn)'datlastsysoid?does?not?exist'報錯問題完美解決

    Navicat連接postgresql時出現(xiàn)'datlastsysoid?does?not?exist&

    這篇文章主要給大家介紹了關于Navicat連接postgresql時出現(xiàn)'datlastsysoid?does?not?exist'報錯問題的完美解決辦法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • Postgresql根據(jù)響應數(shù)據(jù)反向?qū)崿F(xiàn)建表語句與insert語句的過程

    Postgresql根據(jù)響應數(shù)據(jù)反向?qū)崿F(xiàn)建表語句與insert語句的過程

    根據(jù)已有數(shù)據(jù),可構(gòu)建名為products的表,包含id(自增主鍵)、title(非空字符串)、progress(非空整數(shù))三個字段,建表后,可通過insert語句插入數(shù)據(jù),這種反向操作有助于從現(xiàn)有數(shù)據(jù)結(jié)構(gòu)出發(fā),快速構(gòu)建數(shù)據(jù)庫表,并進行數(shù)據(jù)填充,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • 詳解如何定位postgreSQL數(shù)據(jù)庫中未被使用過的索引

    詳解如何定位postgreSQL數(shù)據(jù)庫中未被使用過的索引

    在生產(chǎn)環(huán)境上,由于不規(guī)范的優(yōu)化措施,數(shù)據(jù)庫中可能存在大量的索引,并且相當一部分的索引重未被使用過,今天帶大家如何找出這些索引,本文給大家介紹了定位postgreSQL數(shù)據(jù)庫中未被使用過的索引的方法,需要的朋友可以參考下
    2024-03-03

最新評論