LƯU Ý:
- Cụm chuyển đổi dự phòng Windows bao gồm hai nút.
- Hai phiên bản cụm chuyển đổi dự phòng máy chủ SQL. Cấu hình này tối ưu hóa phần cứng. IN01 được ưu tiên trên Node1 và IN02 được ưu tiên trên Node2.
- Số cổng:IN01 lắng nghe trên cổng 1435 và IN02 lắng nghe trên cổng 1436.
- Tính khả dụng cao. Cả hai nút sao lưu lẫn nhau. Chuyển đổi dự phòng là tự động trong trường hợp bị lỗi.
- Chế độ số lượng là đa số Nút và Đĩa.
- Sao lưu mạng LAN tại chỗ và sao lưu định kỳ được định cấu hình bằng Veritas
Giới thiệu
Không có gì lạ khi các nhà phát triển và quản lý dự án yêu cầu một phiên bản SQL Server mới cho mọi ứng dụng hoặc dịch vụ mới. Mặc dù các công nghệ như ảo hóa và Đám mây đã giúp việc tạo ra các phiên bản mới trở nên dễ dàng, nhưng một số kỹ thuật lâu đời được tích hợp sẵn với SQL Server giúp bạn có thể đạt được thời gian quay vòng thấp khi cần cung cấp cơ sở dữ liệu mới cho dịch vụ hoặc ứng dụng mới. Trạng thái này có thể được tạo bởi một DBA, người có thể thiết kế và triển khai một cụm SQL Server lớn có khả năng hỗ trợ hầu hết các cơ sở dữ liệu SQL Server theo yêu cầu của tổ chức. Hình thức hợp nhất này có thêm những lợi thế như chi phí giấy phép thấp hơn, quản trị tốt hơn và dễ quản lý. Trong bài viết này, chúng tôi sẽ nêu bật một số cân nhắc mà chúng tôi đã có cơ hội trải nghiệm khi sử dụng phân cụm và xếp chồng như một phương tiện để hợp nhất cơ sở dữ liệu SQL Server.
Phân cụm
Windows Server Failover Clustering là một Giải pháp Khả dụng Cao rất nổi tiếng đã tồn tại qua nhiều phiên bản Windows Server và Microsoft dự định sẽ tiếp tục đầu tư và cải tiến. Các trường hợp Cụm chuyển đổi dự phòng SQL Server dựa vào WSFC. Cả Phiên bản Chuẩn và Phiên bản Doanh nghiệp của SQL Server đều hỗ trợ Phiên bản Cụm chuyển đổi Dự phòng SQL Server nhưng Phiên bản Chuẩn chỉ giới hạn ở hai nút. Việc hợp nhất cơ sở dữ liệu trên một SQL Server FCI mang lại những lợi ích như:
- HA theo Mặc định - Tất cả các cơ sở dữ liệu được triển khai trên phiên bản SQL Server được phân cụm đều có tính khả dụng cao theo mặc định! Sau khi một phiên bản nhóm được tạo, các triển khai mới sẽ được xử lý về mặt HA trước thời hạn.
- Sự dễ quản lý - Ít DBA hơn có thể dành thời gian định cấu hình, giám sát và khắc phục sự cố khi cần thiết MỘT phiên bản nhóm hỗ trợ nhiều ứng dụng. Đúng ra, việc ghi lại cá thể cũng trở nên dễ dàng hơn nhiều khi xử lý một môi trường lớn. Việc định cấu hình giải pháp Enterprise Backup để xử lý tất cả cơ sở dữ liệu trong môi trường của bạn trở nên dễ dàng hơn bởi thực tế là bạn chỉ phải thực hiện một cấu hình này khi sử dụng các phiên bản hợp nhất.
- Tuân thủ - Các yêu cầu chính như vá lỗi, và thậm chí là làm cứng có thể được thực hiện một lần với thời gian ngừng hoạt động tối thiểu trên một số lượng lớn cơ sở dữ liệu trong một nỗ lực quản trị duy nhất. Tại cửa hàng của chúng tôi, chúng tôi đã sử dụng Vận chuyển nhật ký giao dịch giữa các phiên bản nhóm tại hai trung tâm dữ liệu để đảm bảo cơ sở dữ liệu được bảo vệ khỏi rủi ro thiên tai.
- Tiêu chuẩn hoá - Việc thực thi các tiêu chuẩn như quy ước đặt tên, quản lý truy cập, Xác thực Windows, kiểm tra và quản lý dựa trên chính sách dễ dàng hơn nhiều khi chỉ xử lý một hoặc hai môi trường tùy thuộc vào quy mô cửa hàng của bạn
Liệt kê 1: Trích xuất thông tin về phiên bản của bạn
-- Extract Instance Details -- Includes a Column to Check Whether Instance is Clustered SELECT SERVERPROPERTY('MachineName') AS [MachineName] , SERVERPROPERTY('ServerName') AS [ServerName] , SERVERPROPERTY('InstanceName') AS [Instance] , SERVERPROPERTY('IsClustered') AS [IsClustered] , SERVERPROPERTY('ComputerNamePhysicalNetBIOS') AS [ComputerNamePhysicalNetBIOS] , SERVERPROPERTY('Edition') AS [Edition] , SERVERPROPERTY('ProductLevel') AS [ProductLevel] , SERVERPROPERTY('ProductVersion') AS [ProductVersion] , SERVERPROPERTY('ProcessID') AS [ProcessID] , SERVERPROPERTY('Collation') AS [Collation] , SERVERPROPERTY('IsFullTextInstalled') AS [IsFullTextInstalled] , SERVERPROPERTY('IsIntegratedSecurityOnly') AS [IsIntegratedSecurityOnly] , SERVERPROPERTY('IsHadrEnabled') AS [IsHadrEnabled] , SERVERPROPERTY('HadrManagerStatus') AS [HadrManagerStatus] , SERVERPROPERTY('IsXTPSupported') AS [IsXTPSupported];
Xếp chồng
SQL Server hỗ trợ tối đa năm mươi phiên bản đơn lẻ trên một máy chủ và tối đa 25 phiên bản cụm chuyển đổi dự phòng trên một cụm chuyển đổi dự phòng Windows Server. Các phiên bản SQL Server khác nhau có thể được xếp chồng lên nhau trên cùng một môi trường để cung cấp một môi trường mạnh mẽ sẽ hỗ trợ các ứng dụng khác nhau. Trong cấu hình như vậy, việc nâng cấp cơ sở dữ liệu có thể ở dạng chỉ đơn giản là quảng bá chúng từ một phiên bản SQL Server sang phiên bản tiếp theo trong cùng một cụm cho đến khi phần cứng cũ đi. Một lưu ý quan trọng cần lưu ý khi xếp chồng SQL Server là bạn phải cấp phát bộ nhớ cho từng phiên bản sao cho tổng dung lượng bộ nhớ được phân bổ sẽ không vượt quá bộ nhớ có sẵn trên hệ điều hành. Điểm khác theo hướng này là đảm bảo rằng tài khoản dịch vụ SQL Server cho mỗi phiên bản phải có các trang khóa trong đặc quyền bộ nhớ. Gán các trang khóa trong bộ nhớ đảm bảo rằng khi SQL Server có được bộ nhớ, Hệ điều hành sẽ không tìm cách khôi phục bộ nhớ đó khi các tiến trình khác trên máy chủ cần bộ nhớ. Thiết lập tài khoản dịch vụ SQL Server đã xác định, định cấu hình MAX_SERVER_MEMORY và xếp đặc quyền Khóa trang trong bộ nhớ là bộ ba cần thiết khi xếp chồng các phiên bản SQL Server.
Microsoft tính phí vài nghìn đô la cho mỗi cặp lõi CPU. Xếp chồng các phiên bản SQL Server cho phép bạn tận dụng mô hình cấp phép này bằng cách để các phiên bản chia sẻ cùng một bộ CPU (đổ mồ hôi tài sản). Chúng tôi đã đề cập rằng bạn có thể xếp chồng các phiên bản SQL Server khác nhau, do đó, chăm sóc các ứng dụng kế thừa vẫn đang chạy các phiên bản cũ hơn SQL Server 2016 chẳng hạn. Khi sử dụng các Phiên bản SQL Server khác nhau, bạn có thể muốn xem xét sử dụng Mối quan hệ với bộ xử lý như được mô tả bởi Glen Berry trong bài viết này. Bộ xử lý Affinity cũng có thể được sử dụng để kiểm soát cách tài nguyên CPU được chia sẻ giữa các phiên bản giống như bạn kiểm soát bộ nhớ. Xếp chồng cũng giải quyết các mối quan tâm về bảo mật cho các ứng dụng phải sử dụng tài khoản SA chẳng hạn hoặc các mối quan tâm về cấu hình cho các ứng dụng yêu cầu phiên bản chuyên dụng hoặc các tùy chọn như vậy là một đối chiếu cụ thể. Mối quan tâm về hiệu suất của TempDB được chia sẻ là một lý do khác mà bạn có thể muốn xếp chồng thay vì gộp tất cả cơ sở dữ liệu trên một phiên bản nhóm.
Cần lưu ý rằng giá trị của phân cụm như được đánh dấu trước đó còn mở rộng hơn nữa với tính năng xếp chồng. Ví dụ:khi vá một phiên bản SQL Server với một số FCI, tất cả FCI có thể được vá trong một lần.
Những điểm cần lưu ý
Khi sử dụng tính năng phân cụm, một số quy ước nhất định sẽ giúp việc quản lý và quản lý môi trường dễ dàng hơn một chút và đổ mồ hôi tài sản tốt hơn. Chúng ta sẽ đề cập ngắn gọn đến một vài trong số chúng:
- Công cụ Máy khách Hiện tại - Bạn có thể nhận thấy mình gặp lỗi bất thường khi cố gắng quản lý phiên bản SQL Server 2016 bằng SQL Server Management Studio 2012. Các lỗi không cho bạn biết cụ thể rằng vấn đề là do phiên bản công cụ máy khách. Chúng tôi thường có phiên bản SQL Server Management Studio 17.3 trên máy khách mà chúng tôi muốn sử dụng để kết nối với các phiên bản của chúng tôi.
- Quy ước đặt tên - Quy ước đặt tên giúp bạn dễ dàng biết chắc mình đang làm việc với trường hợp nào tại bất kỳ thời điểm nào. Sử dụng bí danh, bạn có thể giảm bớt gánh nặng ghi nhớ tên phiên bản dài đối với người dùng cuối, những người cần quyền truy cập vào cơ sở dữ liệu.
- Nút ưu tiên - Đặt một nút ưu tiên cho mỗi vai trò Máy chủ SQL trên Trình quản lý cụm chuyển đổi dự phòng là một ý tưởng hay, một cách tốt để đảm bảo sức mạnh xử lý của tất cả các Nút cụm của bạn đang được sử dụng. Trong cửa hàng của chúng tôi, sau khi thiết lập các nút ưu tiên, chúng tôi đã định cấu hình vai trò để không hoạt động trở lại trong khoảng từ 0500 HRS đến 0600 HRS trong trường hợp vô tình chuyển đổi dự phòng.
- Vận chuyển Nhật ký Giao dịch - Khi định cấu hình Khôi phục Thảm họa cho FCI, điều hợp lý là xác định tất cả các đường dẫn UNC bằng cách sử dụng tên ảo, không phải tên hoặc Địa chỉ IP của các nút cụm. Điều này đảm bảo rằng mọi thứ tiếp tục hoạt động bình thường nếu xảy ra chuyển đổi dự phòng. Điều rất quan trọng là phải đảm bảo rằng Tài khoản tác nhân SQL Server trên cả hai trang web có toàn quyền kiểm soát các đường dẫn này.
Liệt kê 2: Định cấu hình giám sát cho việc vận chuyển nhật ký giao dịch bằng email
-- Create Table to Store Log Shipping Data create table msdb dbo log_shipping_report (status bit, is_primary bit, server sysname, database_name sysname, time_since_last_backup int, last_backup_file nvarchar (500), backup_threshold int, is_backup_alert_enabled bit, time_since_last_copy int, last_copied_file nvarchar 500), time_since_last_restore int, last_restored_file nvarchar(500), last_restored_latency int, restore_threshold int, is_restore_alert_enabled bit); go -- Create an SQL Agent Job with the Following Script -- This will send an Email at Intervals determined by the job Schedule -- The Job Should be Created on the Log Shipping Secondary Clustered Instance -- This Job Requires that Database Mail is Enabled truncate table msdb dbo log_shipping_report go insert into msdb dbo log_shipping_report EXEC sp_help_log_shipping_monitor; go /* select [server] , database_name [database] , time_since_last_copy [Last Copy Time] , last_copied_file [Last Copied File] , time_since_last_restore [Last Restore Time] , last_restored_file [Last Restored File] , restore_threshold [Restore Threshold] , restore_threshold - time_since_last_restore [Restore Latency] from msdb.dbo.log_shipping_report; go */ DECLARE @tableHTML NVARCHAR(MAX) ; DECLARE @SecServer SYSNAME ; SET @SecServer = @@SERVERNAME SET @tableHTML = N'<H1><font face="Verdana" size="4">Transaction Logshipping Status from Secondary Server ' + @SecServer + N'</H1>' + N'<p style="margin-top: 0; margin-bottom: 0"><font face="Verdana" size="2">Please find below status of Secondary databases: </font></p> ' + N'<table border="1" style="BORDER-COLLAPSE: collapse" borderColor="#111111" cellPadding="0" width="2000" bgColor="#ffffff" borderColorLight="#000000" border="1"><font face="Verdana" size="2">' + N'<tr><th><font face="Verdana" size="2">Secondary Server</th> <th><font face="Verdana" size="2">Secondary Database</th> <th><font face="Verdana" size="2">Last Copy Time</th>' + N'<th><font face="Verdana" size="2">Last Copied File</th><th> <font face="Verdana" size="2">Last Restore Time</th>' + N'<th><font face="Verdana" size="2">Last Restored File</th><th> <font face="Verdana" size="2">Restore Threshold</th> <th><font face="Verdana" size="2">Restore Latency</th>' + CAST ( ( SELECT td = lsr.server, '', td = lsr [database_name], td = lsr time_since_last_copy '', td = lsr last_copied_file td = lsr time_since_last_restore '', td = lsr last_restored_file, '', td = lsr restore_threshold '', td = case when lsr restore_threshold lsr time_since_last_restore < 0 then + '<td bgcolor="#FFCC99"><b><font face="Verdana" size="1">' + 'CRITICAL' + '</font></b></td>' when lsr restore_threshold lsr time_since_last_restore < 20 and lsr restore_threshold lsr time_since_last_restore > 0 then + '<td bgcolor="#FFBB33"><b><font face="Verdana size="1">' + 'WARNING' + '</font></b></td>' when lsr restore_threshold lsr time_since_last_restore > 20 then + '<td bgcolor="#21B63F"><b><font face="Verdana size="1">' + 'OK' + '</font></b></td>' end , '' FROM msdb dbo log_shipping_report as lsr ORDER BY lsr.[database_name] FOR XML PATH('tr'), TYPE ) AS NVARCHAR(MAX) ) + N'</table>' + ' '; EXEC msdb dbo.sp_send_dbmail @recipients='[email protected]', @copy_recipients='[email protected]', @subject = 'Transaction Log Shipping Report', @body = @tableHTML, @body_format = 'HTML' ;
Ổ đĩa
Một tác dụng phụ của việc xếp chồng phiên bản SQL Server và cung cấp cho một số cơ sở dữ liệu là xu hướng hết ký tự ổ đĩa. Chúng tôi đã khắc phục sự cố này bằng cách định cấu hình Điểm gắn kết khối lượng. Mỗi đĩa được gán cho một vai trò cụm được cấu hình như một điểm gắn kết với ký tự ổ đĩa chỉ cần thiết cho một hoặc hai ổ đĩa cho mỗi phiên bản. Một điểm quan trọng cần lưu ý khi sử dụng điểm gắn kết khối lượng trên một cụm là trong tương lai khi bạn cần thêm nhiều điểm gắn kết hơn để thực hiện các nhiệm vụ bảo trì tương tự, bạn sẽ cần đặt CẢ ổ đĩa chính sở hữu ký tự ổ đĩa và điểm gắn kết. điểm trong chế độ bảo trì trên cụm.
Trong trường hợp của chúng tôi, chúng tôi đã tìm thấy tên của từng Điểm gắn kết khối lượng dựa trên Vai trò cụm mà nó được chỉ định. Với rất nhiều ổ đĩa cần xử lý, bạn chắc chắn sẽ cần phải tìm ra cách để cả bạn và Quản trị viên lưu trữ xác định một đĩa duy nhất để ví dụ, việc duy trì các đĩa ở mức lưu trữ sẽ không gặp nhiều rắc rối.
Liệt kê 3: Giám sát mức sử dụng dung lượng đĩa khi sử dụng điểm gắn ổ đĩa
-- The Following Script Will Show Disk Space Usage from Within SQL Server -- It is Especially Helpful When Using Volume Mount Points -- Volume Mount Point Space Usage Can Also Be Monitored from Computer Management (OS Level) SELECT DISTINCT vs volume_mount_point , vs file_system_type , vs logical_volume_name , CONVERT(DECIMAL!18 2 vs total_bytes 1073741824.0) AS [Total Size (GB)] , CONVERT(DECIMAL(18 2 vs available_bytes 1073741824.0' AS [Available Size (GB)] , CAST(CAST(vs available_bytes AS FLOAT)/ CAST(vs total_bytes AS FLOAT) AS DECIMAL (18,2)) * 100 AS [Space Free %] FROM sys.master_files AS f WITH (NOLOCK) CROSS APPLY sys.dm_os_volume_stats f database_id, f [file_id]i AS vs OPTION (RECOMPILE);
Triển khai cơ sở dữ liệu
Trong trường hợp của chúng tôi, chiến lược của chúng tôi là đảm bảo các cơ sở dữ liệu mới tuân theo tiêu chuẩn của chúng tôi. Các cơ sở dữ liệu cũ hơn đã được xử lý cẩn thận hơn một chút vì chúng tôi sắp xếp hợp nhất và nâng cấp cùng một lúc. Hỗ trợ di chuyển cơ sở dữ liệu đã giúp cho chúng tôi biết cơ sở dữ liệu nào chắc chắn sẽ không tương thích với phiên bản SQL Server 2016 linh thiêng của chúng tôi và chúng tôi đã để chúng yên tâm (một số có mức độ tương thích thấp tới 100). Mỗi cơ sở dữ liệu được triển khai phải có khối lượng riêng cho dữ liệu và tệp nhật ký tùy thuộc vào kích thước của nó. Sử dụng các khối lượng riêng biệt cho mỗi cơ sở dữ liệu là một bước nữa để có một môi trường được tổ chức rất tốt, điều quan trọng là xem xét sự phức tạp tiềm ẩn của môi trường hợp nhất này. Câu lệnh cuối cùng cũng ngụ ý rằng khi bạn cho phép một ứng dụng tạo cơ sở dữ liệu của riêng nó, bạn phải DBA định vị lại các tệp dữ liệu sau khi triển khai xong vì ứng dụng sẽ sử dụng cùng các vị trí tệp được cơ sở dữ liệu mô hình sử dụng.
Liệt kê 4: Định vị lại cơ sở dữ liệu người dùng
-- 1. Set the database offline -- Be sure to replace DB_NAME with the actual database name ALTER DATABASE DB_NAME SET OFFLINE -- 2. Move the file or files to the new location. -- This means actually copying the datafiles at OS level -- You may also need grant the SQL Server Service account full permissions on the data file -- 3. For each file moved, run the following statement. ALTER DATABASE DB_NAME MODIFY FILE ( NAME = logical_name FILENAME = 'new_path\os_file_name') -- 4. Bring the database back online ALTER DATABASE database name SET ONLINE -- 5. Verify the file change: SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'DB_NAME');
Quản lý truy cập
Bạn sẽ đồng ý rằng trong môi trường hợp nhất của chúng tôi, cuối cùng chúng tôi có thể có một danh sách rất dài các đối tượng Cấp máy chủ chẳng hạn như thông tin đăng nhập. Sử dụng Windows Groups sẽ giúp rút ngắn danh sách này và đơn giản hóa Quản lý truy cập trên mỗi phiên bản nhóm. Thông thường, bạn sẽ cần các nhóm được tạo trên Active Directory cho Quản trị viên ứng dụng cần quyền truy cập, Tài khoản dịch vụ ứng dụng, người dùng doanh nghiệp cần kéo báo cáo và tất nhiên là Quản trị viên cơ sở dữ liệu. Một lợi ích chính của việc sử dụng Windows Groups là quyền truy cập có thể được cấp hoặc thu hồi chỉ bằng cách quản lý tư cách thành viên của các nhóm này ngay trong Active Directory.
Bây giờ có lẽ rõ ràng là lợi ích này trong lĩnh vực Quản lý truy cập chỉ có thể thực hiện được với Xác thực Windows. Thông tin đăng nhập SQL Server không thể được quản lý theo nhóm.
Liệt kê 5: Thông tin đăng nhập phiên bản, Người dùng cơ sở dữ liệu và vai trò của họ
create table #userlist ( [Server Name] varchar(20) ,[Database Name] varchar(50) ,[Database User] varchar(50) , [Database Role] varchar(50) , [Instance Login] varchar(50) , [Status] varchar(15) ) go insert into #userlist exec sp_MSforeachdb @command1 =' USE [?] IF ''?'' NOT IN ("tempdb","model"J"msdb"J"master") BEGIN select @@servername as instance_name , ''?'' as database_name , rp.name as database_user , mp.name as database_role , sp.name as instance_login , case when sp.is_disabled = 1 then ''Disabled'' when sp.is_disabled = 0 then ''Enabled'' end [login_status] from sys.database_principals rp left outer join sys.database_role_members drm on (drm.member_principal_id = rp.principal_id) left outer join sys.database_principals mp on (drm.role_principal_id = mp.principal_id) left outer join sys.server_principals sp on (rp.sid=sp.sid) where rp.type_desc in (''WINDOWS_GROUP'',''WINDOWS_USER'',''SQL_USER'') END' go select * from #userlist go drop table #userlist
Kết luận
Chúng tôi đã kiểm tra ở mức độ rất cao những lợi ích có thể đạt được bằng cách phân cụm và xếp chồng các phiên bản SQL Server như một phương tiện để đạt được sự hợp nhất, tối ưu hóa chi phí và dễ quản lý. Nếu bạn thấy mình có khả năng mua phần cứng lớn, bạn có thể khám phá tùy chọn này và gặt hái những lợi ích mà chúng tôi đã mô tả ở trên.