Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengonsolidasikan Instance SQL Server dengan Pengelompokan dan Penumpukan

CATATAN:

  • Pengelompokan Failover Windows yang terdiri dari dua node.
  • Dua Instance Failover Cluster SQL Server. Konfigurasi ini mengoptimalkan perangkat keras. IN01 lebih disukai di Node1 dan IN02 lebih disukai di Node2.
  • Nomor Port:IN01 mendengarkan pada port 1435 dan IN02 mendengarkan pada port 1436.
  • Ketersediaan Tinggi. Kedua node saling mendukung. Failover otomatis jika terjadi kegagalan.
  • Mode Kuorum adalah mayoritas Node dan Disk.
  • LAN cadangan tersedia dan pencadangan rutin dikonfigurasi menggunakan Veritas

Pengantar

Tidak jarang ada pengembang dan manajer proyek yang menuntut contoh baru SQL Server untuk setiap aplikasi atau layanan baru. Sementara teknologi seperti virtualisasi dan Cloud telah membuat pemintalan instans baru menjadi mudah, beberapa teknik kuno yang terintegrasi dengan SQL Server memungkinkan untuk mencapai waktu penyelesaian yang rendah ketika ada kebutuhan untuk menyediakan database baru untuk layanan atau aplikasi baru. Keadaan ini dapat dibuat oleh DBA yang dapat merancang dan menyebarkan cluster SQL Server besar yang mampu mendukung sebagian besar database SQL Server yang diperlukan oleh organisasi. Ada keuntungan tambahan dari konsolidasi semacam ini seperti biaya lisensi yang lebih rendah, tata kelola yang lebih baik, dan kemudahan administrasi. Dalam artikel ini, kami akan menyoroti beberapa pertimbangan yang telah kami alami saat menggunakan pengelompokan dan penumpukan sebagai sarana untuk mengkonsolidasikan database SQL Server.

Pengelompokan

Windows Server Failover Clustering adalah Solusi Ketersediaan Tinggi yang sangat terkenal yang telah bertahan dari banyak versi Windows Server dan yang ingin terus diinvestasikan dan ditingkatkan oleh Microsoft. Instans SQL Server Failover Cluster mengandalkan WSFC. SQL Server Edisi Standar dan Perusahaan mendukung Instans Cluster Failover SQL Server tetapi Edisi Standar terbatas hanya pada dua node. Mengkonsolidasikan database pada satu SQL Server FCI memberikan manfaat seperti:

  • HA Secara Default — Semua database yang digunakan pada instance SQL Server berkerumun sangat tersedia secara default! Setelah instance cluster dibuat, penerapan baru akan ditangani dalam hal HA sebelumnya.
  • Kemudahan Administrasi – Lebih sedikit DBA yang dapat menghabiskan waktu untuk mengonfigurasi, memantau, dan bila perlu memecahkan masalah SATU instans berkerumun yang mendukung banyak aplikasi. Benar, mendokumentasikan contoh juga menjadi lebih mudah ketika berhadapan dengan satu lingkungan yang besar. Mengonfigurasi solusi Pencadangan Perusahaan untuk menangani semua database di lingkungan Anda menjadi lebih mudah karena Anda harus melakukan konfigurasi ini hanya satu kali saat menggunakan instans gabungan.
  • Kepatuhan – Persyaratan utama seperti patching, dan bahkan hardening dapat dilakukan sekali dengan waktu henti minimal pada sejumlah besar database dalam satu upaya administratif. Di toko kami, kami telah menggunakan Pengiriman Log Transaksi antara instance yang dikelompokkan di dua pusat data untuk memastikan database terlindungi dari risiko bencana.
  • Standarisasi – Menegakkan standar seperti konvensi penamaan, manajemen akses, Otentikasi Windows, audit dan manajemen berbasis kebijakan jauh lebih mudah ketika berhadapan dengan hanya satu atau dua lingkungan tergantung pada ukuran toko Anda

Cantuman 1: Ekstrak Informasi Tentang Instans Anda

-- 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];

Menumpukan

SQL Server mendukung hingga lima puluh instans tunggal pada satu server dan hingga 25 Instans Failover Cluster pada Cluster Failover Server Windows. Versi SQL Server yang berbeda dapat ditumpuk pada lingkungan yang sama untuk menyediakan lingkungan yang kuat yang akan mendukung aplikasi yang berbeda. Dalam konfigurasi seperti itu, memutakhirkan basis data dapat berupa hanya mempromosikannya dari satu contoh SQL Server ke versi berikutnya dalam kluster yang sama hingga usia perangkat keras. Salah satu pertimbangan utama yang perlu diingat saat menyusun SQL Server adalah Anda harus mengalokasikan memori ke setiap instance sedemikian rupa sehingga jumlah total memori yang dialokasikan tidak akan melebihi memori yang tersedia di sistem operasi. Poin lain dalam arah ini adalah untuk memastikan bahwa akun layanan SQL Server untuk setiap instance harus memiliki halaman kunci dalam hak memori. Menetapkan Halaman Kunci di Memori memastikan bahwa ketika SQL Server memperoleh memori, Sistem Operasi tidak mencoba untuk memulihkan memori tersebut ketika proses lain di server membutuhkan memori. Menyiapkan akun layanan SQL Server yang ditentukan, mengonfigurasi MAX_SERVER_MEMORY, dan membuat hak istimewa Lock Pages in Memory adalah trio penting saat menumpuk instance SQL Server.

Microsoft mengenakan biaya beberapa ribu dolar per pasang inti CPU. Penumpukan instans SQL Server memungkinkan Anda memanfaatkan model lisensi ini dengan membuat instans berbagi set CPU yang sama (memperberat aset). Kami telah menyebutkan bahwa Anda dapat menumpuk versi SQL Server yang berbeda sehingga menangani aplikasi lawas yang masih menjalankan versi yang lebih lama dari SQL Server 2016 misalnya. Saat menggunakan Edisi SQL Server yang berbeda, Anda mungkin ingin mempertimbangkan untuk menggunakan Afinitas Prosesor seperti yang dijelaskan oleh Glen Berry dalam artikel ini. Afinitas Prosesor juga dapat digunakan untuk mengontrol bagaimana sumber daya CPU dibagikan di antara instans seperti halnya Anda mengontrol memori. Penumpukan juga membahas masalah keamanan untuk aplikasi yang harus menggunakan akun SA misalnya atau masalah konfigurasi untuk aplikasi yang memerlukan instans khusus, atau opsi semacam itu adalah pemeriksaan khusus. Kekhawatiran tentang kinerja TempDB bersama adalah alasan lain Anda mungkin ingin menumpuk daripada menggabungkan semua database pada satu instance yang dikelompokkan.

Perlu dicatat bahwa nilai pengelompokan seperti yang disorot sebelumnya meluas lebih jauh dengan penumpukan. Misalnya, saat menambal instans SQL Server dengan beberapa FCI, semua FCI dapat ditambal sekaligus.

Petunjuk untuk Dicatat

Saat menggunakan pengelompokan, konvensi tertentu akan membuat pengelolaan dan pengelolaan lingkungan sedikit lebih mudah dan menguras aset dengan lebih baik. Kami akan membahas beberapa di antaranya secara singkat:

  • Alat Klien Saat Ini — Anda mungkin mendapati diri Anda mendapatkan kesalahan yang tidak biasa saat mencoba mengelola instans SQL Server 2016 menggunakan SQL Server Management Studio 2012. Kesalahan tidak secara khusus memberi tahu Anda bahwa masalahnya adalah versi alat klien. Kami biasanya memiliki instans SQL Server Management Studio 17.3 pada klien yang ingin kami gunakan untuk terhubung ke instans kami.
  • Konvensi Penamaan — Konvensi penamaan memudahkan Anda untuk memastikan instance mana yang sedang Anda kerjakan kapan saja. Dengan menggunakan alias, Anda dapat lebih mengurangi beban mengingat nama instance yang panjang pada pengguna akhir yang membutuhkan akses ke database.
  • Node Pilihan – Mengatur node pilihan untuk setiap peran SQL Server di Failover Cluster Manager adalah ide yang bagus, cara yang baik untuk memastikan kekuatan pemrosesan semua Cluster Node Anda digunakan. Di toko kami, setelah menyiapkan node pilihan, kami mengonfigurasi peran untuk melakukan failback antara 0500 HRS dan 0600 HRS jika ada failover yang tidak disengaja.
  • Pengiriman Log Transaksi – Saat mengonfigurasi Pemulihan Bencana untuk FCI, masuk akal untuk mengidentifikasi semua jalur UNC menggunakan nama virtual, bukan nama atau Alamat IP Cluster Nodes. Ini memastikan bahwa segala sesuatunya terus berfungsi dengan baik jika terjadi kegagalan. Juga sangat penting untuk memastikan bahwa Akun Agen Server SQL di kedua situs memiliki kontrol penuh pada jalur ini.

Cantuman 2: Konfigurasikan Pemantauan untuk Pengiriman Log Transaksi Menggunakan 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> &nbsp;' +
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>' + '&nbsp';

EXEC msdb dbo.sp_send_dbmail
@recipients='[email protected]',
@copy_recipients='[email protected]',
@subject = 'Transaction Log Shipping Report',
@body = @tableHTML,
@body_format = 'HTML' ;

Disk Drive

Salah satu efek samping dari penumpukan contoh SQL Server dan membuat ketentuan untuk beberapa database adalah kecenderungan untuk kehabisan huruf drive. Kami mengatasi masalah ini dengan mengonfigurasi Volume Mount Points. Setiap disk yang ditetapkan ke peran cluster dikonfigurasi sebagai titik pemasangan dengan huruf kandar yang hanya diperlukan untuk satu atau dua kandar per instans. Poin penting yang perlu diperhatikan saat menggunakan titik pemasangan volume pada sebuah cluster adalah bahwa di masa mendatang ketika Anda perlu menambahkan lebih banyak titik pemasangan untuk melakukan tugas pemeliharaan serupa, Anda perlu menempatkan KEDUA drive utama yang memiliki huruf drive dan dudukan titik dalam mode pemeliharaan pada cluster.

Dalam kasus kami, kami menemukan nama setiap Volume Mount Point berdasarkan Peran Cluster yang ditugaskan. Dengan begitu banyak drive yang harus ditangani, Anda pasti perlu mencari cara bagi Anda dan Administrator Penyimpanan untuk mengidentifikasi disk yang unik sehingga mempertahankan disk pada tingkat penyimpanan, misalnya, tidak akan merepotkan.

Daftar 3 Pantau Penggunaan Ruang Disk Saat Menggunakan Volume Mount Points

-- 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);

Penerapan Basis Data

Dalam kasus kami, strategi kami adalah memastikan database baru mengikuti standar kami. Basis data yang lebih lama ditangani dengan sedikit lebih hati-hati karena kami melakukan semacam konsolidasi dan peningkatan pada saat yang bersamaan. Asisten Migrasi Basis Data membantu memberi tahu kami basis data mana yang pasti tidak akan kompatibel dengan contoh SQL Server 2016 kami dan kami membiarkannya dengan tenang (beberapa dengan tingkat kompatibilitas serendah 100). Setiap database yang digunakan harus memiliki volume sendiri untuk data dan file log tergantung pada ukurannya. Menggunakan volume terpisah untuk setiap database adalah langkah lain untuk memiliki lingkungan yang sangat terorganisir dengan baik yang penting mengingat potensi kompleksitas lingkungan konsolidasi ini. Pernyataan terakhir juga menyiratkan bahwa ketika Anda mengizinkan aplikasi untuk membuat databasenya sendiri, Anda sebagai DBA harus memindahkan file data setelah penerapan selesai karena aplikasi akan menggunakan lokasi file yang sama yang digunakan oleh database model.

Cantuman 4: Merelokasi Basis Data Pengguna

-- 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');

Manajemen Akses

Anda akan setuju bahwa dalam lingkungan konsolidasi kita, kita dapat memiliki daftar objek Tingkat Server yang sangat panjang seperti login. Menggunakan Grup Windows akan membantu mempersingkat daftar ini dan menyederhanakan Manajemen Akses pada setiap instance yang dikelompokkan. Biasanya, Anda akan memerlukan grup yang dibuat di Active Directory untuk Admin Aplikasi yang membutuhkan akses, Akun Layanan Aplikasi, pengguna bisnis yang perlu menarik laporan, dan tentu saja Administrator Basis Data. Salah satu manfaat utama menggunakan Grup Windows adalah bahwa akses dapat diberikan atau dicabut hanya dengan mengelola keanggotaan grup ini langsung di Active Directory.

Mungkin sudah jelas sekarang bahwa manfaat di bidang Manajemen Akses ini hanya dimungkinkan dengan Otentikasi Windows. Login SQL Server tidak dapat dikelola dalam grup.

Cantuman 5: Instance Login, Pengguna Basis Data, dan Perannya

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

Kesimpulan

Kami telah memeriksa pada tingkat yang sangat tinggi manfaat yang dapat diperoleh dengan mengelompokkan dan menumpuk instans SQL Server sebagai sarana untuk mencapai konsolidasi, pengoptimalan biaya, dan kemudahan pengelolaan. Jika Anda merasa mampu membeli perangkat keras besar, Anda dapat menjelajahi opsi ini dan menuai manfaat yang telah kami jelaskan di atas.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah ada alat gratis untuk menghasilkan skrip 'INSERT INTO' di MS SQL Server?

  2. Cara Mengganti Semua Kemunculan String dengan String lain di SQL Server – REPLACE ()

  3. Parsing JSON di TSQL

  4. Cara menggunakan klausa Where dalam Select Statement di SQL Server - Tutorial SQL Server / TSQL Bagian 109

  5. Gunakan XEvent Profiler untuk menangkap kueri di SQL Server