成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PostgreSQl 12主從流復制及歸檔配置

運維 數據庫運維 PostgreSQL
創建一個高可用性(HA)集群配置可采用連續歸檔,集群中主服務器工作在連續歸檔模式下,備服務器工作在連續恢復模式下(1臺或多臺可隨時接管主服務器),備持續從主服務器讀取WAL文件。

上一篇文章說道PostgreSQL 12 的源碼部署,這里我們說一下PostgreSQl 12的主從流復制和歸檔配置。

主從復制的兩種形式

1) 基于文件的日志傳送

創建一個高可用性(HA)集群配置可采用連續歸檔,集群中主服務器工作在連續歸檔模式下,備服務器工作在連續恢復模式下(1臺或多臺可隨時接管主服務器),備持續從主服務器讀取WAL文件。連續歸檔不需要對數據庫表做任何改動,可有效降低管理開銷,對主服務器的性能影響也相對較低。直接從一個數據庫服務器移動WAL記錄到另一臺服務器被稱為日志傳送,PostgreSQL通過一次一文件(WAL段)的WAL記錄傳輸實現了基于文件的日志傳送。日志傳送所需的帶寬取根據主服務器的事務率而變化;日志傳送是異步的,即WAL記錄是在事務提交后才被傳送,那么在一個窗口期內如果主服務器發生災難性的失效則會導致數據丟失,還沒有被傳送的事務將會被丟失;數據丟失窗口可以通過使用參數archive_timeout進行限制,可以低至數秒,但同時會增加文件傳送所需的帶寬。archive_timeout強制N秒以后進行一次歸檔,若設置太小,很快就會超過wal_keep_segments 的值,導致數據覆蓋丟失,因此不要盲目設置。

2)流復制

PostgreSQL在9.x之后引入了主從的流復制機制,所謂流復制,就是備服務器通過tcp流從主服務器中同步相應的數據,主服務器在WAL記錄產生時即將它們以流式傳送給備服務器,而不必等到WAL文件被填充。默認情況下流復制是異步的,這種情況下主服務器上提交一個事務與該變化在備服務器上變得可見之間客觀上存在短暫的延遲,但這種延遲相比基于文件的日志傳送方式依然要小得多,在備服務器的能力滿足負載的前提下延遲通常低于一秒;在流復制中,備服務器比使用基于文件的日志傳送具有更小的數據丟失窗口,不需要采用archive_timeout來縮減數據丟失窗口;PostgreSQL 12開始,在執行通過流復制來配置主備數據庫的時候,不再需要配置額外配置recovery.conf文件了。取而代之的是在備庫環境的$PGDATA路徑下配置一個standby.signal文件,注意該文件是一個普通的文本文件,內容為空。理解起來就是,該文件是一個標識文件。如果備庫通過執行pg_ctl promote提升為主庫的話,那么該文件將自動消失。

注意:全部操作都以postgres用戶進行。

配置主從流復制和歸檔

1)兩臺機器做免密登錄

我們備份和還原過程中所用的archive_command和restore_command命令都以postgres用戶運行,因此我們需要針對postgres用戶實現ssh無密碼登錄。

  1. # 用postgres用戶登錄到主pgsql服務器 
  2. ssh-keygen -t rsa  # 一路回車 
  3. scp /home/postgres/.ssh/id_rsa.pub postgres@10.10.22.152:/home/postgres/.ssh/authorized_keys 
  4.  
  5. 或者拷貝id_rsa.pub文件到從pgsql上,然后到從上執行以下命令 
  6.  
  7. cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys  
  8.  
  9.  
  10. # 登錄從pgsql服務器查看權限 
  11. chmod 700 /home/postgres/.ssh 
  12. chmod 600 /home/postgres/.ssh/authorized_keys 
  13.  
  14. # 測試登錄 
  15. ssh postgres@10.10.22.152 
  16.  
  17.  
  18. # 從pgsql庫 
  19. ssh-keygen -t rsa  # 一路回車 
  20. scp /home/postgres/.ssh/id_rsa.pub postgres@10.10.22.151:/home/postgres/.ssh/authorized_keys 
  21.  
  22. # 登錄從pgsql服務器查看權限 
  23. chmod 700 /home/postgres/.ssh 
  24. chmod 600 /home/postgres/.ssh/authorized_keys 
  25.  
  26. # 測試登錄 
  27. ssh postgres@10.10.22.152 

2)主庫配置

  1. # 創建用戶 
  2. ceate user replica with replication login password 'replication'
  3. alter user replica with password 'replication'
  4.  
  5. # 修改pg_hba.conf 
  6. host  replication  replica 10.10.0.0/16  md5 
  7.  
  8.  
  9. # 修改配置文件 
  10. $ vim /data/postgresql-12/data/postgresql.conf 
  11.  
  12. # 監聽所有IP 
  13. listen_addresses = "0.0.0.0" 
  14. # 最大連接數,據說從機需要大于或等于該值 
  15. max_connections = 200 
  16. # 設置主pgsql為生成wal的主機,9.6開始沒有hot_standby(熱備模式) 
  17. wal_level = replica 
  18.  
  19. # 開啟連續歸檔 
  20. archive_mode = on 
  21. #歸檔命令。-o "StrictHostKeyChecking no" 作用是取消第一次連接輸入yes或者no 
  22. archive_command = 'scp -o "StrictHostKeyChecking no" %p pgslave.ptcloud.t.home:/data/postgresql-12/archive/%f' 
  23. # archive_command = 'test ! -f /data/postgresql-12/archive/%f && scp %p pgslave.ayunw.cn:/data/postgresql-12/archive/%f' 
  24. archive_cleanup_command = '/usr/local/postgresql-12/bin/pg_archivecleanup -d /data/postgresql-12/data/pg_wal %r >> /data/postgresql-12/log/archive_cleanup.log 2>&1' 
  25. # 最多有16個流復制連接。 
  26. max_wal_senders = 16 
  27. # 設置流服務保留的最多wal(老版本叫xlog)文件個數 
  28. wal_keep_segments = 256 
  29. # 數據堆清理的最大進程 
  30. autovacuum_max_workers = 2 
  31. max_worker_processes = 16 
  32. max_logical_replication_workers = 10 
  33. # 日志設置 
  34. log_destination = 'stderr' 
  35. logging_collector = on 
  36. log_directory = '/data/postgresql-12/log' 
  37. log_filename = 'postgresql-%w.log' 
  38. log_file_mode = 0600 
  39. log_truncate_on_rotation = on 
  40. log_rotation_age = 1d 
  41. log_rotation_size = 1GB 
  42.  
  43. log_min_messages = error 
  44. # 執行超過300ms的sql語句會記錄到pgsql的日志文件,類似于慢日志 
  45. # 一般設置300ms就好,慢日志會打到pgsql日志文件,方便查問題 
  46. log_min_duration_statement = 300 
  47. log_checkpoints = on 
  48. log_connections = on 
  49. log_disconnections = on 
  50. log_error_verbosity = verbose 
  51. log_hostname = on 
  52. log_line_prefix = '%m [%p] ' 
  53. log_lock_waits = on  
  54. log_statement = 'ddl' 
  55.  
  56. # 主庫設置完成后,需要root用戶重啟PG服務才能使以上配置生效 
  57. systemctl daemon-reload 
  58. systemctl restart postgresql 
  59.  
  60.  
  61. su - postgres 
  62. psql 
  63.  
  64. # 主庫創建具有流復制權限的用戶replica 
  65. CREATE user replica login replication encrypted password 'replication'
  66.  
  67. postgres=# \du; 
  68.                                    List of roles 
  69.  Role name |                         Attributes                         | Member of 
  70. -----------+------------------------------------------------------------+----------- 
  71.  postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {} 
  72.  replica   | Replication                                                | {} 
  73.  
  74.  
  75. # 主庫增加主從復制的信任訪問(pg_hba.conf) 
  76.  
  77. $ vim /data/postgresql-12/data/pg_hba.conf 
  78. # replication privilege. 
  79. host    replication     replica         10.10.0.0/16            trust 
  80.  
  81.  
  82. # 重啟服務 
  83. systemctl daemon-reload 
  84. systemctl restart postgresql 
  85. systemctl status postgresql 

3)從庫配置

  1. # 停止從庫,刪除從pgsql數據目錄中的數據 
  2.  
  3. # 備份數據目錄 
  4. mkdir -p /opt/pgsqldata_backup 
  5. mv /data/postgresql-12/data/* /opt/pgsqldata_backup 
  6.  
  7. pg_ctl -D /data/postgresql-12/data -l logfile stop 
  8. rm -rf /data/postgresql-12/data/* 

4)從庫做基礎備份

從主服務器上copy數據到從服務器,這一步叫做“基礎備份”

  1. su - postgres 
  2.  
  3. $ pg_basebackup -h 10.10.22.151 -p 5432 -U replica -W -R -Fp -Xs -Pv -D /data/postgresql-12/data/ 
  4. Password
  5. pg_basebackup: initiating base backup, waiting for checkpoint to complete 
  6. pg_basebackup: checkpoint completed 
  7. pg_basebackup: write-ahead log start point: 0/8000028 on timeline 1 
  8. pg_basebackup: starting background WAL receiver 
  9. pg_basebackup: created temporary replication slot "pg_basebackup_13370" 
  10. 31384/31384 kB (100%), 1/1 tablespace 
  11. pg_basebackup: write-ahead log end point: 0/8000100 
  12. pg_basebackup: waiting for background process to finish streaming ... 
  13. pg_basebackup: syncing data to disk ... 
  14. pg_basebackup: base backup completed 

參數說明:

  • -h 啟動的主庫數據庫地址
  • -p 主庫數據庫端口
  • -U 流復制用戶
  • -W 使用密碼驗證,要用replica的密碼
  • -Fp 備份輸出正常的數據庫目錄
  • -Xs 使用流復制的方式進行復制
  • -Pv 輸出復制過程的詳細信息
  • -R 為備庫創建recovery.conf文件。但是pgsql 10以后的新版本的pgsql不需要這個文件了。
  • -D 指定創建的備庫的數據庫目錄

5) 配置從庫的配置文件

注意:這時候,從庫數據目錄下的postgresql.conf文件是剛才從主的pgsql上同步過來的,并不是pgsql的配置文件,你需要將原先老的從庫上的配置文件拿過來用。

  1. $ cd /data/postgresql-12/data/ 
  2. $ mv postgres.conf  postgres.conf_master.bak 
  3.  
  4. $ cp /opt/pgsqldata_backup/postgres.conf postgres.conf 
  5.  
  6. $ vim /data/postgresql-12/data/postgres.conf 
  7.  
  8. # 監聽所有IP 
  9. listen_addresses = "0.0.0.0" 
  10.  
  11. # 最大連接數,從pgsql需要大于或等于主的值 
  12. max_connections = 300 
  13.  
  14. restore_command = 'cp /data/postgresql-12/archive/%f %p' 
  15. archive_cleanup_command = '/usr/local/postgresql-12/bin/pg_archivecleanup -d /data/postgresql-12/data/pg_wal %r && /usr/local/postgresql-12/bin/pg_archivecleanup -d /data/postgresql-12/archive %r >> /data/postgresql-12/log/archive_cleanup.log 2>&1' 
  16.  
  17. # 9.6開始沒有hot_standby(熱備模式) 
  18. wal_level = replica 
  19. # 最多有16個流復制連接。 
  20. max_wal_senders = 16 
  21.  
  22. # 設置比主庫大,可以設置為2倍的數值 
  23. wal_keep_segments = 512 
  24. max_logical_replication_workers = 10 
  25.  
  26. autovacuum_max_workers = 2 
  27. # 和主的值保持一致即可 
  28. max_worker_processes = 16 
  29.  
  30. # 說明這臺機器不僅用于數據歸檔,還可以用于數據查詢 
  31. hot_standby = on 
  32. #流備份的最大延遲時間 
  33. max_standby_streaming_delay = 30s  
  34. # 向主機匯報本機狀態的間隔時間 
  35. wal_receiver_status_interval = 10s  
  36. # 出現錯誤復制,向主機反饋 
  37. hot_standby_feedback = on 
  38.  
  39.  
  40. # 日志設置 
  41. log_destination = 'stderr' 
  42. logging_collector = on 
  43. log_directory = '/data/postgresql-12/log' 
  44. log_filename = 'postgresql-%w.log' 
  45. log_file_mode = 0600 
  46. log_truncate_on_rotation = on 
  47. log_rotation_age = 1d 
  48. log_rotation_size = 1GB 
  49.  
  50. log_min_messages = error 
  51. # 執行超過300ms的sql語句會被記錄到pgsql的日志文件中 
  52. log_min_duration_statement = 300 
  53. log_checkpoints = on 
  54. log_connections = on 
  55. log_disconnections = on 
  56. log_error_verbosity = verbose 
  57. log_hostname = on 
  58. log_line_prefix = '%m [%p] ' 
  59. log_lock_waits = on  
  60. log_statement = 'ddl' 

6) 重啟從庫

要保證從庫的數據目錄是postgres屬主和屬組,且權限為0700

  1. su - postgres 
  2. pg_ctl -D /data/postgresql-12/data restart 

驗證pgsql主從

  1. # 登錄主庫 
  2. su - postgres 
  3.  
  4. postgres=# psql 
  5.  
  6. postgres=# select client_addr,sync_state from pg_stat_replication; 
  7.  client_addr  | sync_state 
  8. --------------+------------ 
  9.  10.10.22.152 | async 
  10. (1 row) 
  11.  
  12.  
  13. select pid, usename, application_name, client_addr,  
  14.       backend_start, client_port, state, sync_state from pg_stat_replication; 
  15.  
  16.   pid  | usename | application_name | client_addr |         backend_start         | client_port |   state   | sync_state 
  17. -------+---------+------------------+-------------+-------------------------------+-------------+-----------+------------ 
  18.  28356 | repl    | walreceiver      | 10.10.22.152 | 2021-12-30 17:00:59.357653+08 |       48660 | streaming | async 
  19. (1 row) 

以上說明10.10.22.152服務器是從節點,在接收異步流復制

到這里,主流復制和歸檔配置完成。

本文轉載自微信公眾號「運維開發故事」

 

責任編輯:姜華 來源: 運維開發故事
相關推薦

2023-03-19 22:38:12

邏輯復制PostgreSQL

2023-03-19 11:53:27

2021-07-14 23:38:02

PostgreSQLOracle模式

2021-07-07 21:07:16

PostgreSQL架構容災庫

2021-06-08 07:48:27

MySQL主從配置

2020-12-22 10:11:13

MySQL數據庫復制原理

2017-06-26 08:28:41

PostgreSQL數據庫單機

2022-01-07 07:53:14

部署用戶管理

2011-08-24 14:07:13

PostgreSQLStreaming R

2022-02-08 16:17:41

MySQL主從復制數據庫

2018-04-08 15:20:15

數據庫MySQL主從復制

2019-01-17 09:04:01

PostgreSQL復制Redo

2023-07-03 08:57:45

Master服務TCP

2023-09-24 14:32:15

2023-03-08 08:44:47

2011-04-06 09:59:00

MySQL數據庫主從復制

2024-03-01 18:33:59

MySQL節點數據

2019-11-28 09:33:08

Redis架構互聯網

2025-02-10 10:55:16

2024-07-04 08:00:24

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频久久久久久 | 黄色在线观看网址 | 神马久久av | 国产毛片久久久 | 一区二区三区视频在线观看 | a级片www| 国产免费一区二区三区网站免费 | 久久国产精品一区二区 | 欧美a级成人淫片免费看 | 国产不卡一| 夜色www国产精品资源站 | 久久高清 | 黄色大片网站 | 99九九视频 | 日本免费在线 | 欧美精品综合在线 | 亚洲免费人成在线视频观看 | 日本在线精品视频 | 久久久久久久91 | 亚洲激情在线视频 | 国产91丝袜在线播放 | 老子午夜影院 | 中文字幕一区二区三区不卡在线 | 91精品国产综合久久久久久丝袜 | 亚洲成人一区 | 欧美视频xxx | 亚洲精品在线视频 | av中文字幕在线观看 | 91啪影院 | 日韩手机在线看片 | 日韩精品一区二区三区中文字幕 | 成人免费高清 | 国产精品视频在线观看 | 精品视频在线播放 | 99国产精品久久久久老师 | 久久久久久久久国产成人免费 | 中文字幕国产精品视频 | 欧美片网站免费 | 久久看看| 午夜精品一区二区三区在线视频 | 亚洲欧洲国产视频 |