הגדרה של קבוצות זמינות Always On ב-SQL Server עם אישור סינכרוני באמצעות שם רשת מבוזר

Always On availability groups ב-Microsoft SQL Server מאפשרות לכם ליצור רפליקות של מסדי נתונים בכמה מופעים של SQL Server Enterprise.

בדומה למכונות של SQL Server Failover Cluster, קבוצות הזמינות Always On משתמשות ב-Windows Server Failover Clustering ‏ (WSFC) כדי להטמיע זמינות גבוהה. עם זאת, יש כמה הבדלים בין שתי התכונות:

קבוצות זמינות Always On מופעים של אשכולות מעבר לגיבוי בעת כשל
היקף המעבר לגיבוי קבוצה של מסדי נתונים Instance
אחסון לא בשיתוף משותף

להשוואה מפורטת יותר, ראה השוואה בין מופעים של אשכולות יתירות כשל וקבוצות זמינות.

קבוצות זמינות Always On תומכות במצבי זמינות שונים. במדריך הזה מוסבר איך אפשר לפרוס קבוצות זמינות של Always On במצב אישור סינכרוני כדי להטמיע זמינות גבוהה למסד נתונים אחד או יותר.

במהלך ההגדרה, תיצרו שלוש מכונות וירטואליות. שתי מכונות וירטואליות, node-1 ו-node-2, משמשות כצמתים באשכול ומריצות את SQL Server. מכונה וירטואלית שלישית, witness, משמשת להשגת קוורום בתרחיש של מעבר לגיבוי. שלושת המכונות הווירטואליות מפוזרות על פני שלושה אזורים ומשתפות רשת משנה משותפת.

באמצעות קבוצת זמינות של SQL Server Always On, מסד נתונים לדוגמה, bookshelf, משוכפל באופן סינכרוני בשני מופעים של SQL Server.

בסביבת אשכולות של Windows מקומית, הודעות של Address Resolution Protocol‏ (ARP) מפעילות מעבר לגיבוי (failover) של כתובת IP. Cloud de Confiance, אבל לא מתייחס להודעות ARP. לכן, אתם צריכים להטמיע אחת משתי האפשרויות הבאות: שימוש במאזן עומסים פנימי ובשם רשת מבוזר (DNN).

במאמר הזה מניחים שכבר פרסתם את Active Directory ב- Cloud de Confiance by S3NSושאתם מכירים את הבסיס של SQL Server,‏ Active Directory ו-Compute Engine. מידע נוסף על Active Directory ב- Cloud de Confianceזמין בקטע לפני שמתחילים.

באמצעות קבוצת זמינות של SQL Server Always On, מסד נתונים לדוגמה, bookshelf, משוכפל באופן סינכרוני בשני מופעים של SQL Server. מאזין של שם רשת מבוזרת (DNN) בחזית האשכול מספק נקודת קצה יחידה ללקוחות SQL Server.

מידע נוסף על DNN זמין במאמר בנושא הגדרת מאזין DNN לקבוצת זמינות.

ארכיטקטורה

התרשים הזה כולל את הפריטים הבאים:

  • שתי מכונות וירטואליות באותו אזור ובתחומים שונים עבור אשכול המעבר לגיבוי (failover) שנקרא node-1 ו-node-2. באחד מהם מתארחת הרפליקה הראשית של מסד הנתונים של SQL Server, ובצומת השני מתארחת הרפליקה המשנית.
  • מכונה וירטואלית שלישית בשם witness משמשת כעד לשיתוף קבצים כדי לספק הצבעה מכריעה ולהשיג קוורום למעבר לגיבוי.
  • מאזין DNN בחזית האשכול מספק נקודת קצה אחת ללקוחות SQL Server.

מטרות

עלויות

במדריך הזה נעשה שימוש ברכיבים של Cloud de Confiance by S3NS, והשימוש בהם כרוך בתשלום, כולל:

אפשר להשתמש במחשבון התמחור כדי ליצור הערכת עלויות בהתאם לשימוש החזוי.

לפני שמתחילים

כדי לבצע את המשימות במדריך הזה, צריך לוודא את הדברים הבאים:

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Cloud de Confiance project.

  3. יש לכם דומיין Active Directory עם בקר דומיין אחד לפחות. אתם יכולים ליצור דומיין של Active Directory באמצעות שירות מנוהל ל-Microsoft AD. אפשרות נוספת היא לפרוס סביבת Active Directory בהתאמה אישית ב-Compute Engine ולהגדיר אזור העברה של DNS פרטי שמעביר שאילתות DNS לבקרי הדומיין.
  4. יש לכם משתמש ב-Active Directory שיש לו הרשאה לצרף מחשבים לדומיין והוא יכול להיכנס באמצעות RDP. אם אתם משתמשים ב-Managed Microsoft AD, אתם יכולים להשתמש במשתמש setupadmin. מידע נוסף על הקצאת הרשאות לחשבונות משתמשים ב-Active Directory זמין במאמר בנושא הקצאת הרשאות לחשבונות משתמשים ב-Active Directory
  5. Cloud de Confiance פרויקט וענן וירטואלי פרטי (VPC) עם קישוריות לבקרי הדומיין של Active Directory.
  6. רשת משנה לשימוש במכונות וירטואליות של Windows Server Failover Cluster.
כדי להימנע מחיובים נוספים אחרי שסיימתם את המדריך, תוכלו למחוק את המשאבים שיצרתם. מידע נוסף זמין במאמר בנושא הסרת המשאבים.

הכנת הפרויקט והרשת

כדי לפרוס את קבוצות הזמינות של SQL Server Always On, צריך להכין את פרויקטCloud de Confiance ואת ה-VPC לפריסה. בקטעים הבאים מוסבר בפירוט איך עושים את זה.

הגדרת הפרויקט והאזור

כדי להכין את הפרויקט ב- Cloud de Confiance לפריסה של קבוצות זמינות של SQL Server Always On, צריך לבצע את הפעולות הבאות:

  1. במסוף Cloud de Confiance , לוחצים על הלחצן Activate Cloud Shell מפעילים את Cloud Shell. כדי לפתוח את Cloud Shell.

    כניסה ל Cloud de Confiance מסוף

  2. מאתחלים את המשתנים הבאים.

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    מחליפים את מה שכתוב בשדות הבאים:

    • VPC_NAME: השם של ה-VPC
    • SUBNET_NAME: השם של תת-הרשת
  3. מגדירים את מזהה הפרויקט שמוגדר כברירת מחדל.

    gcloud config set project PROJECT_ID
    

    מחליפים את PROJECT_ID במזהה הפרויקט. Cloud de Confiance

  4. מגדירים את האזור שיוגדר כברירת מחדל.

    gcloud config set compute/region REGION
    

    מחליפים את REGION במזהה של האזור שבו רוצים לבצע פריסה.

יצירת כללים לחומת האש

כדי לאפשר ללקוחות להתחבר ל-SQL Server ולתקשורת בין צמתי האשכול, צריך ליצור כמה כללים של חומת אש. כדי לפשט את יצירת הכללים האלה בחומת האש, אפשר להשתמש בתגי רשת באופן הבא:

  • שני צמתי האשכולות מסומנים בתג wsfc-node.
  • כל השרתים (כולל witness) מתויגים בתג wsfc.

כדי ליצור כללי חומת אש שמשתמשים בתגי הרשת האלה, פועלים לפי השלבים הבאים:

  1. חוזרים לסשן הקיים של Cloud Shell.
  2. יוצרים כללים של חומת אש שמאפשרים תעבורת נתונים בין צמתי האשכול.

    SUBNET_CIDR=$(gcloud compute networks subnets describe $SUBNET_NAME --format=value\('ipCidrRange'\))
    
    gcloud compute firewall-rules create allow-all-between-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp,udp,icmp \
      --enable-logging \
      --source-tags=wsfc \
      --target-tags=wsfc \
      --network=$VPC_NAME \
      --priority 10000
    
    gcloud compute firewall-rules create allow-sql-to-wsfc-nodes \
      --direction=INGRESS \
      --action=allow \
      --rules=tcp:1433 \
      --enable-logging \
      --source-ranges=$SUBNET_CIDR \
      --target-tags=wsfc-node \
      --network=$VPC_NAME \
      --priority 10000
    

יצירת מכונות וירטואליות

יוצרים ופורסים שתי מכונות וירטואליות עבור אשכול יתירות הכשל. בכל נקודת זמן, אחת מהמכונות הווירטואליות האלה מארחת את העותק הראשי של מסד הנתונים של SQL Server, והצומת השני מארח את העותק המשני. שתי המכונות הווירטואליות צריכות:

אתם משתמשים בקובץ אימג' של SQL Server Premium שבו מותקן מראש SQL Server 2022.

כדי לספק הצבעה מכריעה ולהשיג קוורום לתרחיש היתירות כשל, צריך לפרוס מכונת VM שלישית שתשמש כעדות לשיתוף קבצים באמצעות השלבים הבאים:

  1. חוזרים לסשן הקיים של Cloud Shell.
  2. יוצרים סקריפט ייעודי לצמתי WSFC. הסקריפט הזה מתקין את התכונות הנדרשות של Windows ויוצר כללי חומת אש עבור WSFC ו-SQL Server.

    cat << "EOF" > specialize-node.ps1
    
    $ErrorActionPreference = "stop"
    
    # Install required Windows features
    Install-WindowsFeature Failover-Clustering -IncludeManagementTools
    Install-WindowsFeature RSAT-AD-PowerShell
    
    # Open firewall for WSFC
    netsh advfirewall firewall add rule name="Allow WSFC health check" dir=in action=allow protocol=TCP localport=59998
    
    # Open firewall for SQL Server
    netsh advfirewall firewall add rule name="Allow SQL Server" dir=in action=allow protocol=TCP localport=1433
    
    # Open firewall for SQL Server replication
    netsh advfirewall firewall add rule name="Allow SQL Server replication" dir=in action=allow protocol=TCP localport=5022
    
    # Format data disk
    Get-Disk |
     Where partitionstyle -eq 'RAW' |
     Initialize-Disk -PartitionStyle MBR -PassThru |
     New-Partition -AssignDriveLetter -UseMaximumSize |
     Format-Volume -FileSystem NTFS -NewFileSystemLabel 'Data' -Confirm:$false
    
    # Create data and log folders for SQL Server
    md d:\Data
    md d:\Logs
    EOF
    
  3. יוצרים את המכונות הווירטואליות. בשני צמתי האשכול, מצרפים דיסק נתונים ומגדירים את מפתח המטא-נתונים enable-wsfc לערך true. הפעולה הזו מפעילה את Windows Server Failover Clustering ומגדירה מאזין מקומי ביציאה שמוגדרת כברירת מחדל (59998).

    REGION=$(gcloud config get-value compute/region)
    ZONE1=ZONE1
    ZONE2=ZONE2
    ZONE3=ZONE3
    PD_SIZE=200
    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --zone $ZONE1 \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-1" \
      --create-disk=name=node-1-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create node-2 \
      --zone $ZONE2 \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-2" \
      --create-disk=name=node-2-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create "witness" \
      --zone $ZONE3 \
      --machine-type e2-medium \
      --subnet $SUBNET_NAME \
      --image-family=windows-2022 \
      --image-project=windows-cloud \
      --tags wsfc \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --metadata sysprep-specialize-script-ps1="add-windowsfeature FS-FileServer"
    

    מחליפים את ZONE1,‏ ZONE2 ו-ZONE3 בהתאם לאזורים שבהם אתם משתמשים.

  4. כדי לצרף את שלוש מכונות ה-VM ל-Active Directory, מבצעים את הפעולות הבאות עבור כל אחת משלוש מכונות ה-VM:

    1. כדי לעקוב אחר תהליך האתחול של המכונה הווירטואלית, אפשר לצפות בפלט של היציאה הטורית שלה.

      gcloud compute instances tail-serial-port-output NAME
      

      מחליפים את NAME בשם של מופע המכונה הווירטואלית.

      מחכים כמה דקות עד שרואים את הפלט Instance setup finished, ואז מקישים על Ctrl+C. בשלב הזה, מופע המכונה הווירטואלית מוכן לשימוש.

    2. יוצרים שם משתמש וסיסמה למכונה הווירטואלית.

    3. מתחברים למכונה הווירטואלית באמצעות Remote Desktop ונכנסים באמצעות שם המשתמש והסיסמה שנוצרו בשלב הקודם.

    4. לוחצים לחיצה ימנית על Start (או מקישים על Win+X) ואז לוחצים על Windows PowerShell (Admin).

    5. לוחצים על כן כדי לאשר את ההודעה על העלאת הרשאות.

    6. מצטרפים עם המחשב לדומיין של Active Directory ומפעילים מחדש.

      Add-Computer -Domain DOMAIN -Restart
      

      מחליפים את DOMAIN בשם ה-DNS של דומיין Active Directory.

    7. מזינים את פרטי הכניסה של חשבון שיש לו הרשאות להצטרף למכונה וירטואלית בדומיין

      מחכים שהמכונה הווירטואלית תופעל מחדש. הצטרפתם עכשיו למופע של מכונה וירטואלית ל-Active Directory.

פריסת אשכול הגיבוי האוטומטי

עכשיו אפשר להשתמש במכונות הווירטואליות כדי לפרוס אשכול מעבר לגיבוי אוטומטי של Windows Server ו-SQL Server. בקטעים הבאים מוסבר איך עושים את זה בפירוט.

הכנה של SQL Server

כדי ליצור חשבון משתמש חדש ב-Active Directory ל-SQL Server, פועלים לפי השלבים הבאים.

  1. מתחברים אל node-1 באמצעות Remote Desktop. נכנסים באמצעות חשבון המשתמש בדומיין.
  2. לוחצים לחיצה ימנית על Start (או מקישים על Win+X) ואז לוחצים על Windows PowerShell (Admin).
  3. לוחצים על כן כדי לאשר את ההודעה על העלאת הרשאות.
  4. יוצרים חשבון משתמש בדומיין עבור SQL Server וסוכן SQL ומקצים סיסמה:

    $Credential = Get-Credential -UserName sql_server -Message 'Enter password'
    New-ADUser `
      -Name "sql_server" `
      -Description "SQL Admin account." `
      -AccountPassword $Credential.Password `
      -Enabled $true -PasswordNeverExpires $true
    

כדי להגדיר את SQL Server, מבצעים את השלבים הבאים ב-node-1 וב-node-2:

  1. פותחים את SQL Server Configuration Manager.
  2. בחלונית הניווט, בוחרים באפשרות SQL Server Services (שירותי SQL Server).
  3. ברשימת השירותים, לוחצים לחיצה ימנית על SQL Server (MSSQLSERVER) ובוחרים באפשרות Properties (מאפיינים).
  4. בקטע כניסה בתור, משנים את החשבון באופן הבא:

    • שם החשבון: DOMAIN\sql_server כאשר DOMAIN הוא שם NetBIOS של דומיין Active Directory.
    • סיסמה: מזינים את הסיסמה שבחרתם קודם.
  5. לוחצים על OK.

  6. כשמופיעה בקשה להפעלה מחדש של SQL Server, בוחרים באפשרות כן.

‫SQL Server פועל עכשיו תחת חשבון משתמש בדומיין.

יצירת התקני רשת לשיתוף קבצים

יוצרים שני שיתופי קבצים במכונה הווירטואלית witness כדי שהיא תוכל לאחסן גיבויים של SQL Server ולשמש כעדות לשיתוף קבצים:

  1. מתחברים אל witness באמצעות Remote Desktop. נכנסים באמצעות חשבון המשתמש בדומיין.
  2. לוחצים לחיצה ימנית על Start (או מקישים על Win+X) ואז לוחצים על Windows PowerShell (Admin).
  3. לוחצים על כן כדי לאשר את ההודעה על העלאת הרשאות.
  4. יוצרים שיתוף קבצים של עדים ומעניקים לעצמכם ולשני צמתי האשכול גישה לשיתוף הקבצים.

    New-Item "C:\QWitness" –type directory
    
    icacls C:\QWitness\ /grant 'node-1$:(OI)(CI)(M)'
    icacls C:\QWitness\ /grant 'node-2$:(OI)(CI)(M)'
    
    New-SmbShare `
      -Name QWitness `
      -Path "C:\QWitness" `
      -Description "SQL File Share Witness" `
      -FullAccess $env:username,node-1$,node-2$
    
  5. יוצרים שיתוף קבצים נוסף לאחסון גיבויים ומעניקים ל-SQL Server גישה מלאה:

    New-Item "C:\Backup" –type directory
    New-SmbShare `
      -Name Backup `
      -Path "C:\Backup" `
      -Description "SQL Backup" `
      -FullAccess  $env:USERDOMAIN\sql_server
    

יצירת אשכול מעבר לגיבוי בעת כשל

כדי ליצור את אשכול היתירות כשל, פועלים לפי השלבים הבאים:

  1. חזרה לסשן של Remote Desktop ב-node-1.
  2. לוחצים לחיצה ימנית על Start (או מקישים על Win+X) ואז לוחצים על Windows PowerShell (Admin).
  3. לוחצים על כן כדי לאשר את ההודעה על העלאת הרשאות.
  4. יוצרים אשכול חדש.

    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -ManagementPointNetworkType Distributed
    
  5. חוזרים לסשן PowerShell ב-witness ומעניקים לאובייקט המחשב הווירטואלי של האשכול הרשאה לגשת לשיתוף הקבצים.

    icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)'
    Grant-SmbShareAccess `
      -Name QWitness `
      -AccountName 'sql-cluster$' `
      -AccessRight Full `
      -Force
    
  6. חוזרים לסשן PowerShell ב-node-1 ומגדירים את האשכול כך שישתמש בשיתוף הקבצים ב-witness כקבוצת הרוב באשכול.

    Set-ClusterQuorum -FileShareWitness \\witness\QWitness
    
  7. מוודאים שהאשכול נוצר בהצלחה.

    Test-Cluster
    

    יכול להיות שיופיעו אזהרות שאפשר להתעלם מהן:

    WARNING: System Configuration - Validate All Drivers Signed: The test reported some warnings..
    WARNING: Network - Validate Network Communication: The test reported some warnings..
    WARNING:
    Test Result:
    HadUnselectedTests, ClusterConditionallyApproved
    Testing has completed for the tests you selected. You should review the warnings in the Report.  A cluster solution is
    supported by Microsoft only if you run all cluster validation tests, and all tests succeed (with or without warnings).
    

    אפשר גם להריץ את הפקודה cluadmin.msc כדי להפעיל את התוסף Failover Cluster Manager MMC ולבדוק את תקינות האשכול.

  8. אם אתם משתמשים ב-Managed AD, צריך להוסיף את חשבון המחשב שבו נעשה שימוש באשכול Windows לקבוצה Cloud Service Domain Join Accounts כדי שיוכל להצטרף למחשבים בדומיין.

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    
  9. מפעילים קבוצות זמינות תמיד בשני הצמתים.

    Enable-SqlAlwaysOn -ServerInstance node-1 -Force
    Enable-SqlAlwaysOn -ServerInstance node-2 -Force
    

יצירת קבוצת זמינות

עכשיו יוצרים מסד נתונים לדוגמה bookshelf, כוללים אותו בקבוצת זמינות חדשה בשם bookshelf-ag ומגדירים זמינות גבוהה.

יצירת מסד נתונים

יוצרים מסד נתונים חדש. לצורך המדריך הזה, אין צורך שהמסד יכיל נתונים.

  1. חזרה לסשן של Remote Desktop ב-node-1.
  2. פותחים את SQL Server Management Studio.
  3. בתיבת הדו-שיח Connect to server (התחברות לשרת), מוודאים ששם השרת מוגדר ל-node-1 ולוחצים על Connect (התחברות).
  4. בתפריט, בוחרים באפשרות קובץ > חדש > שאילתה עם החיבור הנוכחי.
  5. מדביקים את סקריפט ה-SQL הבא בעורך:

    -- Create a sample database
    CREATE DATABASE bookshelf ON PRIMARY (
      NAME = 'bookshelf',
      FILENAME='d:\Data\bookshelf.mdf',
      SIZE = 256MB,
      MAXSIZE = UNLIMITED,
      FILEGROWTH = 256MB)
    LOG ON (
      NAME = 'bookshelf_log',
      FILENAME='d:\Logs\bookshelf.ldf',
      SIZE = 256MB,
      MAXSIZE = UNLIMITED,
      FILEGROWTH = 256MB)
    GO
    
    USE [bookshelf]
    SET ANSI_NULLS ON
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- Create sample table
    CREATE TABLE [dbo].[Books] (
      [Id] [bigint] IDENTITY(1,1) NOT NULL,
      [Title] [nvarchar](max) NOT NULL,
      [Author] [nvarchar](max) NULL,
      [PublishedDate] [datetime] NULL,
      [ImageUrl] [nvarchar](max) NULL,
      [Description] [nvarchar](max) NULL,
      [CreatedById] [nvarchar](max) NULL,
      CONSTRAINT [PK_dbo.Books] PRIMARY KEY CLUSTERED ([Id] ASC) WITH (
        PAD_INDEX = OFF,
        STATISTICS_NORECOMPUTE = OFF,
        IGNORE_DUP_KEY = OFF,
        ALLOW_ROW_LOCKS = ON,
        ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    
    -- Create a backup
    EXEC dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [bookshelf] SET RECOVERY FULL;
      GO
      BACKUP DATABASE bookshelf to disk = '\\witness\Backup\bookshelf.bak' WITH INIT
    GO
    

    הסקריפט יוצר מסד נתונים חדש עם טבלה אחת ומבצע גיבוי ראשוני אל witness.

  6. בוחרים באפשרות Execute כדי להריץ את תסריט ה-SQL.

הגדרת זמינות גבוהה

עכשיו אפשר להגדיר זמינות גבוהה לקבוצת הזמינות באמצעות T-SQL או Server Management Studio.

שימוש ב-T-SQL

כדי להגדיר זמינות גבוהה לקבוצת הזמינות באמצעות T-SQL, מבצעים את השלבים הבאים:

  1. מתחברים אל node-1 ומריצים את הסקריפט הבא כדי ליצור את קבוצת הזמינות bookshelf-ag.

    CREATE LOGIN [NET_DOMAIN\sql_server] FROM WINDOWS;
    GO
    
    USE [bookshelf];
    CREATE USER [NET_DOMAIN\sql_server] FOR LOGIN [NET_DOMAIN\sql_server];
    GO
    
    USE [master];
    CREATE ENDPOINT bookshelf_endpoint
      STATE=STARTED
      AS TCP (LISTENER_PORT=5022)
      FOR DATABASE_MIRRORING (ROLE=ALL);
    GO
    
    GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN\sql_server]
    GO
    
  2. מתחברים אל node-2 ומריצים את הסקריפט הבא.

    CREATE LOGIN [NET_DOMAIN\sql_server] FROM WINDOWS;
    GO
    
    CREATE ENDPOINT bookshelf_endpoint
      STATE=STARTED
      AS TCP (LISTENER_PORT=5022)
      FOR DATABASE_MIRRORING (ROLE=ALL);
    GO
    
    GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN\sql_server]
    GO
    
  3. ב-node-1, מריצים את הסקריפט הבא כדי ליצור את קבוצת הזמינות bookshelf-ag.

    USE master;
    GO
    
    CREATE AVAILABILITY GROUP [bookshelf-ag]
    WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY,
    CLUSTER_TYPE = WSFC,
    DB_FAILOVER = ON
    )
    FOR DATABASE [bookshelf]
    REPLICA ON
      N'node-1' WITH (
          ENDPOINT_URL = 'TCP://node-1:5022',
          AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
          FAILOVER_MODE = AUTOMATIC,
          BACKUP_PRIORITY = 50,
          SEEDING_MODE = AUTOMATIC,
          SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
      ),
      N'node-2' WITH (
          ENDPOINT_URL = 'TCP://node-2:5022',
          AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
          FAILOVER_MODE = AUTOMATIC,
          BACKUP_PRIORITY = 50,
          SEEDING_MODE = AUTOMATIC,
          SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
      );
    GO
    
  4. מתחברים אל node-2 ומריצים את הסקריפט הבא כדי להוסיף את העותק המשני לקבוצת הזמינות ולהפעיל את האתחול האוטומטי.

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN;
    ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
    
    
  5. בודקים את הסטטוס של קבוצת הזמינות.

    SELECT * FROM sys.dm_hadr_availability_group_states;
    GO
    

    השם synchronization_health_desc אמור להופיע בתור HEALTHY.

שימוש ב-SQL Server Management Studio

כדי להגדיר זמינות גבוהה לקבוצת הזמינות באמצעות SQL Server Management Studio, פועלים לפי השלבים הבאים:

  1. בחלון Object Explorer, לוחצים לחיצה ימנית על Always On High Availability (זמינות גבוהה של Always On) ואז בוחרים באפשרות New Availability Group Wizard (אשף ליצירת קבוצת זמינות חדשה).
  2. בדף Specify Options, מגדירים את שם קבוצת הזמינות ל-bookshelf-ag ואז לוחצים על Next.
  3. בדף Select Databases, בוחרים את מסד הנתונים bookshelf ולוחצים על Next.
  4. בדף Specify Replicas (הגדרת רפליקות), בוחרים בכרטיסייה Replicas (רפליקות).

    1. לוחצים על הוספת העתק.
    2. בתיבת הדו-שיח Connect to server (התחברות לשרת), מזינים את שם השרת node-2 ובוחרים באפשרות Connect (התחברות).

      רשימת העותקים הזמינים כוללת עכשיו מופעים של SQL Server,‏ node-1 ו-node-2.

    3. מגדירים את מצב הזמינות לשמירה סינכרונית בשני המקרים.

    4. מגדירים את האפשרות מעבר אוטומטי לגיבוי למצב מופעל בשני המקרים.

    5. לוחצים על הבא.

  5. בדף Select Data Synchronization (בחירת סנכרון נתונים), בוחרים באפשרות Automatic Seeding (הוספה אוטומטית של נתונים).

  6. בדף אימות, מוודאים שכל הבדיקות עברו בהצלחה. אפשר להתעלם מבדיקת מאזין קבוצת הזמינות.

  7. בדף סיכום, לוחצים על סיום.

  8. בדף תוצאות, לוחצים על סגירה.

הגדרת מאזין DNN לקבוצת הזמינות

מאזין DNN משמש כנקודת קצה יחידה ללקוחות SQL Server. כדי להגדיר מאזין DNN, פועלים לפי השלבים הבאים:

  1. חוזרים לסשן PowerShell ב-node-1.
  2. מריצים את הסקריפט הבא כדי ליצור מאזין DNN.

      $Ag='bookshelf-ag'
      $Port='DNN_PORT'
      $Dns='DNN_NAME'
    
      # create the DNN resource with the port as the resource name
      Add-ClusterResource -Name $Port -ResourceType "Distributed Network Name" -Group $Ag
    
      # set the DNS name of the DNN resource
      Get-ClusterResource -Name $Port | Set-ClusterParameter -Name DnsName -Value $Dns
    
      # start the DNN resource
      Start-ClusterResource -Name $Port
    
      # add the Dependency from availability group resource to the DNN resource
      Set-ClusterResourceDependency -Resource $Ag -Dependency "[$Port]"
    
      # restart the availability group resource
      Stop-ClusterResource -Name $Ag
      Start-ClusterResource -Name $Ag
    

    מחליפים את DNN_PORT ביציאת ההאזנה של ה-DNN. צריך להגדיר את יציאת ההאזנה של ה-DNN עם יציאה ייחודית. מידע נוסף מופיע בקטע שיקולים לגבי ניוד.

    מחליפים את DNN_NAME בשם של מאזין ה-DNN.

  3. יוצרים כללים לחומת האש עבור יציאת ההאזנה של DNN ב-node-1 וב-node-2.

      netsh advfirewall firewall add rule name="Allow DNN listener" dir=in action=allow protocol=TCP localport=DNN_PORT
    

בדיקת המעבר לגיבוי

עכשיו אפשר לבדוק אם הגיבוי למקרה כשל פועל כמו שצריך:

  1. חוזרים לסשן PowerShell ב-witness.
  2. מריצים את הסקריפט הבא.

    while ($True){
      $Conn = New-Object System.Data.SqlClient.SqlConnection
      $Conn.ConnectionString = "Server=DNN_NAME,DNN_PORT;Integrated Security=true;Initial Catalog=master"
      $Conn.Open()
    
      $Cmd = New-Object System.Data.SqlClient.SqlCommand
      $Cmd.Connection = $Conn
      $Cmd.CommandText = "SELECT SERVERPROPERTY('ServerName')"
    
      $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter $Cmd
      $Data = New-Object System.Data.DataSet
      $Adapter.Fill($Data) | Out-Null
      $Data.Tables[0] + (Get-Date -Format "MM/dd/yyyy HH:mm:ss")
    
      Start-Sleep -Seconds 2
    }
    

    מחליפים את DNN_NAME בשם של מאזין ה-DNN ואת DNN_PORT ביציאת מאזין ה-DNN.

    כל 2 שניות, הסקריפט מתחבר ל-SQL Server באמצעות מאזין קבוצת הזמינות, ושולח שאילתה לגבי שם השרת.

    משאירים את הסקריפט פועל.

  3. חוזרים לסשן Remote Desktop ב-node-1 כדי להפעיל מעבר לגיבוי.

    1. ב-SQL Server Management Studio, עוברים אל Always On High Availability (זמינות גבוהה תמיד) > Availability Groups (קבוצות זמינות) > bookshelf-ag (Primary) ולוחצים לחיצה ימנית על הצומת.
    2. בוחרים באפשרות מעבר לגיבוי.
    3. בדף Select new primary replica (בחירת רפליקה ראשית חדשה), מוודאים שהרפליקה node-2 נבחרה כרפליקה ראשית חדשה ושהעמודה Failover readiness (מוכנות למעבר לגיבוי) מציינת No data loss. לאחר מכן לוחצים על הבא.
    4. בדף Connect to replica (התחברות לעותק), לוחצים על Connect (התחברות).
    5. בתיבת הדו-שיח Connect to server (התחברות לשרת), מוודאים ששם השרת הוא node-2 ולוחצים על Connect (התחברות).
    6. לוחצים על הבא ואז על סיום.
    7. בדף תוצאות, מוודאים שהמעבר לגיבוי בוצע בהצלחה.
  4. חוזרים לסשן PowerShell ב-witness.

  5. בודקים את הפלט של הסקריפט הפועל ורואים ששם השרת משתנה מ-node-1 ל-node-2 כתוצאה מהמעבר לגיבוי.

  6. מפסיקים את הסקריפט בלחיצה על Ctrl+C.

הסרת המשאבים

אחרי שמסיימים את המדריך, אפשר למחוק את המשאבים שנוצרו, כדי שהם יפסיקו להשתמש במכסה ולצבור חיובים. בסעיפים הבאים מוסבר איך למחוק או להשבית את המשאבים האלו.

מחיקת הפרויקט

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.

כדי למחוק את הפרויקט:

  1. במסוף Cloud de Confiance , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

  2. ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
  3. כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.

המאמרים הבאים