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

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

מידע נוסף על Windows Server Failover Clustering עם איזון עומסים פנימי זמין במאמר בנושא failover clustering.

ארכיטקטורה

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

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

מטרות

המדריך הזה נועד להשיג את המטרות הבאות:

עלויות

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

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

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

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

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. 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

  3. Verify that billing is enabled for your Google Cloud project.

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

  5. Verify that billing is enabled for your Google Cloud project.

  6. יש לכם דומיין Active Directory עם בקר דומיין אחד לפחות. אתם יכולים ליצור דומיין Active Directory באמצעות שירות מנוהל ל-Microsoft AD. אפשרות נוספת היא לפרוס סביבת Active Directory בהתאמה אישית ב-Compute Engine ולהגדיר אזור העברה של DNS פרטי שמעביר שאילתות DNS לבקרי הדומיין.
  7. יש לכם משתמש ב-Active Directory עם הרשאה לצרף מחשבים לדומיין, והוא יכול להיכנס באמצעות RDP. אם אתם משתמשים ב-Managed Microsoft AD, אתם יכולים להשתמש במשתמש setupadmin. מידע נוסף על הקצאת הרשאות לחשבונות משתמשים ב-Active Directory זמין במאמר בנושא הקצאת הרשאות לחשבונות משתמשים ב-Active Directory
  8. Google Cloud פרויקט וענן וירטואלי פרטי (VPC) עם קישוריות לבקרי הדומיין של Active Directory.
  9. רשת משנה לשימוש במכונות וירטואליות של 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, והצומת השני מארח את העותק המשני. שתי המכונות הווירטואליות צריכות:

  • להיות באותו אזור כדי שמאזן עומסי רשת פנימי להעברת סיגנל ללא שינוי יוכל לגשת אליהם.
  • מותקנים בהם Windows Server Failover Cluster ו-SQL Server.
  • האפשרות תמיכה ב-WSFC ב-Compute Engine מופעלת.

אתם משתמשים בקובץ אימג' של 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.

שמירת כתובות IP סטטיות

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

באשכול WSFC, כתובת ה-IP של האשכול משמשת בעיקר למטרות ניהול ולגישה למשאבי האשכול. כתובת ה-IP הווירטואלית הזו מוקצית לאשכול עצמו, ומאפשרת לאדמינים לנהל את האשכול ולבצע משימות כמו הגדרת הגדרות האשכול, מעקב אחר תקינות הצמתים וניהול תהליכי מעבר לגיבוי.

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

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

בהקשר של WSFC עם קבוצות זמינות של SQL Server Always On, גם כתובות IP פנימיות קבועות שמורות לכתובת ה-IP של אשכול WSFC שמוגדר כברירת מחדל וגם ל-listener של קבוצת הזמינות משמשות מאזני עומסים פנימיים משויכים.

  1. כדי לשמור שתי כתובות IP סטטיות ב-VPC, מבצעים את השלבים הבאים.

    gcloud compute addresses create wsfc-cluster-ip \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region) && \
    CLUSTER_IP=$(gcloud compute addresses describe wsfc-cluster-ip \
        --region $(gcloud config get-value compute/region) \
        --format=value\(address\)) && \
    echo "cluster IP: $CLUSTER_IP"
    
  2. מחליפים את כתובת ה-IP של האשכול במשתנה CLUSTER_IP. תצטרכו אותה בהמשך כדי לציין אותה ככתובת ה-IP של האשכול:

    CLUSTER_IP=CLUSTER_IP
    
  3. שומרים כתובת IP סטטית נוספת בשביל מאזין קבוצת הזמינות, ומתעדים את הכתובת במשתנה סביבה חדש בשם LISTENER_IP.

    gcloud compute addresses create wsfc-listener-ip \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region)
    
    LISTENER_IP=$(gcloud compute addresses describe wsfc-listener-ip \
      --region $(gcloud config get-value compute/region) \
      --format=value\(address\)) && \
    echo "Listener IP: $LISTENER_IP"
    
  4. מחליפים את כתובת ה-IP השמורה של מאזן העומסים במשתנה LISTENER_IP. תצטרכו אותה בהמשך כדי להגדיר את קבוצת הזמינות.

    LISTENER_IP=LISTENER_IP
    

הפרויקט וה-VPC מוכנים עכשיו לפריסה של Windows Server Failover Cluster ו-SQL Server.

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

עכשיו אפשר להשתמש במכונות הווירטואליות כדי לפרוס אשכול מעבר לגיבוי אוטומטי של 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 `
      -StaticAddress CLUSTER_IP
    

    מחליפים את CLUSTER_IP בכתובת ה-IP של האשכול שיצרתם קודם.

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

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag]
    ADD LISTENER N'bookshelf' (
    WITH IP (
      (N'LISTENER_IP', N'255.255.255.0')
    ),
    PORT = 1433);
    GO
    
  5. מתחברים אל node-2 ומריצים את הסקריפט הבא כדי להוסיף את העותק המשני לקבוצת הזמינות ולהפעיל את האתחול האוטומטי.

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

    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. לוחצים על הכרטיסייה מאזינים.

      1. בוחרים באפשרות יצירת מאזין לקבוצת זמינות.
      2. מזינים את ההגדרות הבאות.

        • שם DNS של מאזין: bookshelf
        • יציאה: 1433
        • מצב רשת: כתובת IP סטטית
      3. לוחצים על Add ומזינים את כתובת ה-IP של מאזין (LISTENER_IP) שהזמנתם קודם למאזן העומסים הפנימי. אחר כך לוחצים על אישור.

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

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

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

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

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

יצירת מאזני עומסים פנימיים ובדיקות תקינות

כתובת ה-IP של האשכול מייצגת נקודת קצה יחידה לאשכול יתירות הכשל של Windows. משתמשים בו למטרות ניהול ולניהול משאבי האשכול. כתובת ה-IP של האשכול תמיד מצביעה על צומת המארח (או הצומת הראשי) של האשכול. אתם פורסים מאזן עומסים פנימי שמשתמש בבדיקת תקינות כדי לוודא שהתנועה מנותבת לצומת המארח של האשכול. מכיוון שכלי WSFC דורשים שיהיו כמה פרוטוקולים זמינים להעברה (ICMP,‏ UDP ו-TCP), מומלץ לפרוס מאזן עומסים פנימי עם כמה פרוטוקולים שתומכים בכל היציאות.

כדי לפרוס מאזן עומסים פנימי, פועלים לפי השלבים הבאים:

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

    REGION=$(gcloud config get-value compute/region)
    
    gcloud compute instance-groups unmanaged create wsfc-group-1 --zone $ZONE1
    gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $ZONE1 \
      --instances node-1
    
    gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $ZONE2
    gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $ZONE2 \
      --instances node-2
    
  3. יוצרים בדיקת תקינות לכתובת ה-IP של האשכול, שמאזן העומסים יכול להשתמש בה כדי לקבוע מהו הצומת הפעיל מנקודת המבט של אשכול Windows. יציאת ברירת המחדל שדרכה הסוכן של האורח ב-Compute Engine מגיב לבדיקות תקינות היא 59998. בבדיקת תקינות, כתובת ה-IP של האשכול מופיעה בבקשה, והתגובה שצפויה מהצומת הפעיל היא 1.

    gcloud compute health-checks create tcp wsfc-healthcheck \
      --request=$CLUSTER_IP \
      --response=1 \
      --check-interval="2s" \
      --healthy-threshold=2 \
      --unhealthy-threshold=2 \
      --port=59998 \
      --timeout="1s"
    
  4. יוצרים שירות לקצה העורפי ומוסיפים את שתי קבוצות המכונות הקיימות.

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $REGION \
      --health-checks wsfc-healthcheck \
      --protocol UNSPECIFIED
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $ZONE1 \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $ZONE2 \
      --region $REGION
    
  5. יוצרים מאזן עומסים פנימי שמשויך לכתובת ה-IP של האשכול.

    gcloud compute forwarding-rules create wsfc \
      --load-balancing-scheme internal \
      --address $CLUSTER_IP \
      --ports ALL \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --ip-protocol L3_DEFAULT \
      --backend-service wsfc-backend
    

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

  1. יוצרים בדיקת תקינות ל-listener של קבוצת הזמינות, שמאזן העומסים יכול להשתמש בה כדי לקבוע מהו הצומת הראשי בקבוצת הזמינות של bookshelfSQL Server.

    gcloud compute health-checks create tcp wsfc-bookshelf-healthcheck \
      --request=$LISTENER_IP \
      --response=1 \
      --check-interval="2s" \
      --healthy-threshold=1 \
      --unhealthy-threshold=2 \
      --port=59998 \
      --timeout="1s"
    

    בבדיקת תקינות נעשה שימוש באותה יציאה של סוכן האורח ב-Compute Engine, אבל בבקשה שלה מופיעה כתובת ה-IP של מאזין קבוצת הזמינות bookshelf.

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

    gcloud compute backend-services create wsfc-bookshelf-backend \
      --load-balancing-scheme internal \
      --region $REGION \
      --health-checks wsfc-bookshelf-healthcheck \
      --protocol UNSPECIFIED
    
    gcloud compute backend-services add-backend wsfc-bookshelf-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $ZONE1 \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-bookshelf-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $ZONE2 \
      --region $REGION
    
  3. יוצרים את מאזן העומסים הפנימי שמשויך ל-SQL Server bookshelf-aglistener של קבוצת הזמינות.

    gcloud compute forwarding-rules create wsfc-bookshelf \
      --load-balancing-scheme internal \
      --address $LISTENER_IP \
      --ports ALL \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --ip-protocol L3_DEFAULT \
      --backend-service wsfc-bookshelf-backend
    

עכשיו אפשר להתחבר למאזין של קבוצת הזמינות של SQL Server באמצעות שם ה-DNS‏ bookshelf והיציאה שלו שמוגדרים במאזין של קבוצת הזמינות של bookshelf. מאזן העומסים הפנימי מפנה את תעבורת הנתונים לצומת הראשי של קבוצת הזמינות bookshelf.

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

לכל קבוצת זמינות יכולים להיות צמתים שונים שמוגדרים כצמתים ראשיים, והם יכולים להיות שונים מצומת המארח של אשכול Windows. אם יש לכם כמה קבוצות זמינות, אתם צריכים:

  • כתובת IP סטטית שמורה עבור מאזין קבוצת הזמינות שמאזן העומסים הפנימי משתמש בו. צריך להקצות כתובת אחת לכל קבוצת זמינות.

  • כלל נפרד לבדיקת תקינות לכל קבוצת זמינות. הבקשה של בדיקת תקינות מספקת את כתובת ה-IP הסטטית של מאזין קבוצת הזמינות (שהיא גם כתובת ה-IP השמורה בשלב הקודם). בבדיקת התקינות נבדקת התגובה 1 שמוחזרת על ידי סוכן GCE. כל בדיקות התקינות משתמשות ביציאה 59998.

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

  • מאזן עומסים פנימי לכל קבוצת זמינות של שירות הקצה העורפי שנוצר בשלב הקודם. מאזן העומסים משויך לכתובת ה-IP הסטטית של מאזין קבוצת הזמינות.

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

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

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

    while ($True){
      $Conn = New-Object System.Data.SqlClient.SqlConnection
      $Conn.ConnectionString = "Server=tcp:bookshelf,1433;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
    }
    

    במדריך הזה השתמשנו בשם ה-DNS‏ bookshelf ובערך היציאה 1433 עבור מאזין קבוצת הזמינות בהגדרת השרת tcp:bookshelf,1433.

    כל 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. במסוף Google Cloud , נכנסים לדף Manage resources.

    כניסה לדף Manage resources

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

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