Mục lục
1. Giới thiệu Logical Replication
Theo tài liệu PostgreSQL, Logical Replication là một giải pháp đồng bộ dữ liệu ở mức logic. Ở đây có 2 thuật ngữ, bạn cần hiểu rõ ý nghĩa:
- Đồng bộ dữ liệu có thể hiểu là cơ chế giúp 1 bảng (hay rộng ra là 1 đối tượng) “bắt chước” các sự thay đổi từ 1 bảng khác. VD: Khi insert dữ liệu vào bảng A, thì bảng B cũng được insert đúng dữ liệu đó.
- Thuật ngữ logic ở đây đối nghịch với thuật ngữ physic. Hiểu một cách đơn giản, logic là các đối tượng ở mức trên cùng, mà user có thể tương tác được như table, view. Còn physic là đối tượng thực sự ở bên dưới ổ đĩa, thứ mà user không nhìn thấy (như datatabase, tablespace, datafile). Một giải pháp đồng bộ ở mức physic có thể kể ra là Streaming Replication
Link từ trang document của PostgreSQL: https://www.postgresql.org/docs/current/logical-replication.html
Việc đồng bộ dữ liệu ở mức độ physic có nghĩa là bạn sẽ phải đồng bộ toàn bộ database. Thế nhưng giả sử bây giờ bạn chỉ cần đồng bộ một vài bảng thôi thì giải pháp Logical Replication mới có thể làm được.
Trên thực tế, giải pháp Logical Replication phù hợp cho việc xây dựng hệ thống báo cáo, do nó rất linh hoạt, và database được đồng bộ có thể đọc và ghi dữ liệu trên đó được.
2. Nguyên tắc hoạt động
Khi có thay đổi trên 1 bảng A nào đó, thay đổi đó sẽ được ghi vào WAL file. Sau đó, một tiến trình gọi là logical decode sẽ chuyển hóa thay đổi đó thành các câu lệnh SQL, gửi sang database đích và thực hiện trên bảng A’ được cấu hình logical replication đồng bộ với bảng A.
Logical Replication sử dụng mô hình publication – subscription. Tức là, ở đầu publication, các bảng cần đồng bộ sẽ được thêm vào 1 nhóm gọi là publication, publication có nhiệm vụ ghi lại những câu lệnh thay đổi trên các bảng đó. Ở đầu còn lại – subscription, sẽ kết nối với publication để lấy ra các câu lệnh thay đổi và thực thi trên các bảng đích.
Trong bài viết này tôi sẽ hướng dẫn các bạn cách cấu hình một mô hình Logical Replication.
3. Chuẩn bị môi trường
Đầu tiên các bạn cần chuẩn bị môi trường như sau:
- Hai máy chủ giả lập cho hệ thống chính (gọi là master) và hệ thống đồng bộ (replication).
- IP hệ thống master: 10.239.43.106
- IP hệ thống replication: 10.239.43.102
- Hai máy chủ này phải kết nối được với nhau thông qua cổng mặc định của PostgreSQL là 5432
- Trên hai máy chủ này tôi sẽ cài phiên bản 13 và đã khởi tạo một Database Cluster.
- Trong Database Cluster trên hệ thống master tôi có một database tên là prod có một bảng là khach_hang có cấu trúc như sau:
CREATE TABLE public.khach_hang (
id int4 NOT NULL,
hoten varchar NULL,
email varchar NULL,
dienthoai varchar NULL,
diachi varchar NULL,
CONSTRAINT khach_hang_pk PRIMARY KEY (id)
);
Nhu cầu tôi cần bây giờ đó là đồng bộ bảng này sang database report nằm trên hệ thống replication.
4. Các bước tiến hành
Các bước cần tiến hành như sau
1. Tạo user và gán quyền
Đầu tiên tôi cần cấu hình kết nối để từ máy chủ replication có thể kết nối vào PostgreSQL trên máy chủ master
Bạn kết nối với database có chứa bảng khach_hang, ở đây là prod
$ psql prod
psql (13)
Type "help" for help.
prod=#
Bạn tạo user
CREATE ROLE replica WITH REPLICATION LOGIN PASSWORD 'Abcd1234'; GRANT ALL PRIVILEGES ON DATABASE prod TO replica ; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO replica ;
Ở đây, tôi đã tạo 1 user đặt tên là replica với password “Abcd1234”. User này sẽ sử dụng để cho subscription kết nối với publication. User này cần các quyền trên database prod để có thể hoạt động được đầy đủ chức năng.
2. Cấu hình kết nối
Tiếp theo, bạn cần cấu hình để cho phép từ hệ thống replication có thể kết nối với database prod bằng user replica
Bạn sử dụng vi để mở file pg_hba.conf ra, và thêm vào dòng sau:
host replication replica 10.239.43.102/32 md5
3. Thay đổi tham số
Để Logical Replication có thể hoạt động được, cần phải đặt tham số wal_level=logical
alter system set wal_level=logical;
và restart instance
pg_ctl restart
4. Tạo publication
Bây giờ đến bước tạo publication, bạn thực hiện lệnh sau:
CREATE PUBLICATION pub;
Sau đó bạn thêm bảng khach_hang vào publication pub
ALTER PUBLICATION pub ADD TABLE public.khach_hang;
5. Tạo subscription
Như vậy là chúng ta đã xong các bước ở trên database prod rồi đó. Bây giờ chúng ta sẽ chuyển sang hệ thống replication, và kết nối vào database report.
Chúng ta tạo 1 bảng có cùng tên và cấu trúc với bảng khach_hang ở trên database report
$ psql report
psql (13)
Type "help" for help.
report=#
CREATE TABLE public.khach_hang (
id int4 NOT NULL,
hoten varchar NULL,
email varchar NULL,
dienthoai varchar NULL,
diachi varchar NULL,
CONSTRAINT khach_hang_pk PRIMARY KEY (id)
);
Cuối cùng chúng ta tạo subscription trên report để kết nối với publication trên prod
CREATE SUBSCRIPTION sub CONNECTION 'host=10.239.43.106 port=5432 password=Abcd1234 user=replica dbname=prod' PUBLICATION pub;
Như vậy là hoàn thành rồi đó. Cuối cùng chúng ta kiểm tra kết quả thôi
6. Kiểm tra
Bây giờ tôi sẽ thêm dữ liệu vào bảng khach_hang trên database prod
INSERT INTO public.khach_hang (id,hoten,email,dienthoai,diachi)
VALUES (1,'duy','duy@abc','0987654321','Việt Nam');
Kiểm tra lại trên database report:
Với các thao tác UPDATE, DELETE, bạn có thể tự thử nghiệm nhé.
Chú ý:
Giả sử dữ liệu trên bảng khach_hang ở database prod đã có sẵn, thì khi chúng ta tạo subscription, ngay lập tức, dữ liệu trên đó sẽ được chuyển hóa thành câu lệnh COPY và chuyển sang bên report luôn
Như vậy là xong rồi đó, nếu anh em muốn tôi thực hiện các bài lab nào khác, anh em cứ gửi yêu cầu lên group “Kho tài liệu kiến thức database” nhé
https://www.facebook.com/groups/khotailieukienthucdatabase
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 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é.