Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> SQL Server

Đạt tính sẵn sàng liên tục với SQL Server Mirroring

Giải pháp Database Mirroring giúp xây dựng hệ thống quản lý database sẵn sàng cao trong SQL Server khá đơn giản và phù hợp cho database trung bình và nhỏ.

Yêu cầu hệ thống quản lý database sẵn sàng cao ngày càng cấp bách, đôi khi là yếu tố sống còn cho tổ chức, công ty. Tuy nhiên, đạt sẵn sàng cao (gần như luôn hoạt động) không đơn giản, vì luôn có nhiều yếu tố ảnh hưởng hiệu suất: lỗi phần cứng, hạ tầng mạng, lỗi hệ điều hành, lỗi ứng dụng, virus. Bài viết giới thiệu giải pháp đạt sẵn sàng cao (HA - High Availability) trên hệ thống quản lý database hiện dùng: SQL Server .

Giải pháp HA trên SQL Server

Failover cluster

Giải pháp này dùng ổ cứng chia sẻ - thường là SAN để lưu database. Có nhiều ' instance ' SQL Server cài đặt, mỗi instance là một node, nhưng tại một thời điểm chỉ một node kiểm soát database. Khi node này gặp sự cố, node khác sẽ thay thế quản lý database.

Log shipping

Cấu trúc thêm database như mirror (bản sao). Khi có thay đổi/cập nhật từ database chính, file log ghi lại thay đổi sẽ gửi đến instance mirror server. Như vậy, bản sao cập nhật của database được duy trì. Trong sự cố, database bản sao sẽ chuyển thành database chính trong thời gian ngắn.

Đạt tính sẵn sàng liên tục với SQL Server Mirroring Hình 1: Cài đặt SQL Server luôn sẵn sàng

Replication

Nếu Failover cluster và Log Shipping là hai giải pháp đảm bảo high-availability cấp database, Replication chỉ đảm bảo sẵn sàng cao cấp đối tượng trong database như table, view. Các đối tượng này sẽ được sao chép sang instance thứ 2 của SQL Server để lưu trữ.

Database Mirroring trong SQL Server

Database Mirroring (DM) là giải pháp mới xây dựng database sẵn sàng cao trong SQL Server. DM khắc phục nhược điểm giải pháp trước:

• So với Failover Cluster, DM không yêu cầu phần cứng đặc biệt như SAN, giảm chi phí cấu hình

• So với Log Shipping, DM tự động chuyển sang máy mirror khi lỗi mà không cần admin can thiệp. Log shipping cần cấu hình thủ công T-SQL. Do đó DM gọi là 'hot standby', thời gian gián đoạn (downtime) tính bằng giây, Log-shipping gọi 'warm standby', gián đoạn có thể tính bằng phút.

• So với Replication , DM vượt trội vì bảo vệ toàn bộ database, Replication chỉ bảo vệ phần database, ví dụ table master.

Tuy nhiên, DM chỉ có trong phiên bản Enterprise / Developer của SQL Server 2005 SP1 / 2008.

1. Cấu trúc DM trong SQL Server

DM trong SQL Server yêu cầu 3 instance chính: 1 instance (principal role) quản lý database, 1 instance phụ (mirror) đảm bảo backup database. Một instance witness kết nối với hai instance chính và phụ để giám sát và đảm bảo sẵn sàng database.

Khi có witness: Witness server kết nối cả main server và mirror server. Toàn bộ hệ thống thành quorum 2/3 thành phần có quyền quyết định. Nếu main server sự cố, witness tự động chuyển mirror server thành main. Nếu main server hoạt động lại, main server sẽ lấy vai mirror (2 server đổi vai cho nhau) cho đến khi admin can thiệp ( sơ đồ 1 ).

Đạt tính sẵn sàng liên tục với SQL Server Mirroring Hình 2: Cài đặt SQL Server luôn sẵn sàng

Khi không có witness server: Quá trình chuyển đổi tự động không hoạt động nếu không có tác động admin.

Trong SQL Server có khái niệm ' endPoint ' hiểu là 'điểm kết nối', cho phép instance SQL Server giao tiếp qua TCP ( sơ đồ 2 ).

Mỗi endpoint được xác định bằng địa chỉ và cổng tương ứng. Về lý thuyết, địa chỉ phải là full domain, nhưng thực tế dùng 1 trong 4 cách:

- Xác định qua tên server. Ví dụ: TCP://PRINCIPAL:7024.

- Xác định qua tên miền. Ví dụ: TCP://PRINCIPAL.DELTAX.COM:7024.

- Xác định qua IPv4. Ví dụ: TCP://192.168.1.3:7024.

- Xác định qua IPv6.

Lưu ý: Nếu SQL Server Instance chạy trên cùng máy, cổng TCP phải khác nhau.

2. Trao đổi thông tin giữa main server và mirror server

Đạt tính sẵn sàng liên tục với SQL Server Mirroring Hình 3: Cài đặt SQL Server luôn sẵn sàng

Chế độ hiệu suất cao (High-Performance):

High-Performance mode tương ứng với sao chép bất đồng bộ. Main server gửi cập nhật đến mirror server và tiếp tục thay đổi khác mà không cần mirror server xác nhận cập nhật thành công.

Bằng cách không chờ mirror server cập nhật, main server có tốc độ truy cập nhanh và tránh tải không cần thiết.

Quy trình này minh họa bằng sơ đồ:

Ở high-performance mode, mirror server luôn cập nhật chậm hơn main server, và có thể mất dữ liệu nếu main server ngắt mà chưa gửi dữ liệu cho mirror. Tuy nhiên, phần database khác biệt này khá nhỏ và chấp nhận được. High performance mode không bắt buộc witness server.

Chế độ an toàn cao (High-Safety):

Khác với high speed mode, high safety mode dùng cơ chế Đồng bộ (Synchronous). Khi ứng dụng hoặc user cập nhật, sẽ cập nhật gần như đồng thời trên cả main và mirror server. Điều này đảm bảo khi main server sự cố, mirror server sẽ có bản sao hoàn chỉnh database, đảm bảo an toàn dữ liệu cao.

High safety mode yêu cầu witness server để đảm bảo hot standby.

3. Cấu hình DM:

Cấu hình DM trên SQL Server gồm 3 bước cơ bản:

- Backup toàn bộ database trên main server và restore trên mirror server.

- Tạo endpoint tương ứng để main, mirror, witness làm việc cùng nhau.

- Tạo session (Database Mirroring Session)

Đạt tính sẵn sàng liên tục với SQL Server Mirroring Hình 4: Cài đặt SQL Server luôn sẵn sàng

Cấu hình DM có thể dùng giao diện SQL Server Management Studio (SSMS), hoặc T-SQL.

Cấu hình qua SSMS khá đơn giản, sau khi restore thành công trên mirror server, chỉ chuột phải database chọn ' Mirroring ', làm theo các bước.

Kết quả sẽ khởi tạo session DM.

Cấu hình SSMS cho phép loại bỏ hầu hết thao tác T-SQL, nhưng nếu muốn, vẫn dùng T-SQL để linh hoạt tối đa.

Cấu hình T-SQL dùng 2 cách xác thực endpoint: xác thực bằng login hoặc bằng certificate. Code T-SQL hoàn chỉnh cấu hình DM khá dài, chỉ giới thiệu vài bước điển hình.

Cấu hình bằng Login

Giả sử dùng tài khoản Windows đăng nhập SQL Server, trường hợp tài khoản SQL Server tương tự.

CREATE LOGIN [PRICIPAL-SRVAdministrator]
FROM WINDOWS
GO

Tạo endpoint:

CREATE ENDPOINT Partner
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (
AUTHENTICATION = WINDOWS NEGOTIATE,
ENCRYPTION = SUPPORTED,
ROLE = ALL)
GO

Lưu ý tạo endpoint với ROLE = ALL cần làm trên cả principal và mirror server, trên witness server thay bằng ROLE = WITNESS .

Đạt tính sẵn sàng liên tục với SQL Server Mirroring Hình 5: Cài đặt SQL Server luôn sẵn sàng

Cấu hình bằng Certificate:

Thay vì dùng tài khoản login để endpoint nhận diện nhau, có thể dùng giải pháp thay thế tạo certificate.

- Tạo master key encryption (cần để export certificate):

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'abc123 !!';

- Tạo certificate:

CREATE CERTIFICATE PRINCIPAL_cert
WITH SUBJECT = 'PRINCIPAL certificate',
START_DATE = '2007/11/01',
EXPIRY_DATE = '2020/11/01';

Đạt tính sẵn sàng liên tục với SQL Server Mirroring Hình 6: Cài đặt SQL Server luôn sẵn sàng - Tạo endpoint tương ứng certificate:

CREATE ENDPOINT endpoint_mirroring STATE = STARTED
AS TCP (LISTENER_PORT = 7024, LISTENER_IP = ALL)
FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE PRINCIPAL_cert, ENCRYPTION = DISABLED, ROLE = ALL);

- Export certificate ra file riêng:

BACKUP CERTIFICATE PRINCIPAL_cert TO FILE = 'c:\PRINCIPAL_cert.cer';
Làm tương tự trên mirror và witness, chú ý đổi role = witness khi cần. Sau khi tạo Endpoint và export certificate trên 3 instance, quay lại principal server:

- Tạo login cho mirror server:

CREATE LOGIN MIRROR_login WITH PASSWORD = 'abc123 !!';
GO

- Tạo user tương ứng login đó

CREATE USER MIRROR_user FROM LOGIN MIRROR_login;
GO

- Tạo certificate từ file .cer của server:

CREATE CERTIFICATE MIRROR_cert
AUTHORIZATION MIRROR_user
FROM FILE = 'c:\MIRROR_cert.cer';
GO

- Cấp quyền connect endpoint cho login mirror server:

GRANT CONNECT ON ENDPOINT::endpoint_mirroring TO [MIRROR_login];
GO

Đạt tính sẵn sàng liên tục với SQL Server Mirroring Hình 7: Cài đặt SQL Server luôn sẵn sàng Làm tương tự cho certificate witness server, cũng trên mirror và witness để 3 máy nhận diện và xác thực nhau.

Sau tạo endpoint, kiểm tra bằng truy vấn:

SELECT name, state_desc, role_desc
FROM sys.database_mirroring_endpoints

Nhiệm vụ cuối là khởi tạo session DM:

* Trên principal server:

ALTER DATABASE AdventureWorks
SET PARTNER = 'TCP://mirror-srv.deltax.com:5022'
GO

* Trên mirror server:

ALTER DATABASE AdventureWorks
SET PARTNER = 'TCP://pricipal-srv.deltax.com:5022'
GO

* Trên principal server, cấu hình witness:

ALTER DATABASE AdventureWorks
SET WITNESS = 'TCP://witness-srv.deltax.com:5022'
GO

Sau khi hệ thống vận hành, giám sát bằng công cụ Database Mirroring Monitor :

Đạt tính sẵn sàng liên tục với SQL Server Mirroring Hình 8: Cài đặt SQL Server luôn sẵn sàng

4. Lập trình middleware:

Việc dùng DM được cho là gần như trong suốt cho kết nối database từ middleware. Nếu dùng thư viện ADO.NET, chỉ sửa ConnectionString thêm trường ' failover partner ' cho mirror server, ví dụ:

Data Source = pricipal.database.com; Failover Partner = mirror.database.com; Initial Catalog = AdventureWorks;
Integrated Security = True;

Thêm vào đó, ADO.NET tạo ' connection pool ' cho phép cache kết nối đã khởi tạo, nên nếu sự cố dẫn đến chuyển server, cần chủ động xóa cache này.

SqlConnection.ClearPool (conn);

Kết luận

Đạt tính sẵn sàng liên tục với SQL Server Mirroring Hình 9: Cài đặt SQL Server luôn sẵn sàng DM trong SQL Server khá đơn giản, dễ cấu hình, dùng và giám sát, nhưng khả năng tương đối hạn chế. Chỉ phù hợp database trung bình và nhỏ, còn database lớn yêu cầu liên tục khắt khe, cách tiếp cận này chưa đáp ứng, cần giải pháp hệ thống tổng thể phần cứng, mạng.

Bài viết hy vọng giúp bạn hiểu tổng quan cách xây dựng hệ thống quản lý database sẵn sàng cao trong SQL Server.

Tham khảo: https://technet.microsoft.com/en-us/library/cc917680.aspx

Chúc thành công.

Bạn vừa đọc xong bài "Cài đặt SQL Server luôn sẵn sàng" do đội ngũ TipsMake biên soạn. Hy vọng bài viết cung cấp nhiều mẹo công nghệ hữu ích. Bạn có thể tìm bài tương tự về mẹo và hướng dẫn. Cảm ơn bạn đã đọc và theo dõi thường xuyên.