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

קבוצות זמינות של Always On ב-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)‎ מפעילות יתירות כשל של כתובת IP. לעומת זאת,Google Cloudמתעלם מהודעות ARP. לכן, צריך להטמיע אחת משתי האפשרויות הבאות: שימוש במאזן עומסים פנימי ובשם רשת מבוזרת (DNN).

המאמר מניח שכבר פרסתם את Active Directory ב- Google Cloud, ושיש לכם ידע בסיסי ב-SQL Server, ב-Active Directory וב-Compute Engine. למידע נוסף על Active Directory ב- Google Cloud, קראו את הקטע לפני שמתחילים.

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

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

ארכיטקטורה

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

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

מטרות

עלויות

במדריך הזה משתמשים ברכיבים של Google Cloud, והשימוש בהם כרוך בתשלום, כולל:

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

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

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

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud 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 Google Cloud project.

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

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

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

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

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

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

    כניסה למסוף Google Cloud

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

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

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

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

    gcloud config set project PROJECT_ID
    

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

  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 שבה 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. מזינים את פרטי הכניסה של חשבון עם הרשאות לצירוף מכונה וירטואלית לדומיין.

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

פריסת אשכול יתירות הכשל

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

הכנת שרת SQL

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

  1. מתחברים אל node-1 באמצעות Remote Desktop. נכנסים לחשבון המשתמש בדומיין.
  2. לוחצים לחיצה ימנית על Start (או מקישים על Win+X) ואז לוחצים על Windows PowerShell (Admin).
  3. מאשרים את בקשת ההרשאה בלחיצה על כן.
  4. יוצרים חשבון משתמש בדומיין לשרת SQL ולסוכן 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.
  3. ברשימת השירותים, לוחצים לחיצה ימנית על SQL Server (MSSQLSERVER)‎ ובוחרים באפשרות Properties.
  4. בקטע Log on as, משנים את החשבון באופן הבא:

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

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

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

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

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

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

    אפשר גם להפעיל את יישום ה-MMC של Failover Cluster Manager כדי לבדוק את תקינות האשכול, באמצעות הפעלת cluadmin.msc.

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

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    
  9. מפעילים את Always On availability groups בשני הצמתים.

    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. בתפריט, בוחרים באפשרות File > New > Query with current connection (קובץ > חדש > שאילתה עם החיבור הנוכחי).
  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 זמינות גבוהה ובוחרים באפשרות 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. מגדירים את Availability mode ל-Synchronous commit בשני המכונות.

    4. מגדירים את Automatic failover ל-Enabled בשני המופעים.

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

  5. בדף Select Data Synchronization, בוחרים באפשרות Automatic Seeding.

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

  7. בדף Summary, לוחצים על Finish.

  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. בדף Results, מוודאים שמעבר הגיבוי נכשל.
  4. חוזרים לסשן של PowerShell ב-witness.

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

  6. כדי לעצור את הסקריפט, לוחצים על Ctrl+C.

הסרת המשאבים

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

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

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

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

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

    כניסה לדף Manage resources

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

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