Ở bài viết này, mình sẽ hướng dẫn cách cấu hình HADR trên IBM DB2 để tăng tính dự phòng. Bài viết này sẽ bao gồm
Cấu hình HADR trên IBM DB2.
Giả lập trường hợp non forced takeover và forced takeover.
Yêu cầu:
Thông tin 2 VM ở trong bài lab này mình sẽ sử dụng
DB2-DC (Primary):
Một số lưu ý, Database DBTST được tạo trên VM db2-dc trước bằng lệnh sau
Do mình đã có Database DBTST nên sẽ hiển thị như hình. Chỉ cần tạo Database trên VM DB2-DC sau khi cấu hình xong sẽ thực hiện backup restore lên VM DB2-DR
Trên VM DB2-DC (Primary)
Kích hoạt Log Archive trên VM DB2-DC ( Primary )bằng lệnh:
Cấu hình HADR trên Primary
Cấu hình Read-only mode on the standby
Kiểm tra cấu hình HADR trên Primary
Thực hiện tắt instance trên Primary
Thực hiện offline backup Database trên Primary
Sau đó copy folder backup qua VM DB2-DR
Khởi chạy lại instance
Trên VM DB2-DR (Standby):
Thực hiện restore database DBTST:
Cấu hình HADR trên Standby
Cấu hình Read-only mode on the standby
Kiểm tra cấu hình HADR trên Standby
Khởi chạy service HADR:
Khởi chạy service HADR trên VM DB2-DR với trạng thái standby bằng lệnh
Khởi chạy service HADR trên VM DB2-DC với trạng thái primary bằng lệnh
Lưu ý: Nếu khởi chạy DB2-DC với trạng thái primary thì sẽ gặp hiện tượng bị treo service cho đến khi có 1 VM làm standby vì thế khởi chạy standby trước sau đó đến primary
Kiểm tra trạng thái HADR:
Một số điểm cần lưu ý ở đây
Kiểm tra thử dữ liệu đã được đồng bộ giữa 2 instance
trên VM DB2-DC:
Trên VM DB2-DR:
Như vậy dữ liệu đã được đồng bộ giữa Primary và Standby
Trạng thái hiện tại
Kiểm tra trạng thái của VM DB2-DR
Thực hiện takeover trên VM DB2-DR
Sau khi thực hiện takeover trên VM DB2-DR, role của instance sẽ thành primary
TH2 - Forced takeover
Ở trường hợp này, mình sẽ giả lập DB2-DC bị sập bằng lệnh
Kiểm tra trạng thái HADR trên DB2-DR thì sẽ thấy status đang là disconnected
Chạy thử lệnh takeover bình thường sẽ hiện báo lỗi
Sự dụng lệnh sau để forced takeover
Giả lập tiếp trường hợp DB2-DC được khôi phục trở lại
Tuy nhiên chưa có bất kỳ database nào đang chạy cả
Nếu khởi chạy bình thường sẽ báo lỗi vì trạng thái HADR hiện tại của VM DB2-DC đang là primary nên theo cơ chế forced takeover thì DB2-DR sẽ gửi các gói tin không cho phép DB2-DC khởi chạy HADR
Vì thế cần khởi chạy lại service HADR ở trạng thái standby
Các thông tin thêm về HADR IBM DB2 các bạn có thể tham khảo thêm tại đây.
Các bài viết liên quan:
IBM DB2 - [Lab 01] Cài đặt IBM DB2 trên Linux | Lab Network System Security (securityzone.vn)
Cấu hình HADR trên IBM DB2.
Giả lập trường hợp non forced takeover và forced takeover.
Thực hiện cấu hình HADR cho IBM DB2
Yêu cầu:
- Cần cấu hình 2 VM được cài đặt sẵn IBM DB2 (Thực hiện theo hướng dẫn ở bài lab trước)
- 2 VM này cần ping thấy nhau và firewall giữ 2 VM này được mở hết port (Có thể mở theo các port cấu được cấu hình ở dưới)
Thông tin 2 VM ở trong bài lab này mình sẽ sử dụng
DB2-DC (Primary):
- IP address: 10.120.197.41
- Hostname: db2-dc
- Instance: db2inst1
- Database: DBTST
- HADR Port: 55555
- Archive log Directory: /opt/ibm/db2log/archivelog/DBTST
- IP address: 10.120.50.42
- Hostname: db2-dr
- Instance: db2inst1
- Database: DBTST
- HADR Port: 55565
- Archive log Directory: /opt/ibm/db2log/archivelog/DBTST
Một số lưu ý, Database DBTST được tạo trên VM db2-dc trước bằng lệnh sau
Bash:
#Lưu ý login bằng user instance. Ở đây mình sử dụng db2inst1
db2 create db DBTST
Do mình đã có Database DBTST nên sẽ hiển thị như hình. Chỉ cần tạo Database trên VM DB2-DC sau khi cấu hình xong sẽ thực hiện backup restore lên VM DB2-DR
Trên VM DB2-DC (Primary)
Kích hoạt Log Archive trên VM DB2-DC ( Primary )bằng lệnh:
Bash:
db2 update db cfg for DBTST using LOGARCHMETH1 DISK:/opt/ibm/db2log/archivelog/DBTST
db2 update db cfg for DBTST using LOGINDEXBUILD ON
Code:
db2 update db cfg for DBTST using HADR_LOCAL_HOST 10.120.197.41
db2 update db cfg for DBTST using HADR_LOCAL_SVC 55556
db2 update db cfg for DBTST using HADR_REMOTE_HOST 10.120.50.42
db2 update db cfg for DBTST using HADR_REMOTE_SVC 55566
db2 update db cfg for DBTST using HADR_REMOTE_INST db2inst1
Code:
db2set DB2_HADR_ROS=on
db2set DB2_STANDBY_ISO=UR
Code:
db2 get db cfg for DBTST | grep -i hadr
Thực hiện tắt instance trên Primary
Code:
db2 force application all
db2 deactivate db DBTST
Thực hiện offline backup Database trên Primary
Code:
mkdir /home/db2inst1/DBTST_backup
db2 backup database DBTST to /home/db2inst1/DBTST_backup
Sau đó copy folder backup qua VM DB2-DR
Khởi chạy lại instance
Code:
db2 activate db DBTST
Trên VM DB2-DR (Standby):
Thực hiện restore database DBTST:
Bash:
db2 restore db DBTST from /home/db2inst1/DBTST_backup
Cấu hình HADR trên Standby
Code:
db2 update db cfg for DBTST using LOGARCHMETH1 DISK:/opt/ibm/db2log/archivelog/DBTST
db2 update db cfg for DBTST using LOGINDEXBUILD ON
db2 update db cfg for DBTST using HADR_LOCAL_HOST 10.120.50.42
db2 update db cfg for DBTST using HADR_LOCAL_SVC 55566
db2 update db cfg for DBTST using HADR_REMOTE_HOST 10.120.197.41
db2 update db cfg for DBTST using HADR_REMOTE_SVC 55556
db2 update db cfg for DBTST using HADR_REMOTE_INST db2inst1
Code:
db2set DB2_HADR_ROS=on
db2set DB2_STANDBY_ISO=UR
Code:
db2 get db cfg for DBTST | grep -i hadr
Khởi chạy service HADR:
Khởi chạy service HADR trên VM DB2-DR với trạng thái standby bằng lệnh
Code:
db2 start hadr on db DBTST as standby
Code:
db2 start hadr on db DBTST as primary
Kiểm tra trạng thái HADR:
Code:
db2pd -hadr -db DBTST
#Có thể sử dụng lệnh db2pd -hadr -alldbs để list toàn bộ database HADR
Một số điểm cần lưu ý ở đây
- HADR_ROLE: Role hiện tại của instance DB ( Chỉ có thể read/write trên Primary còn standby thì readonly)
- HADR_STATE: Ở đây sẽ có một số trạng thái như hình dưới. Ở trạng thái PEER thì 2 instance đã đồng bộ với nhau
- HADR_CONNECT_STATUS: Chỉ trạng thái giữa 2 instance standby và primary
Kiểm tra thử dữ liệu đã được đồng bộ giữa 2 instance
trên VM DB2-DC:
Code:
db2
connect to DBTST
create table test (c1 varchar(10),c2 varchar(10))
INSERT INTO test (c1, c2) VALUES('123', 'aaaaaaaaa')
select * from test
Trên VM DB2-DR:
Code:
db2
connect to DBTST
select * from test
Như vậy dữ liệu đã được đồng bộ giữa Primary và Standby
Thực hiên takeover giữa 2 instance:
Trạng thái hiện tại
- VM DB2-DC (Primary)
- VM DB2-DR (Secondary)
- TH1: Cả 2 instance DC và DR hoạt động bình thường (non forced takeover)
- TH2: instance DC bị sập (forced takeover)
Kiểm tra trạng thái của VM DB2-DR
Thực hiện takeover trên VM DB2-DR
Code:
db2 takeover hadr on db DBTST
Sau khi thực hiện takeover trên VM DB2-DR, role của instance sẽ thành primary
TH2 - Forced takeover
Ở trường hợp này, mình sẽ giả lập DB2-DC bị sập bằng lệnh
Code:
db2stop force
Kiểm tra trạng thái HADR trên DB2-DR thì sẽ thấy status đang là disconnected
Chạy thử lệnh takeover bình thường sẽ hiện báo lỗi
Sự dụng lệnh sau để forced takeover
Code:
db2 takeover hadr on db DBTST by force
Giả lập tiếp trường hợp DB2-DC được khôi phục trở lại
Code:
db2start
Tuy nhiên chưa có bất kỳ database nào đang chạy cả
Nếu khởi chạy bình thường sẽ báo lỗi vì trạng thái HADR hiện tại của VM DB2-DC đang là primary nên theo cơ chế forced takeover thì DB2-DR sẽ gửi các gói tin không cho phép DB2-DC khởi chạy HADR
Vì thế cần khởi chạy lại service HADR ở trạng thái standby
Code:
db2 start hadr on db DBTST as standby
Các thông tin thêm về HADR IBM DB2 các bạn có thể tham khảo thêm tại đây.
Các bài viết liên quan:
IBM DB2 - [Lab 01] Cài đặt IBM DB2 trên Linux | Lab Network System Security (securityzone.vn)