Sao lưu cơ sở dữ liệu đóng một vai trò cấp thiết trong việc thiết kế một chiến lược khôi phục sau thảm họa hiệu quả cho cơ sở dữ liệu sản xuất. Quản trị viên cơ sở dữ liệu và Kiến trúc sư phải liên tục làm việc hướng tới việc thiết kế một chiến lược sao lưu tối ưu và hiệu quả cho các cơ sở dữ liệu quan trọng của sứ mệnh thời gian thực và hơn nữa đảm bảo thỏa mãn các SLA Phục hồi sau thảm họa. Theo kinh nghiệm của tôi, điều này không dễ dàng và có thể mất từ vài ngày đến vài tuần để đạt được một chiến lược sao lưu hoàn hảo. Nó chỉ là không viết một kịch bản tốt để sao lưu cơ sở dữ liệu và đảm bảo nó hoạt động. Có một số yếu tố cần xem xét, chúng ta hãy xem xét chúng:
- Kích thước cơ sở dữ liệu: Kích thước cơ sở dữ liệu đóng một vai trò quan trọng khi thiết kế các chiến lược sao lưu. Trên thực tế, đây là một trong những yếu tố cốt lõi xác định
- Thời gian thực hiện sao lưu
- Tải trên các thành phần cơ sở hạ tầng như Đĩa, Mạng, CPU, v.v.
- Số lượng bộ nhớ dự phòng cần thiết và các chi phí liên quan
- Nếu cơ sở dữ liệu được lưu trữ trên đám mây thì chi phí lưu trữ dự phòng sẽ phụ thuộc vào dung lượng lưu trữ cần thiết
- Ngoài ra, kích thước cơ sở dữ liệu ảnh hưởng đến RTO
- Cơ sở hạ tầng: Chiến lược sao lưu chủ yếu dựa vào cơ sở hạ tầng của cơ sở dữ liệu. Quy trình sao lưu đối với cơ sở dữ liệu được lưu trữ trên máy chủ vật lý trong trung tâm dữ liệu tại chỗ sẽ khác so với các cơ sở dữ liệu được lưu trữ trên đám mây.
- Vị trí Dự phòng: Các bản sao lưu sẽ đi đâu? Nói chung, các bản sao lưu sẽ được đặt ở một vị trí từ xa, chẳng hạn như trên băng hoặc bộ lưu trữ đám mây cụ thể như AWS S3.
- Công cụ Sao lưu: Xác định một công cụ tối ưu để thực hiện sao lưu cơ sở dữ liệu trực tuyến có khả năng đảm bảo sao lưu nhất quán đã được thực hiện.
Một chiến lược sao lưu cơ sở dữ liệu tốt phải đảm bảo đáp ứng RTO (Mục tiêu thời gian khôi phục) và RPO (Mục tiêu điểm khôi phục), từ đó giúp đạt được mục tiêu Khôi phục sau thảm họa. Sao lưu cấp hệ thống tệp có thể được thực hiện trên Cơ sở dữ liệu PostgreSQL theo một số cách. Trong blog này, tôi sẽ tập trung vào một công cụ có tên là Barman được sử dụng phổ biến để thực hiện Sao lưu cơ sở dữ liệu PostgreSQL.
Barman (trình quản lý sao lưu và phục hồi) là một công cụ mã nguồn mở dựa trên Python được phát triển bởi các nhà phát triển tại 2nd Quadrant. Công cụ này được phát triển để đạt được chiến lược sao lưu cơ sở dữ liệu cấp doanh nghiệp cho các cơ sở dữ liệu sản xuất PostgreSQL quan trọng. Các tính năng và đặc điểm của nó giống với RMAN của Oracle. Theo ý kiến của tôi, barman là một trong những lựa chọn tốt nhất cho cơ sở dữ liệu PostgreSQL và có thể mang lại một số lợi ích từ quan điểm hoạt động cho các DBA và kỹ sư Cơ sở hạ tầng.
Hãy cùng chúng tôi xem xét một số khả năng của Barman:
Tôi sẽ bắt đầu với tổng quan về cấu hình và sau đó liệt kê ra những loại sao lưu nào có thể được thực hiện
Về mặt kỹ thuật, barman-cli là công cụ dựa trên python và có hai tệp cấu hình khác nhau để xử lý. Một tệp là cấu hình thực tế cho cơ sở dữ liệu được sao lưu nằm trong “/etc/barman.d” có tên là
Nội dung mẫu của tệp /etc/barman.conf được hiển thị bên dưới
[barman]
barman_user = barman ---------> barman user who performs backup/recovery of database
configuration_files_directory = /etc/barman.d -----> location for DB configuration files
barman_home = /dbbackups/barman ---> barman home directory
log_file = /dbbackups/barman/logs/barman.log ---> barman log file location
log_level = INFO -----> level of logging for barman operations
compression = gzip -----> backups must be compressed
Cài đặt Barman
Hãy cùng chúng tôi xem qua quy trình cài đặt của barman -
Cài đặt từ nguồn
Tải xuống barman từ https://www.pgbarman.org/
Untar / giải nén trình cài đặt và thực hiện lệnh sau với tư cách người dùng root -
[[email protected] barman-2.4]# ./setup.py install
/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'setup_requires'
warnings.warn(msg)
/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'install_requires'
warnings.warn(msg)
/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'tests_require'
warnings.warn(msg)
running install
running build
running build_py
creating build
creating build/lib
creating build/lib/barman
copying barman/utils.py -> build/lib/barman
copying barman/fs.py -> build/lib/barman
copying barman/retention_policies.py -> build/lib/barman
copying barman/diagnose.py -> build/lib/barman
copying barman/backup.py -> build/lib/barman
copying barman/recovery_executor.py -> build/lib/barman
copying barman/backup_executor.py -> build/lib/barman
copying barman/config.py -> build/lib/barman
copying barman/process.py -> build/lib/barman
copying barman/output.py -> build/lib/barman
copying barman/__init__.py -> build/lib/barman
copying barman/remote_status.py -> build/lib/barman
copying barman/xlog.py -> build/lib/barman
copying barman/lockfile.py -> build/lib/barman
copying barman/postgres.py -> build/lib/barman
copying barman/server.py -> build/lib/barman
copying barman/cli.py -> build/lib/barman
copying barman/version.py -> build/lib/barman
copying barman/compression.py -> build/lib/barman
copying barman/wal_archiver.py -> build/lib/barman
copying barman/infofile.py -> build/lib/barman
copying barman/exceptions.py -> build/lib/barman
copying barman/hooks.py -> build/lib/barman
copying barman/copy_controller.py -> build/lib/barman
copying barman/command_wrappers.py -> build/lib/barman
running build_scripts
creating build/scripts-2.7
copying and adjusting bin/barman -> build/scripts-2.7
changing mode of build/scripts-2.7/barman from 644 to 755
running install_lib
creating /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/utils.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/fs.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/retention_policies.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/diagnose.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/backup.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/recovery_executor.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/backup_executor.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/config.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/process.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/output.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/__init__.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/remote_status.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/xlog.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/lockfile.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/postgres.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/server.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/cli.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/version.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/compression.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/wal_archiver.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/infofile.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/exceptions.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/hooks.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/copy_controller.py -> /usr/lib/python2.7/site-packages/barman
copying build/lib/barman/command_wrappers.py -> /usr/lib/python2.7/site-packages/barman
byte-compiling /usr/lib/python2.7/site-packages/barman/utils.py to utils.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/fs.py to fs.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/retention_policies.py to retention_policies.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/diagnose.py to diagnose.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/backup.py to backup.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/recovery_executor.py to recovery_executor.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/backup_executor.py to backup_executor.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/config.py to config.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/process.py to process.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/output.py to output.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/__init__.py to __init__.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/remote_status.py to remote_status.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/xlog.py to xlog.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/lockfile.py to lockfile.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/postgres.py to postgres.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/server.py to server.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/cli.py to cli.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/version.py to version.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/compression.py to compression.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/wal_archiver.py to wal_archiver.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/infofile.py to infofile.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/exceptions.py to exceptions.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/hooks.py to hooks.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/copy_controller.py to copy_controller.pyc
byte-compiling /usr/lib/python2.7/site-packages/barman/command_wrappers.py to command_wrappers.pyc
running install_scripts
copying build/scripts-2.7/barman -> /usr/bin
changing mode of /usr/bin/barman to 755
running install_data
copying doc/barman.1 -> /usr/share/man/man1
copying doc/barman.5 -> /usr/share/man/man5
running install_egg_info
Writing /usr/lib/python2.7/site-packages/barman-2.4-py2.7.egg-info
Cài đặt từ repo
Cài đặt cũng có thể được thực hiện qua yum như sau
[[email protected]~]$ yum install barman
Hãy để chúng tôi xem xét các loại hỗ trợ barman sao lưu khác nhau
Sao lưu nóng vật lý
Barman hỗ trợ Sao lưu nóng vật lý có nghĩa là sao lưu trực tuyến các tệp dữ liệu vật lý và tệp nhật ký giao dịch của cơ sở dữ liệu bằng cách sử dụng phương pháp rsync có thể ở dạng nén.
Hãy để chúng tôi xem xét các bước và lệnh để thực hiện sao lưu RSYNC bằng barman
# 1 Tệp cấu hình cơ sở dữ liệu PostgreSQL cho barman
[pgdb]
description="Main PostgreSQL server"
conninfo=host=pgserver user=postgres dbname=postgres
ssh_command=ssh [email protected]
archiver=on
backup_method = rsync
“Pgdb” là định danh của Cơ sở dữ liệu Postgres cho barman và tên tệp cấu hình phải là
Tham số backup_method xác định kiểu sao lưu sẽ được thực hiện. Trong trường hợp này backup_method là rsync.
Lưu ý:Để lệnh sao lưu barman thành công, xác thực ssh không cần mật khẩu phải được định cấu hình giữa máy chủ barman và postgres.
# 2 tham số tệp postgresql.conf
wal_level=replica
archive_mode=on
archive_command=’rsync to <ARCHIVE LOCATION>’
Lệnh sao lưu của Barman
# 3 Kiểm tra xem barman đã sẵn sàng thực hiện sao lưu chưa
[[email protected] pgdb]$ barman check pgdb
Server pgdb:
PostgreSQL: OK
is_superuser: OK
wal_level: OK
directories: OK
retention policy settings: OK
backup maximum age: OK (no last_backup_maximum_age provided)
compression settings: OK
failed backups: OK (there are 0 failed backups)
minimum redundancy requirements: OK (have 4 backups, expected at least 0)
ssh: OK (PostgreSQL server)
not in recovery: OK
archive_mode: OK
archive_command: OK
continuous archiving: OK
archiver errors: OK
Kết quả ở trên cho biết tất cả là “OK” để tiến hành sao lưu, có nghĩa là bạn nên sao lưu.
Ví dụ:đầu ra bên dưới cho biết không thể thực hiện sao lưu vì theo luật sư SSH không hoạt động -
[[email protected] ~]$ barman check pgdb
Server pgdb:
PostgreSQL: OK
is_superuser: OK
wal_level: OK
directories: OK
retention policy settings: OK
backup maximum age: OK (no last_backup_maximum_age provided)
compression settings: OK
failed backups: OK (there are 0 failed backups)
minimum redundancy requirements: OK (have 0 backups, expected at least 0)
ssh: FAILED (Connection failed using '[email protected] -o BatchMode=yes -o StrictHostKeyChecking=no' return code 127)
not in recovery: OK
archive_mode: OK
archive_command: OK
continuous archiving: OK
archiver errors: OK
# 4 Thực hiện sao lưu cơ sở dữ liệu
[[email protected] ~]$ barman backup pgdb
Starting backup using rsync-exclusive method for server pgdb in /dbbackup/barman_backups/pgdb/base/20180816T153846
Backup start at LSN: 0/1C000028 (00000001000000000000001C, 00000028)
This is the first backup for server pgdb
WAL segments preceding the current backup have been found:
00000001000000000000000B from server pgdb has been removed
00000001000000000000000C from server pgdb has been removed
00000001000000000000000D from server pgdb has been removed
00000001000000000000000E from server pgdb has been removed
00000001000000000000000F from server pgdb has been removed
000000010000000000000010 from server pgdb has been removed
000000010000000000000011 from server pgdb has been removed
000000010000000000000012 from server pgdb has been removed
000000010000000000000013 from server pgdb has been removed
000000010000000000000014 from server pgdb has been removed
000000010000000000000015 from server pgdb has been removed
000000010000000000000016 from server pgdb has been removed
Starting backup copy via rsync/SSH for 20180816T153846
Copy done (time: 1 second)
This is the first backup for server pgdb
Asking PostgreSQL server to finalize the backup.
Backup size: 21.8 MiB
Backup end at LSN: 0/1C0000F8 (00000001000000000000001C, 000000F8)
Backup completed (start time: 2018-08-16 15:38:46.668492, elapsed time: 1 second)
Processing xlog segments from file archival for pgdb
000000010000000000000016
000000010000000000000017
000000010000000000000018
000000010000000000000019
00000001000000000000001A
00000001000000000000001B
00000001000000000000001C
00000001000000000000001C.00000028.backup
Để hiểu liệu lệnh sao lưu barman có thành công hay không, lệnh dưới đây sẽ giúp bạn -
Sao lưu gia tăng
Một khả năng tuyệt vời khác của Barman là khả năng sao lưu gia tăng. Điều này có nghĩa là, chỉ các khối đã thay đổi kể từ lần sao lưu cơ sở dữ liệu đầy đủ cuối cùng mới có thể được sao lưu. Đối với cơ sở dữ liệu ít thay đổi dữ liệu, việc sao lưu chúng từng bước có thể làm giảm việc sử dụng tài nguyên.
Nó phụ thuộc nhiều vào rsync và các liên kết cứng. Dưới đây là những lợi ích của việc sao lưu gia tăng -
- Giảm đáng kể thời gian sao lưu hàng ngày
- Khối lượng dữ liệu được sao lưu giảm vì chỉ các khối dữ liệu đã thay đổi sẽ được sao lưu, do đó làm giảm việc sử dụng tài nguyên cơ sở hạ tầng như băng thông mạng, dung lượng ổ đĩa, I / O, v.v.
- Nếu bạn sau khi đạt được RTO rất tốt, thì đây là tính năng bạn đang tìm kiếm
Các lệnh để sao lưu gia tăng khá giống nhau. Mọi bản sao lưu tiếp theo sau bản sao lưu đầu tiên được thực hiện với tùy chọn backup_method =rsync sẽ là các bản sao lưu gia tăng và barman kéo WAL bằng tiện ích pg_recievexlog.
Sao lưu và phục hồi cơ sở dữ liệu từ xa
Theo tôi, khả năng này của Barman rất có lợi cho các DBA. Điều đầu tiên các DBA sẽ tìm kiếm là tránh gây căng thẳng cho tài nguyên máy chủ cơ sở dữ liệu sản xuất càng nhiều càng tốt trong quá trình sao lưu và thực hiện chúng từ xa sẽ là lựa chọn tốt nhất. Barman tận dụng pg_basebackup, điều này giúp việc viết tập lệnh và tự động hóa nó dễ dàng hơn rất nhiều.
Nói chung, các tùy chọn truyền thống có sẵn để sao lưu tự động sẽ -
- pg_basebackup
- bản sao tar
Hai tùy chọn trên liên quan đến nhiều phát triển và thử nghiệm để đảm bảo có chiến lược sao lưu hiệu quả nhằm đáp ứng nhu cầu của SLA và có thể đặt ra thách thức đối với cơ sở dữ liệu lớn với nhiều không gian bảng.
Với Barman, nó khá đơn giản. Một khả năng đặc biệt khác của barman là phát trực tuyến WAL liên tục. Hãy để chúng tôi xem xét điều đó một cách chi tiết hơn.
Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thứcSao lưu trực tuyến với phát trực tuyến WAL liên tục
Điều này làm cho barman nổi bật so với các công cụ khác trên thị trường. Các tệp WAL trực tiếp có thể được truyền liên tục đến vị trí sao lưu từ xa bằng Barman. Đây là ĐẶC ĐIỂM mà các DBA sẽ rất vui khi biết. Tôi rất vui khi biết về điều này. Rất khó hoặc gần như không thể đạt được điều này với các tập lệnh được xây dựng thủ công hoặc với sự kết hợp của các công cụ như pg_basebackup và pg_receivewal. Với phát trực tuyến WAL liên tục, có thể đạt được RPO tốt hơn. Nếu chiến lược dự phòng được thiết kế tỉ mỉ, sẽ không quá lời khi nói rằng có thể đạt được RPO gần như bằng 0.
Hãy để chúng tôi xem xét các bước, lệnh để thực hiện sao lưu trực tuyến barman
# 1 thay đổi thông số postgresql.conf
Các cấu hình sau sẽ được thực hiện trong postgresql.conf
wal_level=replica
max_wal_senders = 2
max_replication_slots = 2
synchronous_standby_names = 'barman_receive_wal'
archive_mode=on
archive_command = 'rsync -a %p [email protected]:INCOMING_WAL_DIRECTORY/%f'
archive_timeout=3600 (should not be 0 or disabled)
# 2 Tạo vị trí sao chép bằng barman
Khe sao chép rất quan trọng để phát trực tuyến các bản sao lưu. Trong trường hợp phát trực tuyến liên tục của WAL không thành công vì bất kỳ lý do gì, tất cả các WAL không được phát trực tiếp có thể được giữ lại trên cơ sở dữ liệu postgres mà không bị xóa.
[[email protected] ~]$ barman receive-wal --create-slot pgdb
Creating physical replication slot 'barman' on server 'pgdb'
Replication slot 'barman' created
# 3 Định cấu hình tệp cấu hình máy chủ cơ sở dữ liệu cho barman
Định danh cơ sở dữ liệu cho barman là “pgdb”. Tệp cấu hình có tên pgdb.conf phải được tạo ở vị trí /etc/barman.d/ với nội dung sau
[pgdb]
description="Main PostgreSQL server"
conninfo=host=pgserver user=postgres dbname=postgres
streaming_conninfo=host=pgserver user=barman
backup_method=postgres
archiver=on
incoming_wals_directory=/dbbackups/barman_backups/pgdb/incoming
streaming_archiver=on
slot_name=barman
streaming_conninfo là tham số để định cấu hình cho barman thực hiện sao lưu trực tuyến
backup_method phải được định cấu hình thành “postgres” khi sao lưu phát trực tuyến được thực hiện
streaming_archiver phải được định cấu hình thành “on”
slot_name =barman Tham số này phải được cấu hình khi bạn cần barman để sử dụng các khe sao chép. Trong trường hợp này, tên vùng sao chép là barman
Sau khi cấu hình xong, hãy kiểm tra nhân viên để đảm bảo sao lưu trực tuyến sẽ chạy thành công.
# 4 Kiểm tra xem chương trình nhận-wal của barman có chạy ổn không
Nói chung đối với barman đầu tiên, nhận-wal không hoạt động ngay sau khi thay đổi cấu hình, có thể xảy ra lỗi và lệnh barman check có thể hiển thị như sau -
[[email protected] archive_status]$ barman check pgdb
Server pgdb:
PostgreSQL: OK
is_superuser: OK
PostgreSQL streaming: OK
wal_level: OK
directories: OK
retention policy settings: OK
backup maximum age: OK (no last_backup_maximum_age provided)
compression settings: OK
failed backups: OK (there are 0 failed backups)
minimum redundancy requirements: OK (have 0 backups, expected at least 0)
pg_basebackup: OK
pg_basebackup compatible: OK
pg_basebackup supports tablespaces mapping: OK
archive_mode: OK
archive_command: OK
continuous archiving: OK
pg_receivexlog: OK
pg_receivexlog compatible: OK
receive-wal running: FAILED (See the Barman log file for more details)
archiver errors: OK
Khi bạn chạy barman nhận-wal, nó có thể bị treo. Để làm cho nhận-ví hoạt động bình thường trong lần đầu tiên, lệnh dưới đây phải được thực thi.
[[email protected] arch_logs]$ barman cron
Starting WAL archiving for server pgdb
Starting streaming archiver for server pgdb
Bây giờ, hãy kiểm tra lại người thợ sửa xe, nó sẽ tốt ngay bây giờ.
[[email protected] arch_logs]$ barman check pgdb
Server pgdb:
PostgreSQL: OK
is_superuser: OK
PostgreSQL streaming: OK
wal_level: OK
replication slot: OK
directories: OK
retention policy settings: OK
backup maximum age: OK (no last_backup_maximum_age provided)
compression settings: OK
failed backups: OK (there are 0 failed backups)
minimum redundancy requirements: OK (have 2 backups, expected at least 0)
pg_basebackup: OK
pg_basebackup compatible: OK
pg_basebackup supports tablespaces mapping: OK
archive_mode: OK
archive_command: OK
continuous archiving: OK
pg_receivexlog: OK
pg_receivexlog compatible: OK
receive-wal running: OK
archiver errors: OK
Nếu bạn có thể thấy, trạng thái nhậnxlog hiển thị ok. Đây là một trong những vấn đề tôi phải đối mặt.
# 5 Kiểm tra xem nhân viên phục vụ đã sẵn sàng thực hiện sao lưu chưa
[[email protected] ~]$ barman check pgdb
Server pgdb:
PostgreSQL: OK
is_superuser: OK
PostgreSQL streaming: OK
wal_level: OK
replication slot: OK
directories: OK
retention policy settings: OK
backup maximum age: OK (no last_backup_maximum_age provided)
compression settings: OK
failed backups: OK (there are 0 failed backups)
minimum redundancy requirements: OK (have 4 backups, expected at least 0)
pg_basebackup: OK
pg_basebackup compatible: OK
pg_basebackup supports tablespaces mapping: OK
archive_mode: OK
archive_command: OK
continuous archiving: OK
pg_receivexlog: OK
pg_receivexlog compatible: OK
receive-wal running: OK
archiver errors: OK
# 6 Kiểm tra trạng thái phát trực tuyến bằng barman
[[email protected] pgdb]$ barman replication-status pgdb
Status of streaming clients for server 'pgdb':
Current LSN on master: 0/250008A8
Number of streaming clients: 1
1. #1 Sync WAL streamer
Application name: barman_receive_wal
Sync stage : 3/3 Remote write
Communication : TCP/IP
IP Address : 192.168.1.10 / Port: 52602 / Host: -
User name : barman
Current state : streaming (sync)
Replication slot: barman
WAL sender PID : 26592
Started at : 2018-08-16 16:03:21.422430+10:00
Sent LSN : 0/250008A8 (diff: 0 B)
Write LSN : 0/250008A8 (diff: 0 B)
Flush LSN : 0/250008A8 (diff: 0 B)
Trạng thái trên có nghĩa là, barman đã sẵn sàng để thực hiện sao lưu luồng. Thực hiện sao lưu như hình bên dưới -
[[email protected] arch_logs]$ barman backup pgdb
Starting backup using postgres method for server pgdb in /dbbackup/barman_backups/pgdb/base/20180816T160710
Backup start at LSN: 0/1F000528 (00000001000000000000001F, 00000528)
Starting backup copy via pg_basebackup for 20180816T160710
Copy done (time: 1 second)
Finalising the backup.
Backup size: 21.9 MiB
Backup end at LSN: 0/21000000 (000000010000000000000020, 00000000)
Backup completed (start time: 2018-08-16 16:07:10.401526, elapsed time: 1 second)
Processing xlog segments from file archival for pgdb
00000001000000000000001F
000000010000000000000020
000000010000000000000020.00000028.backup
000000010000000000000021
Processing xlog segments from streaming for pgdb
00000001000000000000001F
000000010000000000000020
Bản sao lưu tập trung và được lập danh mục
Rất có lợi cho các môi trường chạy nhiều cơ sở dữ liệu trên nhiều máy chủ trong môi trường nối mạng. Đây là một trong những tính năng đặc biệt của Barman. Tôi đã làm việc trong môi trường thời gian thực, nơi tôi phải quản lý, quản trị hàng trăm cơ sở dữ liệu và tôi luôn cảm thấy cần sao lưu cơ sở dữ liệu tập trung và đó là lý do tại sao Oracle RMAN trở nên phổ biến cho chiến lược sao lưu cơ sở dữ liệu Oracle và bây giờ Barman đang lấp đầy điều đó. không gian cho PostgreSQL. Với Barman, DBA, s và DevOps, các kỹ sư có thể hướng tới việc xây dựng một máy chủ sao lưu tập trung trong đó các bản sao lưu Cơ sở dữ liệu trong đó cho tất cả các cơ sở dữ liệu được duy trì, xác thực.
Ý nghĩa sao lưu theo danh mục, barman duy trì một kho lưu trữ tập trung, nơi các trạng thái trong đó của tất cả các bản sao lưu được duy trì. Bạn có thể kiểm tra các bản sao lưu có sẵn cho cơ sở dữ liệu cụ thể như được hiển thị bên dưới -
[[email protected] ~]$ barman list-backup pgdb
pgdb 20180816T160924 - Thu Aug 16 16:09:25 2018 - Size: 22.0 MiB - WAL Size: 135.7 KiB
pgdb 20180816T160710 - Thu Aug 16 16:07:11 2018 - Size: 21.9 MiB - WAL Size: 105.8 KiB
pgdb 20180816T153913 - Thu Aug 16 15:39:15 2018 - Size: 21.9 MiB - WAL Size: 54.2 KiB
pgdb 20180816T153846 - Thu Aug 16 15:38:48 2018 - Size: 21.9 MiB - WAL Size: 53.0 KiB
Chính sách lưu giữ dự phòng
Chính sách lưu giữ có thể được xác định để sao lưu cơ sở dữ liệu. Các bản sao lưu có thể bị lỗi thời sau một khoảng thời gian nhất định và các bản sao lưu lỗi thời có thể bị xóa theo thời gian.
Có các tùy chọn trong tệp cấu hình để đảm bảo các bản sao lưu được giữ lại và làm cho lỗi thời khi thời gian lưu giữ vượt quá -
Thông số đầu tiên để định cấu hình là Minimum_redundancy . Luôn định cấu hình Minimum_redundancy thành> 0 để đảm bảo các bản sao lưu không vô tình bị xóa.
Ví dụ:Minimum_redundancy =1
- keep_policy tham số sẽ xác định thời gian lưu trữ các bản sao lưu cơ sở để đảm bảo đáp ứng các SLA phục hồi sau thảm họa.
- wal_retention_policy tham số sẽ xác định thời gian sao lưu wal phải được giữ lại. Điều này đảm bảo RPO dự kiến được đáp ứng.
Có thể kiểm tra các chính sách lưu giữ và dự phòng hiện tại cho máy chủ cơ sở dữ liệu bằng cách sử dụng lệnh barman check như sau
[[email protected] ~]$ barman check pgdb
Server pgdb:
PostgreSQL: OK
is_superuser: OK
PostgreSQL streaming: OK
wal_level: OK
replication slot: OK
directories: OK
retention policy settings: OK
backup maximum age: OK (no last_backup_maximum_age provided)
compression settings: OK
failed backups: OK (there are 0 failed backups)
minimum redundancy requirements: OK (have 4 backups, expected at least 0)
pg_basebackup: OK
pg_basebackup compatible: OK
pg_basebackup supports tablespaces mapping: OK
archive_mode: OK
archive_command: OK
continuous archiving: OK
pg_receivexlog: OK
pg_receivexlog compatible: OK
receive-wal running: OK
archiver errors: OK
Sao lưu và khôi phục song song có thể được thực hiện bằng cách sử dụng nhiều CPU, điều này thực sự giúp cho quá trình sao lưu và khôi phục hoàn tất nhanh hơn. Tính năng này có lợi cho các cơ sở dữ liệu rất lớn có kích thước lên đến hàng TeraByte.
Để thực hiện song song các bản sao lưu, hãy thêm tùy chọn sau vào tệp cấu hình máy chủ cơ sở dữ liệu (là tệp /etc/barman.d/pgdb.conf) -
parallel_jobs = 1
Tôi có thể kết luận bằng cách nói rằng barman là một công cụ cấp doanh nghiệp có khả năng giúp các DBA thiết kế một chiến lược khắc phục thảm họa hiệu quả.
Các tài nguyên liên quan ClusterControl cho PostgreSQLTìm hiểu thêm Sử dụng pg_dump và pg_dumpall để sao lưu PostgreSQLĐọc blog Các công cụ sao lưu hàng đầu cho PostgreSQLĐọc blog Trở thành DBA PostgreSQL - Bản sao lưu PostgreSQL logic &Vật lýĐọc blog