Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability

Η Microsoft μας παρέχει τη δυνατότητα να κάνουμε Replicate τις βάσεις δεδομένων μας σαν ένα Group σε έως οκτώ Secondary Nodes(servers) ως μία λύση για High Availability, Disaster Recovery ή και για ανάγνωση χωρίς να απασχολείται το Primary Node. Η τεχνολογία αυτή ονομάζεται Always On Availability Group. O συγχρονισμός γίνεται είτε συγχρόνα για High-Availability είτε ασύχρονα για Disaster Recovery. Ανάλογα την έκδοση που έχουμε έχουμε διαφορετικές δυνατότητες.

Σε αυτό το άρθρο θα δούμε βήμα βήμα πώς κάνουμε μία εγκατάσταση Always On Availability Group και πως μπορούμε να το κάνουμε monitor.

Αναλυτικά το τι είναι ένα Always On Availability Group και τι δυνατότητες μας παρέχει μπορούμε να το διαβάσουμε άρθρο εδώ.

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
docs.microsoft.com

Προαπαιτούμενα

Πριν ξεκινήσουμε θα πρέπει να έχουμε κάνει τις παρακάτω ενέργειες:

  • Τα Node μας να έχουν κάνει join σε Active Directory Domain.
  • Να έχει γίνει εγκατάσταση του SQL Server και στα δύο Nodes με τον χρήστη που “σηκώνει” το Service του να είναι είτε Active Directory User είτε Managed Service Account και να είναι κοινός και στα δύο. Το πώς κάνουμε σωστά μία εγκατάσταση μπορούμε να το δούμε στο άρθρο εδώ.
  • Να έχουν επικοινωνία μεταξύ τους και ότι δεν μας κόβει κάποιο Firewall των Windows ή δικτυακό.

Η εγκατάσταση

Δημιουργία του Failover Cluster

Για αρχή πάμε στον Server Manager των Windows Server και στα δύο Nodes και επιλέγουμε Add roles and features:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
01

Στη συνέχεια πάμε στην καρτέλα Features και επιλέγουμε το Failover Clustering:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
02

Αφού γίνει η εγκατάσταση και η επανεκκίνηση και στα δύο Nodes πάμε πάλι στον Server Manager σε ένα από αυτά και επιλέγουμε Tools, Failover Cluster Manager:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
03

Όταν μας ανοίξει τον Failover Cluster Manager επιλέγουμε Validate Configuration:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
04

Στη συνέχεια προσθέτουμε το όνομα του κάθε Node που θέλουμε να ανήκει στο Cluster:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
05

Έπειτα επιλέγουμε να κάνει Validate με όλα τα test:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
06

Ενδέχεται να μας εμφανίσει warning καθώς στο παράδειγμα κάνουμε χρήση μόνο ενός δικτύου. Αφού δούμε στο report ότι δεν έχουμε κάποιο άλλο σημαντικό πρόβλημα επιλέγουμε Create the cluster now using the validated nodes… και Finish:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
07

Μετά από λίγο θα μας ανοίξει τον Create Cluster Wizard εκεί θα ορίσουμε ένα όνομα στο Cluster μας και την IP του Cluster που θα πρέπει να ανήκει στο ίδιο subnet:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
08

Δημιουργία του Cluster Quorum

Αφού δημιουργηθεί το Cluster θα πρέπει να ορίσουμε έναν Witness στο Quorum που αυτό μπορεί να είναι είτε ένα file share, είτε ένας shared δίσκος είτε ένα Azure Storage Account.

Η δουλειά του Witness είναι να επικοινωνεί και με τα δύο sites και σε περίπτωση που κάποιο παρουσιάζει βλάβη ή χαθεί η επικοινωνία μεταξύ τους, να ψηφίζει για την υγεία του Cluster ώστε να συνεχίσει να είναι up and running.

Οπότε λοιπόν πάμε πάλι στον Failover Cluster Manager, επιλέγουμε More Actions και Configure Cluster Quorum Settings…:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
09

Στο παράδειγμα θα κάνουμε χρήση file share witness:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
10

Θα χρειαστούμε έναν κοινόχρηστο φάκελο που να είναι προσβάσιμος από το Cluster και όλα τα Nodes του.

Για το παράδειγμα επέλεξα να φτιάξω έναν φάκελο στον server που φιλοξενεί τον Active Directory Controller.

Επιλέγουμε δεξί κλικ στον φάκελο, Advanced Sharing…, Permissions, Add, Object Types (Computers), Location (το domain), ψάχνουμε τα Nodes και τα προσθέτουμε με Allow Full Control:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
11

Το ίδιο κάνουμε και στην καρτέλα security και προσθέτουμε το όνομα του Cluster:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
12

Στη συνέχεια στο wizard του Cluster Quorum ορίζουμε το path με το file share και επιλέγουμε Next μέχρι να ολοκληρωθεί η δημιουργία του:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
13

Αφού ολοκληρωθεί η δημιουργία του Witness γυρνάμε στον Failover Cluster Manager να βεβαιωθούμε ότι δεν μας έχει εμφανίσει κάποιο πρόβλημα:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
14

Δημιουργία του Always On Availability Group

Πάμε στον SQL Server Configuration Manager και στα δύο Nodes και επιλέγουμε SQL Server Services, δεξί κλικ στο service του SQL Server και Properties. Εκεί θα πρέπει στην καρτέλα Always On Availability Group να επιλέξουμε το Enable Always On Availability Groups. Σε περίπτωση που δεν έχουμε αλλάξει ακόμα τον χρήστη που σηκώνει το service από το default των Windows σε χρήστη ή managed service του Active Directory θα πρέπει να το κάνουμε τώρα στην καρτέλα Log On (στο παράδειγμα έχω ορίσει managed service με όνομα DATAPLATFORM\sqlservice σε όλα τα nodes καθώς πρέπει να είναι κοινό):

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
15

Έπειτα πάλι στο SQL Server Configuration Manager επιλέγουμε SQL Server Network Configuration, Protocols for MSSQLSERVER, δεξί κλικ στο TCP/IP και Enabled Yes:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
16

Για την δημιουργία του Availability Group τώρα συνδεόμαστε με SQL Server Management Studio από το Primary Node (προαιρετικά), πατάμε δεξί κλικ Στο Always On High Availability , Availability Groups και New Availability Group Wizard…:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
17

Στον wizard που θα μας εμφανιστεί ορίζουμε το όνομα του Availability Group και επιλέγουμε το Database Level Health Detection (το Cluster type πρέπει να είναι το Windows Server Failover Cluster):

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
18

Διαλέγουμε τις βάσεις που θέλουμε να κάνουμε Replicate, αν έχουμε Enterprise Edition μπορούμε να επιλέξουμε πάνω από μία στο ίδιο group:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
19

Έπειτα στην καρτέλα Replicas προσθέτουμε και το δεύτερο Node με την επιλογή Add Replica… .Σε αυτή την καρτέλα μπορούμε να επιλέξουμε αν θα κάνει automatic failover, αν θα είναι το replication σύγχρονο ή ασύχρονο και αν το Secondary θα μπορεί είναι προσβάσιμο για ανάγνωση (ανάλογα με την έκδοση):

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
20

Στην καρτέλα Backup Preferences (ανάλογα με την έκδοση) μπορούμε να ορίσουμε αν θέλουμε να παίρνει η βάση μας τα backup στην Secondary αντί για Primary και με τι προτεραιότητα:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
21

Στην καρτέλα Listener δημιουργούμε τον listener με τον οποίο μπορούμε να συνδεόμαστε με ένα κοινό DNS ή IP στο οποιοδήποτε Node αναλόγος ποιο είναι Primary (active) αυτή την στιγμή ή αν θέλουμε Read-Only access. Επιλέγουμε το όνομα, πόρτα, ως Network Mode Static IP και κάνουμε Add… μια συγκεκριμένη IP που ανήκει στο subnet:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
22

Στην καρτέλα Read-Only Routing σε περίπτωση που θέλουμε να έχουμε Read-Only access σε Secondary ορίζουμε τα URL που θα είναι προσβάσιμα και ως Read-Only Routing List την σειρά που θα μας δρομολογήσει για να Read-Only intent ανάλογα με το Instance που έχουμε συνδεθεί:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
23

Στην επόμενη καρτέλα ορίζουμε τον τρόπο που θα μεταφερθεί η βάση στην Secondary. Έχουμε την επιλογή για Automatic Seeding αν τα paths είναι ίδια χωρίς να χρειάζεται να κάνουμε τίποτε άλλο, την επιλογή Full που θα ορίσουμε file share paths σε οποία θα τοποθετηθούν τα backup και την επιλογή Join only που είναι για τις περιπτώσεις που έχουμε κάνει μεταφορά και restore την βάση μόνοι μας δίχως όμως να την έχουμε κάνει recovery(δηλαδή να μην είναι ακόμα προσβάσιμη):

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
24

Αν πάνε όλα καλά θα έχουμε σε όλα τα Results Success:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
25

Τώρα αν πάμε στο SQL Server Management Studio και κάνουμε διπλό κλικ στο Always On High Availability, διπλό κλικ στο Availability Groups, δεξί κλικ στο όνομα του Availability Group Show Dashboard θα δούμε ότι έχει φτιαχτεί το Availability Group και είναι healthy:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
26

Τις πληροφορίες αυτές μπορούμε να τις δούμε και με T-SQL με το παρακάτω query:

SELECT ag.name AS [AG_Name], ar.replica_server_name AS [ReplicaServerName], ar.availability_mode_desc AS [AvailabilityMode], adc.[database_name], 
       hars.role_desc as [Role],  drs.synchronization_state_desc as [SynchronizationState], drs.is_commit_participant as [IsCommit], 
	   drs.synchronization_health_desc as [SyncHealth],drs.database_state_desc as [DatabaseState],
	   drs.last_commit_time as [Last Commit Update Time]
FROM sys.dm_hadr_database_replica_states AS drs WITH (NOLOCK)
INNER JOIN sys.availability_databases_cluster AS adc WITH (NOLOCK)
ON drs.group_id = adc.group_id 
AND drs.group_database_id = adc.group_database_id
INNER JOIN sys.availability_groups AS ag WITH (NOLOCK)
ON ag.group_id = drs.group_id
INNER JOIN sys.availability_replicas AS ar WITH (NOLOCK)
ON drs.group_id = ar.group_id 
AND drs.replica_id = ar.replica_id
INNER JOIN sys.dm_hadr_availability_replica_states hars 
ON drs.replica_id = hars.replica_id 
where 1=1
ORDER BY ag.name, ar.replica_server_name, adc.[database_name] OPTION (RECOMPILE);
Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
27

Τι γίνεται σε περίπτωση που πέσει το Primary Node αν έχουμε επιλέξει Automatic Failover;

Αν για κάποιο λόγο πέσει το Primary node θα δούμε στο Dashboard ότι έχει γίνει Primary το Secondary node και η βάση στο πρωήν Primary είναι σε Not Synchronizing State:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
28
Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
29

Αν επαναφέρουμε το Node μετά από λίγο θα δούμε ότι το Availability group είναι Healthy, το δεύτερο Node παραμένει ως Primary αλλά η βάση στο πρώτο Node έχει επανέλθει ως Synchronized.

Σε περίπτωση που θέλουμε να γυρίσουμε το πρώτο Node ως Primary επιλέγουμε το Start Failover Wizard (ποτέ δεν κάνουμε failover μέσα από τον Failover Cluster Manager των Windows Server) :

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
30

Πώς συνδεόμαστε με τον Listener σε Secondary μόνο για ανάγνωση

Για να συνδεθούμε με τον Listener μέσω SQL Server Management Studio απλά βάζουμε στο Server name το DNS ή την IP του. Για να δηλώσουμε ότι θέλουμε όμως να συνδεθούμε για Read-Only θα πρέπει να επιλέξουμε την επιλογή Options:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
31

Και στην καρτέλα Additional Connection Parameters να δηλώσουμε ApplicationIntent=ReadOnly. Έτσι τα select queries που θα εκτελούμε σε αυτό το session θα εκτελούνται κατά προτεραιότητα σε Secondary:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
32

Πώς δημιουργούμε καινούργια logins

Δεν πρέπει να ξεχνάμε ότι καινούργια logins και jobs δεν μεταφέρονται στο Secondary αυτόματα, οπότε θα πρέπει είτε να έχουμε κάποιο SSIS package σε Job που θα τα δημιουργεί είτε να τα δημιουργούμε εμείς με το χέρι.

Για να μεταφερθεί σωστά ένα login αφού το έχουμε φτιάξει στο Primary, τρέχουμε το παρακάτω query στο Primary βάζοντας στο where το όνομα του login που φτιάξαμε ώστε να μας δημιουργήσει το DDL script:

SELECT N'CREATE LOGIN ['+sp.[name]+'] WITH PASSWORD=0x'+
    CONVERT(nvarchar(max), l.password_hash, 2)+N' HASHED, '+
    N'SID=0x'+CONVERT(nvarchar(max), sp.[sid], 2)+N';',
	N'ALTER LOGIN ['+sp.[name]+'] WITH PASSWORD=0x'+CONVERT(nvarchar(max), l.password_hash, 2)+N' HASHED UNLOCK ,CHECK_POLICY=OFF;'
FROM master.sys.server_principals AS sp
INNER JOIN master.sys.sql_logins AS l ON sp.[sid]=l.[sid]
WHERE sp.name = 'test';  -- Το αλλάζουμε ανάλογα με το όνομα του χρήστη που θέλουμε να μεταφέρουμε

Αφού το τρέξουμε επιλέγουμε την στήλη με το αποτέλεσμα και τρέχουμε το DDL στο Secondary για να δημιουργηθεί και εκεί σωστά το login:

Πώς κάνουμε εγκατάσταση ένα SQL Server Always On Availability Group για High Availability
33

Bonus Script (Για Backup / Index Maintenance / Database Integrity Check SQL Server Agent Jobs)

Με το παρακάτω script που έχω φτιάξει, με μόνο ένα κλικ, κάνει εγκατάσταση το MaintenanceSolution του Ola Hallengren μαζί με έτοιμα παραμετροποιημένα jobs για Backup ,Database Integrity και Index Optimize με τις βέλτιστες παραμέτρους και χρονοδιάγραμμα.

Τα Backup jobs δημιουργούνται disabled καθώς μπορεί να έχουμε άλλη λύση για backup με 3rd party tool. Επίσης κάνει έλεγχο για Availability Group ώστε να τρέχουν μόνο αν είναι η Preffered Backup Replica (για backup / database integrity) και αν είναι Primary Replica (για Index Optimize).

Το μόνο που χρειάζεται να κάνουμε, είναι να εκτελέσουμε το παρακάτω script στο κάθε SQL Server Instance:

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση