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ẽ 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ừ cơ sở dữ liệu trên một máy chủ (chủ) sang cơ sở dữ liệu trên một máy chủ khác (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 có cùng dữ liệu để 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, chúng tôi sẽ chỉ cho bạn cách cài đặt và cấu hình sao chép Chủ-Tớ PostgreSQL 9.6 trên máy chủ CentOS 7. Chúng tôi sẽ sử dụng chế độ chờ Nóng và đây là điểm khởi đầu rất tốt để tìm hiểu sâu hơn về PostgreSQL.
Thêm kho lưu trữ PostgreSQL 9.6 mới vào hệ thống.
Bây giờ hãy cài đặt PostgreSQL 9.6 bằng lệnh yum sau.
Như vậy, bạn có thể cài đặt PostgreSQL 9.6.
Tiếp theo, hãy khởi động dịch vụ postgres và cho phép dịch vụ này tự động khởi động khi hệ thống khởi động.
Theo mặc định, postgres chạy trên cổng 5432. Vì vậy, hãy đảm bảo trạng thái cổng 5432 là 'LISTEN' bằng cách thực hiện lệnh netstat theo cách sau.
Nếu bạn không có lệnh netstat, hãy cài đặt net-tools. Nó là một phần của net-tools.
Vì vậy, PostgreSQL 9.6 đã được khởi động. Nhưng chúng ta vẫn cần cấu hình mật khẩu cho người dùng postgres. Đăng nhập với tư cách là người dùng 'postgres', sau đó truy cập shell 'psql' của postgres.
Cung cấp mật khẩu mới cho người dùng 'postgres' bằng truy vấn bên dưới.
Vậy là PostgreSQL 9.6 đã được khởi động và mật khẩu mới cho người dùng postgres đã được cấu hình.
Khởi động firewalld và cho phép nó tự động khởi động khi khởi động hệ thống bằng các lệnh sau:
Tiếp theo, thêm dịch vụ postgres mới vào firewalld bằng các lệnh sau.
Bây giờ hãy kiểm tra cổng mở của dịch vụ.
Và bạn sẽ thấy dịch vụ PostgreSQL đã được thêm vào firewalld.
LƯU Ý: Chạy Bước 1, Bước 2 và Bước 3 trên tất cả Máy chủ chính và Máy chủ phụ.
Đi đến thư mục dữ liệu pgsql '/var/lib/pgsql/9.6/data' và chỉnh sửa tệp cấu hình 'postgresql.conf'.
Bỏ chú thích dòng 'listen_addresses' và thay đổi giá trị của địa chỉ IP máy chủ thành '10.0.15.10'.
Bỏ chú thích dòng 'wal_level' và thay đổi giá trị thành 'hot_standby'.
Đối với Ở cấp độ đồng bộ hóa, chúng ta sẽ sử dụng đồng bộ cục bộ. Bỏ chú thích và thay đổi giá trị dòng như bên dưới.
Bật chế độ lưu trữ và cung cấp cho biến archive_command một lệnh làm giá trị.
Đối với cài đặt 'Sao chép', bỏ chú thích dòng 'wal_sender' và thay đổi giá trị thành 2 (trong hướng dẫn này, chúng tôi chỉ sử dụng 2 máy chủ chính và phụ), và đối với 'wal_keep_segments', giá trị là 10.
Đối với tên ứng dụng, bỏ chú thích dòng 'synchronous_standby_names' và thay đổi giá trị thành 'pgslave01'.
Chỉ vậy thôi. Lưu những thay đổi này và thoát khỏi trình soạn thảo.
Tiếp theo, trong tệp postgresql.conf, chế độ lưu trữ được bật, vì vậy chúng ta cần tạo một thư mục mới cho mục đích lưu trữ.
Tạo một thư mục mới, thay đổi quyền của thư mục đó và thay đổi chủ sở hữu thành người dùng postgres.
Bây giờ hãy chỉnh sửa tệp pg_hba.conf.
Dán cấu hình bên dưới vào cuối dòng.
Lưu và thoát. Toàn bộ cấu hình đã hoàn tất. Bây giờ, hãy khởi động lại PostgreSQL 9.6 bằng lệnh sau.
Tiếp theo, chúng ta cần tạo một người dùng mới có quyền sao chép. Chúng ta sẽ tạo một người dùng mới có tên là 'replica'.
Đăng nhập với tư cách là người dùng postgres và tạo một người dùng 'replica' mới với mật khẩu 'aqwe123@'.
Như vậy, cấu hình PostgreSQL 9.6 Master đã hoàn tất và người dùng để sao chép đã được tạo.
Trước khi bắt đầu cấu hình máy chủ phụ, hãy dừng dịch vụ postgres bằng lệnh systemctl bên dưới.
Sau đó, hãy đến thư mục postgres và sao lưu thư mục dữ liệu.
Tạo thư mục dữ liệu mới và thay đổi quyền sở hữu thư mục thành người dùng postgres.
Tiếp theo, hãy đăng nhập với tư cách là người dùng postgres và sao chép toàn bộ thư mục dữ liệu từ máy chủ 'Master' sang máy chủ 'Slave' với tư cách là người dùng bản sao.
Nhập mật khẩu của bạn và đợi dữ liệu được truyền từ máy chủ chính sang máy chủ phụ.
Sau khi quá trình truyền dữ liệu hoàn tất, hãy đến thư mục dữ liệu postgres và chỉnh sửa tệp postgresql.conf trên máy chủ phụ.
Thay đổi giá trị của 'listen_addresses' thành địa chỉ ip của máy chủ phụ '10.0.15.11'.
Bật 'hot_standby' trên máy chủ phụ bằng cách bỏ chú thích dòng sau và thay đổi giá trị thành 'on'.
Vậy là xong. Lưu các thay đổi và thoát khỏi trình soạn thảo.
Sau đó tạo tệp 'recovery.conf' mới bằng vim.
Dán cấu hình sau vào đó.
Lưu các thay đổi và thoát khỏi tệp.
Lưu ý: Trên primary_conninfo, hãy nhập thông tin chi tiết về máy chủ của riêng bạn.
Thay đổi quyền sở hữu tệp recovery.conf thành quyền của người dùng 'postgres'.
Và khởi động PostgreSQL 9.6 trên máy chủ phụ.
Cấu hình máy chủ phụ đã hoàn tất.
Bây giờ khi bạn kiểm tra máy chủ phụ, bạn sẽ thấy PostgreSQL 9.6 đang chạy trên máy chủ có địa chỉ IP là '10.0.15.11'.
Đăng nhập vào máy chủ Master và chuyển sang người dùng postgres.
Tiếp theo, hãy kiểm tra sao chép trạng thái phát trực tuyến của PostgreSQL bằng các lệnh sau.
Bạn sẽ thấy giá trị trạng thái là 'streaming' và sync_state là 'sync'.
Tiếp theo, hãy kiểm tra bằng cách chèn dữ liệu từ máy chủ master rồi kiểm tra tất cả dữ liệu trên máy chủ slave.
Đăng nhập với tư cách là người dùng postgres và truy cập shell PostgreSQL trên Máy chủ 'MASTER'.
Tạo bảng mới 'replica_test' và chèn một số dữ liệu vào đó bằng các truy vấn chèn sau.
Và bây giờ hãy đăng nhập vào máy chủ 'SLAVE' tương tự như cách bạn đã làm trên máy chủ chính.
Kiểm tra tất cả dữ liệu từ bảng 'replica_test' sử dụng truy vấn bên dưới.
Vì vậy, bạn sẽ thấy rằng tất cả dữ liệu được sao chép từ máy chủ 'MASTER' sang máy chủ 'SLAVE'.
Và kết quả sẽ là 'Không thể thực hiện INSERT'.
Vì vậy, quá trình cài đặt và cấu hình PostgreSQL 9.6 Master-Slave Replication trên CentOS 7 đã thành công.
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ừ cơ sở dữ liệu trên một máy chủ (chủ) sang cơ sở dữ liệu trên một máy chủ khác (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 có cùng dữ liệu để 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, chúng tôi sẽ chỉ cho bạn cách cài đặt và cấu hình sao chép Chủ-Tớ PostgreSQL 9.6 trên máy chủ CentOS 7. Chúng tôi sẽ sử dụng chế độ chờ Nóng và đây là điểm khởi đầu rất tốt để tìm hiểu sâu hơn về PostgreSQL.
Những gì chúng tôi sẽ làm
- Cài đặt PostgreSQL 9.6
- Khởi động và cấu hình PostgreSQL 9.6
- Cấu hình Firewalld
- Cấu hình máy chủ Master
- Cấu hình máy chủ Slave
- Kiểm tra
Điều kiện tiên quyết
- 1 máy chủ CentOS 7Master - Quyền đọc và ghi - IP: 10.0.15.10
- Slave - Chỉ Quyền đọc - IP: 10.0.15.11
Bước 1 - Cài đặt PostgreSQL 9.6
Trong hướng dẫn này, chúng ta sẽ thảo luận về cách cài đặt PostgreSQL phiên bản 9.6 mới nhất trên máy chủ CentOS 7. Theo mặc định, kho lưu trữ chính thức của CentOS cung cấp phiên bản cũ hơn, vì vậy chúng ta cần cài đặt PostgreSQL từ kho lưu trữ chính thức.Thêm kho lưu trữ PostgreSQL 9.6 mới vào hệ thống.
Mã:
yum -y install https://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
Mã:
yum -y install postgresql96-server postgresql96-contrib
Bước 2 - Khởi động và cấu hình PostgreSQL 9.6
Trước khi khởi động dịch vụ postgres, chúng ta cần khởi tạo cơ sở dữ liệu. Để thực hiện việc này, hãy vào thư mục '/usr/pgsql-9.6/bin' và khởi tạo cơ sở dữ liệu bằng lệnh postgres setup 'postgresql96-setup'.
Mã:
cd /usr/pgsql-9.6/bin
./postgresql96-setup initdb
Mã:
systemctl start postgresql-9.6
systemctl enable postgresql-9.6
Mã:
netstat -plntu
Nếu bạn không có lệnh netstat, hãy cài đặt net-tools. Nó là một phần của net-tools.
Mã:
yum -y install net-tools
Mã:
su - postgres
psql
Mã:
\password postgres
Nhập mật khẩu mới:
Vậy là PostgreSQL 9.6 đã được khởi động và mật khẩu mới cho người dùng postgres đã được cấu hình.
Bước 3 - Cấu hình Firewalld
Firewalld là công cụ quản lý tường lửa mặc định trên CentOS 7. Chúng tôi sẽ khởi động dịch vụ này và mở cổng để kết nối PostgreSQL.Khởi động firewalld và cho phép nó tự động khởi động khi khởi động hệ thống bằng các lệnh sau:
Mã:
systemctl start firewalld
systemctl enable firewalld
Mã:
firewall-cmd --add-service=postgresql --permanent
firewall-cmd --reload
Mã:
firewall-cmd --list-all
LƯU Ý: Chạy Bước 1, Bước 2 và Bước 3 trên tất cả Máy chủ chính và Máy chủ phụ.
Bước 4 - Cấu hình máy chủ chính
Trong bước này, chúng ta sẽ cấu hình một máy chủ chính để sao chép. Đây là máy chủ chính, cho phép quá trình đọc và ghi từ các ứng dụng chạy trên đó. PostgreSQL trên máy chủ chính chỉ chạy trên địa chỉ IP '10.0.15.10' và thực hiện sao chép luồng đến máy chủ phụ.Đi đến thư mục dữ liệu pgsql '/var/lib/pgsql/9.6/data' và chỉnh sửa tệp cấu hình 'postgresql.conf'.
Mã:
cd /var/lib/pgsql/9.6/data
vim postgresql.conf
Mã:
listen_addresses = '10.0.15.10'
Mã:
wal_level = hot_standby
Mã:
synchronous_commit = local
Mã:
archive_mode = on
archive_command = 'cp %p /var/lib/pgsql/9.6/archive/%f'
Mã:
max_wal_senders = 2
wal_keep_segments = 10
Mã:
synchronous_standby_names = 'pgslave01'
Tiếp theo, trong tệp postgresql.conf, chế độ lưu trữ được bật, vì vậy chúng ta cần tạo một thư mục mới cho mục đích lưu trữ.
Tạo một thư mục mới, thay đổi quyền của thư mục đó và thay đổi chủ sở hữu thành người dùng postgres.
Mã:
mkdir -p /var/lib/pgsql/9.6/archive/
chmod 700 /var/lib/pgsql/9.6/archive/
chown -R postgres:postgres /var/lib/pgsql/9.6/archive/
Mã:
vim pg_hba.conf
Mã:
# Localhost
host replication replica 127.0.0.1/32 md5
# PostgreSQL Master IP address
host replication replica 10.0.15.10/32 md5
# PostgreSQL SLave IP address
host replication replica 10.0.15.11/32 md5
Mã:
systemctl restart postgresql-9.6
Tiếp theo, chúng ta cần tạo một người dùng mới có quyền sao chép. Chúng ta sẽ tạo một người dùng mới có tên là 'replica'.
Đăng nhập với tư cách là người dùng postgres và tạo một người dùng 'replica' mới với mật khẩu 'aqwe123@'.
Mã:
su - postgres
createuser --replication -P replica
Nhập mật khẩu mới:
Như vậy, cấu hình PostgreSQL 9.6 Master đã hoàn tất và người dùng để sao chép đã được tạo.
Bước 5 - Cấu hình máy chủ Slave
Trong bước này, chúng ta sẽ cấu hình máy chủ Slave. Chúng tôi muốn thay thế thư mục dữ liệu postgres trên máy chủ phụ bằng dữ liệu postgres từ máy chủ chính, sau đó cấu hình máy chủ phụ để chạy dưới địa chỉ IP '10.0.15.11' và cuối cùng bật hot_standby trên đó để chỉ cho phép đọc mà không ghi.Trước khi bắt đầu cấu hình máy chủ phụ, hãy dừng dịch vụ postgres bằng lệnh systemctl bên dưới.
Mã:
systemctl stop postgresql-9.6
Mã:
cd /var/lib/pgsql/9.6/
mv data data-backup
Mã:
mkdir -p data/
chmod 700 data/
chown -R postgres:postgres data/
Mã:
su - postgres
pg_basebackup -h 10.0.15.10 -U replica -D /var/lib/pgsql/9.6/data -P --xlog
Mật khẩu:
Sau khi quá trình truyền dữ liệu hoàn tất, hãy đến thư mục dữ liệu postgres và chỉnh sửa tệp postgresql.conf trên máy chủ phụ.
Mã:
cd /var/lib/pgsql/9.6/data/
vim postgresql.conf
Mã:
listen_addresses = '10.0.15.11'
Mã:
hot_standby = bật
Sau đó tạo tệp 'recovery.conf' mới bằng vim.
Mã:
vim recovery.conf
Mã:
standby_mode = 'on'
primary_conninfo = 'host=10.0.15.10 port=5432 user=replica password=aqwe123@ application_name=pgslave01'
trigger_file = '/tmp/postgresql.trigger.5432'
Lưu ý: Trên primary_conninfo, hãy nhập thông tin chi tiết về máy chủ của riêng bạn.
Thay đổi quyền sở hữu tệp recovery.conf thành quyền của người dùng 'postgres'.
Mã:
chmod 600 recovery.conf
chown postgres:postgres recovery.conf
Mã:
systemctl start postgresql-9.6
Bây giờ khi bạn kiểm tra máy chủ phụ, bạn sẽ thấy PostgreSQL 9.6 đang chạy trên máy chủ có địa chỉ IP là '10.0.15.11'.
Mã:
netstat -plntu
Bước 6 - Kiểm tra
Cài đặt và cấu hình cho bản sao Master-Slave PostgreSQL 9.6 đã hoàn tất. Để kiểm tra thiết lập, hãy kiểm tra luồng trạng thái của bản sao và kiểm tra sao chép dữ liệu từ Master sang Slave.Đăng nhập vào máy chủ Master và chuyển sang người dùng postgres.
Mã:
su - postgres
Mã:
psql -c "select application_name, state, sync_priority, sync_state from pg_stat_replication;"
psql -x -c "select * from pg_stat_replication;"
Tiếp theo, hãy kiểm tra bằng cách chèn dữ liệu từ máy chủ master rồi kiểm tra tất cả dữ liệu trên máy chủ slave.
Đăng nhập với tư cách là người dùng postgres và truy cập shell PostgreSQL trên Máy chủ 'MASTER'.
Mã:
su - postgres
psql
Mã:
CREATE TABLE replica_test (test varchar(100));
INSERT INTO replica_test VALUES ('howtoforge.com');
INSERT INTO replica_test VALUES ('Đây là từ Master');
INSERT INTO replica_test VALUES ('pg replication by hakase-labs');
Và bây giờ hãy đăng nhập vào máy chủ 'SLAVE' tương tự như cách bạn đã làm trên máy chủ chính.
Mã:
su - postgres
psql
Mã:
select * from replica_test;
Vì vậy, bạn sẽ thấy rằng tất cả dữ liệu được sao chép từ máy chủ 'MASTER' sang máy chủ 'SLAVE'.
Kiểm tra bổ sung
Kiểm tra để thực hiện hành động 'WRITE' từ máy chủ 'SLAVE'.
Mã:
INSERT INTO replica_test VALUES ('this is SLAVE');
Vì vậy, quá trình cài đặt và cấu hình PostgreSQL 9.6 Master-Slave Replication trên CentOS 7 đã thành công.