PostgreSQL hay Postgres là một hệ thống quản lý cơ sở dữ liệu quan hệ đối tượng (ORDBMS) mã nguồn mở với hơn 15 năm phát triển tích cực. Đây là một máy chủ cơ sở dữ liệu mạnh mẽ và có thể xử lý khối lượng công việc cao. PostgreSQL có thể được sử dụng trên các máy chủ Linux, Unix, BSD và Windows.
Sao chép cơ sở dữ liệu chủ/tớ là một quá trình sao chép (đồng bộ hóa) dữ liệu từ một cơ sở dữ liệu trên một máy chủ (chủ) sang một cơ sở dữ liệu trên một máy chủ khác (các máy chủ tớ). Lợi ích chính của quá trình này là phân phối cơ sở dữ liệu cho nhiều máy, do đó khi máy chủ chủ gặp sự cố, sẽ có một máy sao lưu với cùng dữ liệu có sẵn để xử lý các yêu cầu mà không bị gián đoạn.
PostgreSQL cung cấp một số cách để sao chép cơ sở dữ liệu. Nó có thể được sử dụng cho mục đích sao lưu và cung cấp máy chủ cơ sở dữ liệu có tính khả dụng cao. Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt và cấu hình sao chép PostgreSQL bằng cách sử dụng chế độ chờ nóng. Chế độ chờ nóng dễ cấu hình và là điểm khởi đầu rất tốt để tìm hiểu sâu về PostgreSQL.
Chế độ chờ nóng yêu cầu 2 máy chủ cơ sở dữ liệu, chúng tôi sẽ sử dụng Ubuntu làm hệ điều hành trên cả hai máy chủ.
Điều kiện tiên quyết
Bây giờ hãy thiết lập tên máy chủ cho cả hai máy chủ - máy chủ chính và máy chủ phụ - bằng lệnh hostnamectl.
Trên máy chủ chính:
Trên máy chủ phụ:
Tiếp theo, chỉnh sửa tệp /etc/hosts bằng trình soạn thảo vim:
Dán cấu hình này cho máy chủ chính:
Dán cấu hình này cho máy chủ phụ:
Lưu tệp và thoát khỏi trình chỉnh sửa.
Tiếp theo, cài đặt PostgreSQL với tất cả các thành phần phụ thuộc của nó:
Sau khi Postgres được cài đặt, hãy cung cấp mật khẩu mới cho người dùng postgres (được tạo tự động khi cài đặt).
Nhập mật khẩu người dùng postgres của bạn.
Bây giờ hãy thử nghiệm PostgreSQL:
Bạn sẽ thấy kết quả bên dưới:
Từ quyền root, chuyển sang người dùng PostgreSQL bằng lệnh su:
Truy cập shell Postgres bằng lệnh psql và nhập truy vấn PostgreSQL này để tạo người dùng/vai trò mới:
Kiểm tra người dùng bản sao mới bằng lệnh PostgreSQL bên dưới:
Người dùng bản sao mới đã được tạo.
Tiếp theo, hãy đến thư mục PostgreSQL '/etc/postgresql/9.4/main' để chỉnh sửa tệp cấu hình.
Mở tệp postgresql.conf bằng vim:
Bỏ chú thích dòng 59 và thêm địa chỉ IP của máy chủ.
Trong thiết lập WAL (Write Ahead Log) dòng 175, bỏ chú thích và đổi giá trị thành hot_standby.
Trong phần điểm kiểm tra dòng 199, bỏ chú thích 'checkpoint_segments' và đổi giá trị thành 8.
Trong phần lưu trữ dòng 206 và 208, bật tùy chọn lưu trữ và thêm lệnh lưu trữ.
Trong phần sao chép dòng 224 và 226, hãy thay đổi giá trị thành số lượng tối đa của quy trình gửi WAL.
Lưu tệp và thoát khỏi vim.
Bây giờ hãy tạo một thư mục mới bên trong thư mục 'main' để cấu hình lưu trữ - chạy lệnh bên dưới với tư cách là người dùng postgres:
Tiếp theo, hãy chỉnh sửa tệp pg_hba.conf để cho phép kết nối sao chép.
Cuối dòng, hãy thêm cấu hình mới cho người dùng 'replica' để tạo kết nối.
Lưu và thoát.
Chỉnh sửa postgresql.conf bằng vim:
Bỏ chú thích dòng 59 và thêm địa chỉ IP của máy chủ phụ.
Đi đến dòng 175 và bỏ chú thích cài đặt wal_level, thay đổi giá trị thành hot_standby.
Bỏ chú thích dòng 199 trên phần điểm kiểm tra.
Bỏ chú thích dòng 224 và 226 để cấu hình Tiến trình max_wal_sender.
Bỏ chú thích dòng 245 để bật chế độ hot_standby trên máy chủ phụ.
Lưu và thoát.
Chỉ chạy tất cả các lệnh bên dưới trên máy chủ phụ!
Dừng PostgreSQL trên máy chủ phụ:
Bây giờ hãy đăng nhập vào người dùng postgres và đổi tên thư mục 'main' thành 'main_original' làm bản sao lưu.
Chạy lệnh bên dưới để sao chép dữ liệu từ máy chủ chính sang máy chủ phụ:
Lưu ý:
Dán cấu hình bên dưới:
Bây giờ quay lại người dùng root với lệnh exit và khởi động PostgreSQL bằng lệnh systemctl:
Đảm bảo không có lỗi nào sau khi chạy lệnh start.
Bạn sẽ thấy thông tin sao chép bên dưới:
Tiếp theo, hãy kiểm tra để tạo cơ sở dữ liệu mới từ máy chủ chính rồi kiểm tra xem cơ sở dữ liệu đó có tồn tại trên máy chủ phụ hay không.
Bây giờ hãy đăng nhập vào máy chủ phụ và kiểm tra xem cơ sở dữ liệu 'howtoforge' đã được tự động phản chiếu sang máy chủ phụ hay chưa.
Cơ sở dữ liệu đã được sao chép từ máy chủ chính sang máy chủ phụ máy chủ.
Sao chép cơ sở dữ liệu chủ/tớ là một quá trình sao chép (đồng bộ hóa) dữ liệu từ một cơ sở dữ liệu trên một máy chủ (chủ) sang một cơ sở dữ liệu trên một máy chủ khác (các máy chủ tớ). Lợi ích chính của quá trình này là phân phối cơ sở dữ liệu cho nhiều máy, do đó khi máy chủ chủ gặp sự cố, sẽ có một máy sao lưu với cùng dữ liệu có sẵn để xử lý các yêu cầu mà không bị gián đoạn.
PostgreSQL cung cấp một số cách để sao chép cơ sở dữ liệu. Nó có thể được sử dụng cho mục đích sao lưu và cung cấp máy chủ cơ sở dữ liệu có tính khả dụng cao. Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách cài đặt và cấu hình sao chép PostgreSQL bằng cách sử dụng chế độ chờ nóng. Chế độ chờ nóng dễ cấu hình và là điểm khởi đầu rất tốt để tìm hiểu sâu về PostgreSQL.
Chế độ chờ nóng yêu cầu 2 máy chủ cơ sở dữ liệu, chúng tôi sẽ sử dụng Ubuntu làm hệ điều hành trên cả hai máy chủ.
- Máy chủ chính - chấp nhận kết nối từ máy khách với quyền đọc và ghi.
- Máy chủ phụ - máy chủ dự phòng chạy bản sao dữ liệu từ máy chủ chính với quyền chỉ đọc.
Điều kiện tiên quyết
- 2 máy chủ Ubuntu - 1 cho máy chủ chính và 1 cho máy chủ phụ.
- Quyền root trên máy chủ.
- Một số kiến thức cơ bản về Ubuntu, apt, v.v.
Bước 1 - Thiết lập Tên máy chủ
Đăng nhập vào cả hai máy chủ bằng ssh:
Mã:
ssh user@masterip
ssh user@slaveip
Trên máy chủ chính:
Mã:
sudohostnamectl set-hostname master-server
Mã:
sudohostnamectl set-hostname slave-server
Mã:
sudo vim /etc/hosts
Mã:
192.168.1.249 master-server
Mã:
192.168.1.248 slave-server
Bước 2 - Cài đặt PostgreSQL trên Máy chủ chính và Máy chủ phụ
Trước khi bắt đầu cài đặt PostgreSQL, hãy cập nhật kho lưu trữ Ubuntu:
Mã:
sudo apt-get update
Mã:
sudo apt-get install postgresql postgresql-client postgresql-contrib
Mã:
passwd postgres
Bây giờ hãy thử nghiệm PostgreSQL:
Mã:
su - postgres
psql
\conninfo
Bước 3 - Cấu hình máy chủ chính
Trong bước này, chúng ta sẽ cấu hình 'máy chủ chính' với địa chỉ IP '192.168.1.249'. Chúng ta sẽ tạo một người dùng/vai trò mới với quyền đặc biệt để thực hiện sao chép, sau đó chúng ta chỉnh sửa tệp cấu hình PostgreSQL để bật chế độ sao chép dự phòng nóng.Từ quyền root, chuyển sang người dùng PostgreSQL bằng lệnh su:
Mã:
su - postgres
Mã:
psql
CREATE USER replica REPLICATION LOGIN ENCRYPTED PASSWORD 'replicauser@';
Mã:
\du
Tiếp theo, hãy đến thư mục PostgreSQL '/etc/postgresql/9.4/main' để chỉnh sửa tệp cấu hình.
Mã:
cd /etc/postgresql/9.4/main/
Mã:
vim postgresql.conf
Mã:
listen_addresses = 'localhost,192.168.1.249'
Mã:
wal_level = hot_standby
Mã:
checkpoint_segments = 8
Mã:
archive_mode = on
archive_command = 'cp -i %p /var/lib/postgresql/9.4/main/archive/%f'
Mã:
max_wal_senders = 3
wal_keep_segments = 8
Bây giờ hãy tạo một thư mục mới bên trong thư mục 'main' để cấu hình lưu trữ - chạy lệnh bên dưới với tư cách là người dùng postgres:
Mã:
mkdir -p /var/lib/9.4/main/archive/
Mã:
vim pg_hba.conf
Mã:
host replication replica 192.168.1.248/24 md5
#192.168.1.248 là địa chỉ IP của máy chủ phụ
Bước 4 - Cấu hình máy chủ phụ
Cấu hình máy chủ phụ giống như máy chủ chính. Sử dụng su để trở thành người dùng postgres và đi đến thư mục cấu hình PostgreSQL.
Mã:
su - postgres
cd /etc/postgresql/9.4/main/
Mã:
vim postgresql.conf
Mã:
listen_addresses = 'localhost,192.168.1.248'
Mã:
wal_level = hot_standby
Mã:
checkpoint_segments = 8
Mã:
max_wal_senders = 3
wal_keep_segments = 8
Mã:
hot_standby = on
Bước 5 - Đồng bộ hóa dữ liệu từ máy chủ chính sang máy chủ phụ
Trong bước này, chúng ta sẽ di chuyển thư mục dữ liệu PostgreSQL '/var/lib/postgresql/9.4/main' đến một thư mục sao lưu rồi thay thế bằng dữ liệu chính mới nhất bằng lệnh 'pg_basebackup'.Chỉ chạy tất cả các lệnh bên dưới trên máy chủ phụ!
Dừng PostgreSQL trên máy chủ phụ:
Mã:
systemctl stop postgresql
Mã:
su - postgres
mv 9.4/main 9.4/main_original
Mã:
pg_basebackup -h 192.168.1.249 -D /var/lib/postgresql/9.4/main -U replica -v -P
Lưu ý:
- 192.168.1.249 là địa chỉ IP của máy chủ chính.
- Và bạn sẽ được nhắc nhập mật khẩu cho người dùng 'replica' để sao chép.
Mã:
cd /var/lib/postgresql/9.4/main/
vim recovery.conf
Mã:
standby_mode = 'on'
primary_conninfo = 'host=192.168.1.249 port=5432 user=replica password=replicauser@'
restore_command = 'cp //var/lib/postgresql/9.4/main/archive/%f %p'
trigger_file = '/tmp/postgresql.trigger.5432'
Mã:
exit
systemctl start postgresql
Bước 6 - Kiểm tra
Truy cập máy chủ chính và đăng nhập vào người dùng postgres, sau đó chạy lệnh bên dưới để xem thông tin sao chép.
Mã:
su - postgres
psql -x -c "select * from pg_stat_replication;"
Tiếp theo, hãy kiểm tra để tạo cơ sở dữ liệu mới từ máy chủ chính rồi kiểm tra xem cơ sở dữ liệu đó có tồn tại trên máy chủ phụ hay không.
Mã:
su - postgres
psql
create database howtoforge;
Bây giờ hãy đăng nhập vào máy chủ phụ và kiểm tra xem cơ sở dữ liệu 'howtoforge' đã được tự động phản chiếu sang máy chủ phụ hay chưa.
Mã:
su - postgres
psql
\list
Cơ sở dữ liệu đã được sao chép từ máy chủ chính sang máy chủ phụ máy chủ.