Table of Contents

1. Giới thiệu Streaming Replication

Streaming Replication là tính năng giúp bạn xây dựng 1 hệ thống database dự phòng cho database PostgreSQL. Hơn thế nữa, nó còn cho phép bạn có thể truy vấn dữ liệu trên database dự phòng được, giúp giảm tải cho database chính.

Streaming Replication hoạt động dựa trên việc chuyển các WAL file từ database chính (hay master) sang database dự phòng (hay slave). Sau đó, áp dụng các WAL file này vào database dự phòng. Trong các tài liệu thường gọi đó là tiến trình recovery, apply hoặc replay.

Đọc thêm  PostgreSQL WAL là gì?

Nếu anh em còn chưa rõ, có thể xem trước video demo khả năng của Streaming Replication:

Bài này tôi thực hiện theo yêu cầu của bạn Nguyen Duc trong group “Kho tài liệu kiến thức Database”, anh em nếu muốn tôi demo tính năng hay sản phẩm gì liên quan đến database thì cứ comment ở đây hoặc trong group nhé.

 

2. Chuẩn bị môi trường

Môi trường giả lập của tôi có 2 server đều đã cài đặt PostgreSQL

1. Server master:

  • IP: 192.168.50.34
  • Hệ điều hành: Red Hat Enterprise Linux Server release 7.9
  • Phiên bản PostgreSQL: 13

2. Server slave:

  • IP: 192.168.50.35
  • Hệ điều hành: Red Hat Enterprise Linux Server release 7.9
  • Phiên bản PostgreSQL: 13

Trên server master, tôi đã khởi tạo 1 cluster PostgreSQL và đã tạo sẵn 1 database có tên testdb

Mô hình mà tôi cần xây dựng như sau:

Mô hình Streaming Replication
Mô hình Streaming Replication
Đọc thêm  Cấu hình Logical Replication trong PostgreSQL

 

3. Thực hiện trên Server Master

1. Đưa PostgreSQL database về archive mode

Kiểm tra database đã ở chế độ archive mode hay chưa

# show archive_mode ;
 archive_mode 
--------------
 on
(1 row)

Nếu chưa, bạn hãy đưa database về chế độ Archive mode theo hướng dẫn dưới đây

Đọc thêm  Cấu hình chức năng archive mode trong PostgreSQL

2. Tham số wal_level=replica

Kiểm tra lại tham số wal_level xem giá trị đã là replica hay chưa

# show wal_level ;
 wal_level 
-----------
 replica
(1 row)

Nếu chưa, bạn hãy chạy lệnh sau để thay đổi tham số :

alter system set wal_level=replica;

Và nhớ restart lại instance để giá trị mới có hiệu lực.

pg_ctl restart
Đọc thêm  Cấu hình tham số trong PostgreSQL

3. Cấu hình network giữa primary và standby

Tạo user để đồng bộ

CREATE USER replication WITH REPLICATION PASSWORD 'Abcd1234';

Sau đó, bạn sửa lại file pg_hba.conf để cho phép từ standby có thể kết nối được vào primary thông qua user replication

vi pg_hba.conf

và thêm vào dòng sau:

host  replication     replication     192.168.50.35/32         md5
Đọc thêm  Cấu hình kết nối trong PostgreSQL với pg_hba.conf

Sau khi chỉnh xong file pg_hba.conf, bạn nhớ chạy lệnh sau để thay đổi có hiệu lực

pg_ctl reload

Chú ý: Option reload chỉ nạp lại giá trị các tham số chứ không phải restart database, do đó không ảnh hưởng gì đến các giao dịch đang diễn ra trên database.

 

4. Thực hiện trên Server Slave

Như vậy các bước trên master đã xong. Bây giờ chúng ta chuyển sang thao tác trên slave.

1. Backup và restore 

Thực hiện câu lệnh sau

pg_basebackup -h 192.168.50.34 -U replication -p 5432 -D $PGDATA -Fp -Xs -P -R

(Nhớ điền password của user replication)

Câu lệnh trên sẽ kết nối vào master, backup toàn bộ thư mục PGDATA của master và restore sang slave. Option -R sẽ tạo ra trên slave 1 file có tên là standby.signal. File này có nhiệm vụ báo hiệu đây là database slave.

Sau khi restore xong, kết quả có thể trông như sau:

streaming replication

Ngoài ra, nếu bạn kiểm tra file postgresql.auto.conf sẽ thấy có thêm tham số sau (tham số này cũng do option -R tạo ra)

primary_conninfo = 'user=replication password=''Abcd1234'' channel_binding=prefer host=192.168.50.34 port=5432 sslmode=prefer sslcompression=0 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

Tham số này để chỉ ra thông tin kết nối đến master, từ đó slave có thể sử dụng để kết nối vào slave để kéo WAL file về.

2. Start database

Sau khi đã restore xong, các bạn hãy start database lên

pg_ctl start

waiting for server to start....2021-06-11 15:52:36.115 +07 [17767] LOG: redirecting log output to logging collector process
2021-06-11 15:52:36.115 +07 [17767] HINT: Future log output will appear in directory "log".
done
server started

Như vậy là xong rồi đấy. Rất đơn giản phải không?

 

5. Kiểm tra kết quả

Bây giờ hãy thử kiểm tra kết quả xem

Đầu tiên bạn xem log của database xem.

cd $PGDATA/log
tail -100f postgresql-Fri.log

Kết quả như sau:

Đoạn log trên cho thấy database hiện đang ở chế độ standby và cho phép các kết nối read-only (chỉ đọc).

Cách tiếp theo để kiểm tra đó là: Bạn thêm dữ liệu vào bên master và kiểm tra slave xem đã có dữ liệu vừa mới thêm hay chưa.

Tôi tạo bảng và thêm dữ liệu mới trên master

Và quay sang slave để kiểm tra:

Như vậy là ok rồi đó. Chúc các bạn thành công.

Nguồn: https://dangxuanduy.com/

Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.

KHOÁ DÀNH CHO NGƯỜI MỚI

KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)

CÁC KHOÁ NÂNG CAO:

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD

CÁC KHOÁ COMBO:

COMBO 1: ADMIN 1 + MULTITENANT 12c

COMBO 2: ADMIN 1 + DATA GUARD

COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD

LỊCH HỌC:

Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE 

ĐĂNG KÝ:

https://forms.gle/MtCAoRQFenP886y79

Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.

0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x