Là DBA, chúng tôi thường gặp khách hàng của mình phàn nàn rằng Máy chủ sản xuất hiện tại không thể giữ tải trên máy chủ và liệu tải có thể được cân bằng với Máy chủ phụ hay không. Điều này có thể thực hiện được với cơ sở dữ liệu trong Máy chủ DR với cơ sở dữ liệu Chỉ đọc trong Bản ghi Nhật ký Vận chuyển và Bản sao Máy chủ SQL thứ cấp trong Nhóm Luôn sẵn sàng. Ưu điểm lớn nhất của Always On Groups là nó cho phép chúng tôi thiết lập HA cấp nhóm cho bất kỳ số lượng cơ sở dữ liệu nào và chúng tôi có thể tạo tối đa bốn bản sao thứ cấp và đây là sự kết hợp của Clustering, Log Shipping và Database Mirroring nơi truyền dữ liệu. linh hoạt và chức năng hơn.
Bản sao phụ luôn bật có thể đọc có một tính năng để xử lý các yêu cầu kết nối chỉ đọc cụ thể được gọi là định tuyến chỉ đọc. Nói chung, theo mặc định, cả mục đích đọc và mục đích đọc đều hướng đến bản sao Chính và không có ý định dành cho bản sao thứ cấp. Giờ đây, các bản sao thứ cấp không chỉ có thể được sử dụng cho các mục đích Sao lưu, DBCC và báo cáo mà còn có thể được truy vấn trong tương lai bằng cách sử dụng ‘ReadOnly’ làm Mục đích ứng dụng của chúng trong chuỗi kết nối ứng dụng.
Chúng tôi có ba bản sao SQL1, SQL2 và SQL3 trong cụm chuyển đổi dự phòng Windows. Mỗi nút có một phiên bản SQL Server 2012 độc lập được cài đặt và định cấu hình với Always On AG. Chúng tôi luôn nằm trong Nhóm AG có tên “CODEAG” với tên người nghe là “CODELIS”
Trong ảnh chụp màn hình sau, SQL1 là bản sao chính, SQL2 là bản sao thứ cấp, SQL3 là bản sao thứ cấp.
Cách định cấu hình danh sách định tuyến chỉ đọc trong các nhóm luôn sẵn sàng
Bước 1:
Các kết nối được thực hiện với Nhóm khả dụng bằng cách sử dụng tên hoặc IP của Người nghe. Bây giờ, để tạo nhiều người nghe cho một nhóm khả dụng, vui lòng làm theo quy trình dưới đây.
Để tạo hoặc định cấu hình thủ công một trình nghe cho một nhóm khả dụng
- Trong Object Explorer, hãy kết nối với phiên bản chứa bản sao chính của nhóm khả dụng.
- Mở rộng Nhóm AON và nhấp vào Nhóm khả dụng mà chúng tôi đang cố gắng định cấu hình trình nghe theo cách thủ công và tiếp tục.
- Nhấp chuột phải vào Nút trình xử lý nhóm khả dụng và chọn Lệnh trình xử lý mới. Thao tác này sẽ mở ra một hộp thoại mới để định cấu hình một người nghe.
- Số cổng của một trình nghe hiện có có thể được thay đổi bằng cách mở rộng Nút trình xử lý nhóm khả dụng, sau đó nhấp chuột phải vào trình nghe và chọn thuộc tính.
- Bây giờ, hãy nhập Số cổng mới và nhấp vào OK.
Xác định tên người nghe được định cấu hình cho bản sao Luôn Bật bằng cách truy vấn DMV như bên dưới.
SELECT AV.name AS AVGName , AVGLis.dns_name AS ListenerName , AVGLis.ip_configuration_string_from_cluster AS ListenerIP FROM sys.availability_group_listeners AVGLis INNER JOIN sys.availability_groups AV on AV.group_id = AV.group_id
Trong ảnh chụp màn hình sau, tên nhóm AG là CODEAG và IP của trình nghe AG là CODELIS.
Bước 2:
Để định cấu hình định tuyến chỉ đọc, chúng ta cần định cấu hình các bản sao thành chỉ mục đích đọc để cho phép các kết nối chỉ đọc đến các bản sao thứ cấp.
- Kết nối với bản sao chứa bản sao Chính.
- Mở rộng Nút khả dụng cao AON, sau đó là Nút nhóm AG.
- Nhấp vào Nhóm AG có bản sao sẽ được thay đổi.
- Nhấp chuột phải vào bản sao và chọn các thuộc tính để thay đổi quyền truy cập kết nối cho các vai trò Chính và Phụ như sau.
Vai trò phụ có một giá trị mới từ danh sách thả phụ có thể đọc được.
Chỉ mục đích đọc
Tùy chọn này cho phép truy cập đọc các cơ sở dữ liệu thứ cấp của bản sao này. Chỉ cho phép các kết nối chỉ đọc.
Có
Tùy chọn này chỉ cho phép đọc quyền truy cập nhưng tất cả các kết nối được phép cho bản sao thứ cấp.
Không
Điều này dừng tất cả các kết nối của người dùng với bản sao phụ và thậm chí không cho phép bạn đọc.
Đặt các thuộc tính phụ có thể đọc thành Chỉ mục đích đọc.
Trong ảnh chụp màn hình sau, thuộc tính Phụ có thể đọc của mỗi bản sao phụ được đặt thành Chỉ mục đích đọc.
Bước 3:
Mỗi bản sao phụ có thể đọc được có thể được gán một URL định tuyến chỉ đọc sẽ được sử dụng để định tuyến các yêu cầu kết nối có mục đích đọc đến một bản sao phụ có thể đọc cụ thể.
Sử dụng T-SQL để chỉ định URL định tuyến chỉ đọc cho tất cả các bản sao trong Nhóm khả dụng của chúng tôi.
ALTER AVAILABILITY GROUP [CODEAG] MODIFY REPLICA ON N'SQL1' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); ALTER AVAILABILITY GROUP [CODEAG] MODIFY REPLICA ON N'SQL1' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQL1.abc.com:17999')); ALTER AVAILABILITY GROUP [CODEAG] MODIFY REPLICA ON N'SQL2' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); ALTER AVAILABILITY GROUP [CODEAG] MODIFY REPLICA ON N'SQL2' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQL2.abc.com:17999')); ALTER AVAILABILITY GROUP [CODEAG] MODIFY REPLICA ON N'SQL3' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); ALTER AVAILABILITY GROUP [CODEAG] MODIFY REPLICA ON N'SQL3' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQL3.abc.com:17999'));
Bước 4:
Đối với bản sao mà chúng tôi đang đánh dấu là định tuyến chỉ đọc khi nó là bản sao chính, cần phải chỉ định danh sách định tuyến chỉ đọc và điều này chỉ có hiệu lực khi bản sao cục bộ đang chạy dưới vai trò chính.
ALTER AVAILABILITY GROUP [CODEAG] MODIFY REPLICA ON N'SQL1' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL2','SQL3'))); ALTER AVAILABILITY GROUP [CODEAG] MODIFY REPLICA ON N'SQL3' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL2','SQL1'))); ALTER AVAILABILITY GROUP [CODEAG] MODIFY REPLICA ON N'SQL2' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL3','SQL1')));
Trong tập lệnh trên, ví dụ khi SQL1 là bản sao chính, khối lượng công việc chỉ có mục đích đọc sẽ được chuyển hướng đến các bản sao thứ cấp có thể đọc được; SQL2 và SQL3 tương ứng:tương tự, nếu SQL3 là bản sao chính, khối lượng công việc chỉ có mục đích đọc sẽ được chuyển hướng đến các bản sao thứ cấp có thể đọc được; SQL2 và SQL1 tương ứng.
Lưu lượng được định hướng chỉ đọc sẽ được chuyển đến bản sao có sẵn đầu tiên cho đến khi và trừ khi không thể truy cập được, nó sẽ hướng lưu lượng đến bản sao có sẵn tiếp theo trong danh sách định tuyến. Khi bạn có nhiều bản sao, không thể chia sẻ tải giữa các bản sao cho đến SQL Server 2012 và 2014. Tuy nhiên, SQL server 2016 cho phép bạn cân bằng tải giữa các bản sao chỉ đọc.
Ví dụ:
ALTER AVAILABILITY GROUP [CODEAG] MODIFY REPLICA ON N'SQL2' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('SQL3','SQL1'), ‘SQL2’)));
Hành vi danh sách định tuyến này 'cân bằng tải' kết nối chỉ đọc giữa SQL3 và SQL1. Ở trên, chúng tôi có hai danh sách được nhúng trong danh sách định tuyến:
Danh sách 1:‘SQL3’, ‘SQL1’
Danh sách 2:‘SQL2’
Định tuyến đến các bản sao trong danh sách đầu tiên. SQL3 và SQL1 có thể truy cập được đối với các kết nối chỉ đọc. Kết nối chỉ đọc đến đầu tiên sẽ được chuyển đến SQL3, kết nối chỉ đọc thứ hai sẽ được chuyển đến SQL1, kết nối chỉ đọc thứ ba sẽ được chuyển đến SQL3, kết nối chỉ đọc thứ tư sẽ được chuyển đến SQL1 và như vậy, với sự phân phối 'vòng tròn' các kết nối chỉ đọc giữa hai bản sao trong danh sách đầu tiên.
Nếu bất kỳ bản sao nào không khả dụng, quá trình định tuyến sẽ tiếp tục với các bản sao còn lại trong danh sách đầu tiên. Nếu SQL3 hoặc SQL1 trở nên không thể truy cập được với các kết nối chỉ đọc, thì các kết nối chỉ đọc sẽ chỉ được chuyển đến các bản sao chỉ đọc có thể truy cập trong danh sách đầu tiên. Ví dụ:nếu SQL3 ở trạng thái không được đồng bộ hóa hoặc ALLOW_CONNECTIONS được đặt thành KHÔNG, thì tất cả các kết nối chỉ đọc sẽ được chuyển đến SQL1. Miễn là một trong các máy chủ có sẵn cho các kết nối chỉ đọc, thì KHÔNG có kết nối chỉ đọc nào sẽ được chuyển đến SQL2.
Nếu tất cả các bản sao trong danh sách đầu tiên đều không thể truy cập được, định tuyến đến các bản sao trong danh sách tiếp theo. Nếu SQL3 và SQL1 không thể truy cập vào các kết nối chỉ đọc, thì tất cả các kết nối chỉ đọc sẽ chỉ được chuyển đến danh sách các bản sao tiếp theo, trong trường hợp này là SQL2.
Tiếp tục định tuyến đến danh sách đầu tiên nếu có bất kỳ bản sao nào. Khi các bản sao thứ cấp có mức độ ưu tiên cao hơn trong danh sách có thể truy cập được đối với các kết nối chỉ đọc, các kết nối chỉ đọc trong tương lai sẽ kết nối với chúng khi thích hợp.
Trong SQL Server 2016, bạn có thể định cấu hình cân bằng tải trên một tập hợp các bản sao chỉ đọc.
Bước 5:
sys.available_read_only_routing_lists DMV, trả về danh sách định tuyến chỉ đọc của mỗi bản sao Nhóm khả dụng trong Nhóm luôn sẵn sàng.
SELECT AVGSrc.replica_server_name AS SourceReplica , AVGRepl.replica_server_name AS ReadOnlyReplica , AVGRepl.read_only_routing_url AS RoutingURL , AVGRL.routing_priority AS RoutingPriority FROM sys.availability_read_only_routing_lists AVGRL INNER JOIN sys.availability_replicas AVGSrc ON AVGRL.replica_id = AVGSrc.replica_id INNER JOIN sys.availability_replicas AVGRepl ON AVGRL.read_only_replica_id = AVGRepl.replica_id INNER JOIN sys.availability_groups AV ON AV.group_id = AVGSrc.group_id ORDER BY SourceReplica
Trong ảnh chụp màn hình sau, kết quả hiển thị URL định tuyến và mức độ ưu tiên định tuyến.
Bước 6:
Để kiểm tra định tuyến chỉ đọc bằng SQLCMD, hãy sử dụng tham số –K ReadOnly hiển thị các kết nối đọc nhận bản sao thứ cấp theo danh sách định tuyến.
Trong ảnh chụp màn hình sau, bản sao phụ đang chấp nhận các kết nối đã đọc, tức là… SQL2.
Bước 7:
Chuyển đổi dự phòng nhóm khả dụng và kiểm tra định tuyến chỉ đọc.
- Trong Object Explorer, kết nối với một phiên bản máy chủ lưu trữ bản sao thứ cấp của nhóm khả dụng cần phải được xử lý. Mở rộng cây máy chủ.
- Mở rộng nút Luôn sẵn sàng cao và nút Nhóm sẵn sàng.
- Nhấp chuột phải vào nhóm khả dụng không được vượt qua và chọn Chuyển đổi dự phòng.
Bây giờ, SQL2 trở thành bản sao chính và các kết nối được xử lý bởi SQL1.
Cú pháp chuỗi kết nối mà ứng dụng sẽ sử dụng sẽ phụ thuộc vào nhà cung cấp máy chủ SQL.
Nếu đó là .Net Framework Data Provider 4.0.2 cho SQL Server, cú pháp sẽ như sau:
Máy chủ =tcp:MyAgListener, portnumber; Cơ sở dữ liệu =SQL1; IntegratedSecurity =SSPI; ApplicationIntent =ReadOnly; MultiSubnetFailover =True
Kết luận:
Để giảm bớt khối lượng công việc, định tuyến Chỉ đọc này vẫn là lựa chọn tốt nhất. Một ứng dụng liên quan đến Dịch vụ báo cáo SQL Server được lưu trữ trong SharePoint hoặc cài đặt Chế độ gốc của Máy chủ báo cáo có thể sử dụng mục đích Chỉ đọc để tránh chặn điển hình, Sử dụng bộ nhớ và CPU trên các nút chính.