קבוצות זמינות של 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. מאזן עומסים פנימי מבטיח שתעבורת הנתונים תופנה לצומת הפעיל.
מידע נוסף על Windows Server Failover Clustering עם מאזן עומסים פנימי זמין במאמר failover clustering.
התרשים הזה כולל את הפריטים הבאים:
- שתי מכונות וירטואליות באותו אזור ובאזורים שונים לאשכול יתירות הכשל שנקראים
node-1ו-node-2. צומת אחד מארח את הרפליקה הראשית של מסד הנתונים של SQL Server, והצומת השני מארח את הרפליקה המשנית. - מכונה וירטואלית שלישית בשם
witnessמשמשת כעד לשיתוף קבצים, כדי לספק הצבעה מכרעת ולהשיג קוורום ליתירות כשל. - מאזן עומסים פנימי לפני האשכול מספק נקודת קצה אחת ללקוחות של SQL Server, ומשתמש בבדיקת תקינות כדי לוודא שהתנועה מופנית לצומת הפעיל.
מטרות
מטרות המדריך:
עלויות
במדריך הזה משתמשים ברכיבים של Google Cloud, והשימוש בהם כרוך בתשלום, כולל:
השתמשו במחשבון עלויות כדי ליצור הערכת עלויות בהתאם לשימוש החזוי.
לפני שמתחילים
כדי לבצע את המשימות במדריך הזה, צריך לוודא את הדברים הבאים:
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- יש לכם דומיין Active Directory עם בקר דומיין אחד לפחות. אתם יכולים ליצור דומיין של Active Directory באמצעות שירות מנוהל ל-Microsoft AD. לחלופין, אתם יכולים לפרוס סביבת Active Directory בהתאמה אישית ב-Compute Engine ולהגדיר אזור פרטי להעברת DNS שמעביר שאילתות DNS לבקרי הדומיינים שלכם.
-
יש לכם משתמש ב-Active Directory שיש לו הרשאה לצרף מחשבים לדומיין ויכול להיכנס באמצעות RDP. אם אתם משתמשים בשירות מנוהל ל-Microsoft AD, אתם יכולים להשתמש במשתמש
setupadmin. מידע נוסף על הקצאת חשבונות משתמשים ב-Active Directory זמין במאמר הקצאת חשבונות משתמשים ב-Active Directory. - פרויקט ב- Google Cloud ורשת VPC עם קישוריות לבקרי הדומיין של Active Directory.
- רשת משנה לשימוש במכונות הווירטואליות של Windows Server Failover Cluster.
הכנת הפרויקט והרשת
כדי לפרוס את קבוצות הזמינות של SQL Server Always On, צריך להכין את הפרויקט ב-Google Cloud ואת ה-VPC לפריסה. בקטעים הבאים מוסבר בפירוט איך לעשות את זה.
הגדרת הפרויקט והאזור
כדי להכין את הפרויקט ב- Google Cloud לפריסה של קבוצות זמינות של SQL Server Always On:
במסוף Google Cloud , לוחצים על הכפתור Activate Cloud Shell
כדי לפתוח את Cloud Shell.
מאתחלים את המשתנים הבאים.
VPC_NAME=
VPC_NAMESUBNET_NAME=SUBNET_NAMEמחליפים את מה שכתוב בשדות הבאים:
-
VPC_NAME: השם של ה-VPC -
SUBNET_NAME: השם של תת-הרשת
-
מגדירים את מזהה הפרויקט כברירת מחדל.
gcloud config set project
PROJECT_IDמחליפים את
PROJECT_IDבמזהה הפרויקט ב- Google Cloud .מגדירים את אזור ברירת המחדל.
gcloud config set compute/region
REGIONמחליפים את
REGIONבמזהה של האזור שבו רוצים לפרוס.
יצירת כללים לחומת האש
כדי לאפשר ללקוחות להתחבר ל-SQL Server ולתקשורת בין הצמתים באשכול, צריך ליצור כמה כללים של חומת אש. כדי לפשט את היצירה של כללי חומת האש, אפשר להשתמש בתגי רשת באופן הבא:
- שני הצמתים באשכול מסומנים בתג
wsfc-node. - כל השרתים (כולל
witness) מסומנים בתגwsfc.
כדי ליצור כללי חומת אש שמשתמשים בתגי הרשת האלה, פועלים לפי השלבים הבאים:
- חוזרים לסשן הקיים של Cloud Shell.
יוצרים כללים של חומת אש שמאפשרים תעבורת נתונים בין צומתי האשכול.
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 שבה SQL Server 2022 מותקן מראש.
כדי לספק קול מכריע ולהשיג קוורום לתרחיש של יתירות כשל, פורסים VM שלישי שמשמש כעֵד לשיתוף קבצים באמצעות השלבים הבאים:
- חוזרים לסשן הקיים של Cloud Shell.
יוצרים סקריפט מיוחד לצומתי 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
יוצרים את המכונות הווירטואליות. בשני הצמתים של האשכול, מחברים דיסק נתונים ומגדירים את מפתח המטא-נתונים
enable-wsfcלערךtrue. הפעולה הזו מפעילה את Windows Server Failover Clustering ומגדירה מאזין מקומי ביציאת ברירת המחדל (59998).REGION=$(gcloud config get-value compute/region) ZONE1=
ZONE1ZONE2=ZONE2ZONE3=ZONE3PD_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 בהתאם לאזורים שבהם אתם משתמשים.
כדי לצרף את שלוש מכונות ה-VM ל-Active Directory, מבצעים את הפעולות הבאות בכל אחת משלוש מכונות ה-VM:
עוקבים אחרי תהליך ההפעלה של המכונה הווירטואלית באמצעות הפלט של היציאה הטורית.
gcloud compute instances tail-serial-port-output
NAMEמחליפים את
NAMEבשם של המכונה הווירטואלית.מחכים כמה דקות עד שרואים את הפלט
Instance setup finished, ואז לוחצים על Ctrl+C. בשלב הזה, המכונה הווירטואלית מוכנה לשימוש.יוצרים שם משתמש וסיסמה למכונה הווירטואלית.
מתחברים למכונה הווירטואלית באמצעות Remote Desktop ונכנסים באמצעות שם המשתמש והסיסמה שנוצרו בשלב הקודם.
לוחצים לחיצה ימנית על Start (או מקישים על Win+X) ואז לוחצים על Windows PowerShell (Admin).
מאשרים את בקשת ההרשאה בלחיצה על כן.
מצרפים את המחשב לדומיין של Active Directory ומפעילים מחדש.
Add-Computer -Domain
DOMAIN -Restartמחליפים את
DOMAINבשם ה-DNS של הדומיין ב-Active Directory.מזינים את פרטי הכניסה של חשבון עם הרשאות לצירוף מכונה וירטואלית לדומיין.
מחכים שהמכונה הווירטואלית תופעל מחדש. עכשיו צירפתם את מכונת ה-VM ל-Active Directory.
שמירת כתובות IP סטטיות
עכשיו אתם שומרים שתי כתובות IP סטטיות ב-VPC. כתובת IP אחת משמשת ככתובת ה-IP של אשכול ה-WSFC כברירת מחדל, והשנייה משמשת ככתובת ה-IP הסטטית של מאזין קבוצת הזמינות של SQL Server.
באשכול WSFC, כתובת ה-IP של האשכול משמשת בעיקר למטרות ניהוליות ולגישה למשאבי האשכול. כתובת ה-IP הווירטואלית הזו מוקצית לאשכול עצמו, ומאפשרת לאדמינים לנהל את האשכול ולבצע משימות כמו קביעת הגדרות האשכול, מעקב אחרי תקינות הצמתים וניהול תהליכי יתירות כשל.
בהקשר של קבוצת זמינות של SQL Server, מאזין הוא שם רשת וירטואלית (VNN) וכתובת IP שמאפשרים ללקוחות להתחבר לקבוצת הזמינות בלי לדעת איזה שרת ספציפי הוא הצומת הראשי.
מאזן עומסים פנימי צריך כתובת IP פנימית כדי לנתב ביעילות תנועה פנימית ולתמוך בזמינות גבוהה ובאיזון עומסים בהקשר של אשכול WSFC. מאזן העומסים הפנימי מבטיח שהבקשות תמיד יופנו לרפליקה הראשית הנוכחית של האשכול. באירועים של יתירות כשל, מאזן העומסים מזהה שינויים ברפליקה הראשית ומפנה מחדש את החיבורים של הלקוח לרפליקה הראשית החדשה בלי צורך בהתערבות ידנית. כך הוא מצמצם את זמן ההשבתה ומבטיח זמינות רציפה של שירותי מסד הנתונים.
בהקשר של WSFC עם קבוצות זמינות של SQL Server Always On, כתובות ה-IP הסטטיות הפנימיות ששמורות לכתובת ה-IP של אשכול ברירת המחדל של WSFC ולמאזין של קבוצת הזמינות משמשות גם את מאזני העומסים הפנימיים המשויכים.
כדי לשמור שתי כתובות 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"מחליפים את כתובת ה-IP של האשכול במשתנה
CLUSTER_IP, כי תצטרכו לציין אותה בהמשך ככתובת ה-IP של האשכול:CLUSTER_IP=
CLUSTER_IPשומרים עוד כתובת 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"
מחליפים את כתובת ה-IP השמורה של מאזן העומסים במשתנה
LISTENER_IP, כי תצטרכו אותה בהמשך כדי להגדיר את קבוצת הזמינות.LISTENER_IP=
LISTENER_IP
הפרויקט וה-VPC מוכנים לפריסה של Windows Server Failover Cluster ו-SQL Server.
פריסת אשכול יתירות הכשל
עכשיו אפשר להשתמש במכונות הווירטואליות כדי לפרוס את Windows Server Failover Cluster ואת SQL Server. בקטעים הבאים מוסבר בפירוט איך לעשות זאת.
הכנת שרת SQL
כדי ליצור חשבון משתמש חדש ב-Active Directory ל-SQL Server, פועלים לפי השלבים הבאים:
- מתחברים אל
node-1באמצעות Remote Desktop. נכנסים לחשבון המשתמש בדומיין. - לוחצים לחיצה ימנית על Start (או מקישים על Win+X) ואז לוחצים על Windows PowerShell (Admin).
- מאשרים את בקשת ההרשאה בלחיצה על כן.
יוצרים חשבון משתמש בדומיין לשרת 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:
- פותחים את SQL Server Configuration Manager.
- בחלונית הניווט, בוחרים באפשרות SQL Server Services.
- ברשימת השירותים, לוחצים לחיצה ימנית על SQL Server (MSSQLSERVER) ובוחרים באפשרות Properties.
בקטע Log on as, משנים את החשבון באופן הבא:
- שם החשבון:
DOMAIN\sql_serverכאשרDOMAINהוא השם של NetBIOS של הדומיין שלכם ב-Active Directory. - סיסמה: מזינים את הסיסמה שבחרתם קודם.
- שם החשבון:
לוחצים על OK.
כשמופיעה בקשה להפעיל מחדש את SQL Server, לוחצים על Yes.
עכשיו SQL Server פועל בחשבון משתמש בדומיין.
יצירת התקני רשת לשיתוף קבצים
יוצרים שני שיתופי קבצים במכונה הווירטואלית witness כדי שהיא תוכל לאחסן גיבויים של SQL Server ולשמש כ-file share witness:
- מתחברים אל
witnessבאמצעות Remote Desktop. נכנסים לחשבון המשתמש בדומיין. - לוחצים לחיצה ימנית על Start (או מקישים על Win+X) ואז לוחצים על Windows PowerShell (Admin).
- מאשרים את בקשת ההרשאה בלחיצה על כן.
יוצרים שיתוף קבצים של עדים ונותנים לעצמכם ולשני צומתי האשכול גישה לשיתוף הקבצים.
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$
יוצרים עוד שיתוף קבצים לאחסון גיבויים ונותנים ל-SQL Server גישה מלאה:
New-Item "C:\Backup" –type directory New-SmbShare ` -Name Backup ` -Path "C:\Backup" ` -Description "SQL Backup" ` -FullAccess $env:USERDOMAIN\sql_server
יצירת אשכול יתירות כשל
כדי ליצור את אשכול יתירות הכשל:
- חוזרים לסשן של Remote Desktop במכשיר
node-1. - לוחצים לחיצה ימנית על Start (או מקישים על Win+X) ואז לוחצים על Windows PowerShell (Admin).
- מאשרים את בקשת ההרשאה בלחיצה על כן.
יוצרים אשכול חדש.
New-Cluster ` -Name sql-cluster ` -Node node-1,node-2 ` -NoStorage ` -StaticAddress
CLUSTER_IPמחליפים את
CLUSTER_IPבכתובת ה-IP של האשכול שיצרתם קודם.חוזרים לסשן של PowerShell ב-
witnessונותנים לאובייקט המחשב הווירטואלי של האשכול הרשאת גישה לשיתוף הקבצים.icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)' Grant-SmbShareAccess ` -Name QWitness ` -AccountName 'sql-cluster$' ` -AccessRight Full ` -Force
חוזרים לסשן של PowerShell ב-
node-1ומגדירים את האשכול כך שישתמש בקובץ המשותף ב-witnessכקוורום של האשכול.Set-ClusterQuorum -FileShareWitness \\witness\QWitness
מוודאים שהאשכול נוצר בהצלחה.
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.אם אתם משתמשים ב-Managed AD, הוסיפו את חשבון המחשב שמשמש את אשכול Windows לקבוצה Cloud Service Domain Join Accounts כדי שיוכל לצרף מחשבים לדומיין.
Add-ADGroupMember ` -Identity "Cloud Service Domain Join Accounts" ` -Members sql-cluster$
מפעילים את Always On availability groups בשני הצמתים.
Enable-SqlAlwaysOn -ServerInstance node-1 -Force Enable-SqlAlwaysOn -ServerInstance node-2 -Force
יצירת קבוצת זמינות
עכשיו יוצרים מסד נתונים לדוגמה bookshelf, כוללים אותו בקבוצת זמינות חדשה בשם bookshelf-ag ומגדירים זמינות גבוהה.
יצירת מסד נתונים
יוצרים מסד נתונים חדש. לצורך המדריך הזה, מסד הנתונים לא צריך להכיל נתונים.
- חוזרים לסשן של Remote Desktop במכשיר
node-1. - פותחים את SQL Server Management Studio.
- בתיבת הדו-שיח Connect to server, מוודאים ששם השרת הוא
node-1ולוחצים על Connect. - בתפריט, בוחרים באפשרות File > New > Query with current connection (קובץ > חדש > שאילתה עם החיבור הנוכחי).
מדביקים את סקריפט ה-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.לוחצים על Execute כדי להריץ את הסקריפט של SQL.
הגדרת זמינות גבוהה
עכשיו אפשר להגדיר זמינות גבוהה לקבוצת הזמינות באמצעות T-SQL או SQL Server Management Studio.
באמצעות T-SQL
כדי להגדיר זמינות גבוהה לקבוצת הזמינות באמצעות T-SQL:
מתחברים אל
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מתחברים אל
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ב-
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בסקריפט הבא, מחליפים את
LISTENER_IPבכתובת ה-IP ששמרתם קודם למאזן העומסים הפנימי, ומריצים את הסקריפט.USE master; GO ALTER AVAILABILITY GROUP [bookshelf-ag] ADD LISTENER N'bookshelf' ( WITH IP ( (N'
', N'255.255.255.0') ), PORT = 1433); GOLISTENER_IPמתחברים אל
node-2ומריצים את הסקריפט הבא כדי לצרף את הרפליקה המשנית לקבוצת הזמינות ולהפעיל את ההזנה האוטומטית.USE master; GO ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN; ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
בודקים את הסטטוס של קבוצת הזמינות.
SELECT * FROM sys.dm_hadr_availability_group_states; GO
הערך של
synchronization_health_descאמור להיותHEALTHY
באמצעות SQL Server Management Studio
כדי להגדיר זמינות גבוהה לקבוצת הזמינות באמצעות SQL Server Management Studio:
- בחלון Object Explorer, לוחצים לחיצה ימנית על Always On זמינות גבוהה ובוחרים באפשרות New Availability Group Wizard.
- בדף Specify Options, מגדירים את שם קבוצת הזמינות ל-
bookshelf-agולוחצים על Next. - בדף Select Databases, בוחרים את מסד הנתונים
bookshelfולוחצים על Next. בדף Specify Replicas, בוחרים בכרטיסייה Replicas.
- לוחצים על הוספת רפליקה.
בתיבת הדו-שיח Connect to server, מזינים את שם השרת
node-2ולוחצים על Connect.רשימת העותקים הזמינים מכילה עכשיו את המכונות של SQL Server,
node-1ו-node-2.מגדירים את Availability mode ל-Synchronous commit בשני המכונות.
מגדירים את Automatic failover ל-Enabled בשני המופעים.
לוחצים על הכרטיסייה Listener (מאזין).
- בוחרים באפשרות Create an availability group listener.
מזינים את ההגדרות הבאות.
- שם ה-DNS של המאזין:
bookshelf - יציאה:
1433 - מצב רשת: כתובת IP סטטית
- שם ה-DNS של המאזין:
לוחצים על Add ומזינים את כתובת ה-IP של המאזין (
) ששמרתם קודם למאזן העומסים הפנימי. ואז לוחצים על אישור.LISTENER_IP
לוחצים על הבא.
בדף Select Data Synchronization, בוחרים באפשרות Automatic Seeding.
בדף Validation, מוודאים שכל הבדיקות עברו בהצלחה.
בדף Summary, לוחצים על Finish.
בדף תוצאות, לוחצים על סגירה.
יצירת מאזני עומסים פנימיים ובדיקות תקינות
כתובת ה-IP של האשכול מייצגת נקודת קצה אחת של אשכול יתירות הכשל של Windows. הוא משמש למטרות ניהוליות ולניהול משאבי האשכול. כתובת ה-IP של האשכול תמיד מפנה לצומת המארח (או הראשי) של האשכול. פורסים מאזן עומסים פנימי שמשתמש בבדיקת תקינות כדי לוודא שהתנועה מופנית לצומת המארח של האשכול. כלי WSFC דורשים שכמה פרוטוקולים יהיו זמינים להעברה (ICMP, UDP ו-TCP), לכן מומלץ לפרוס מאזן עומסים פנימי עם כמה פרוטוקולים שתומכים בכל היציאות.
כדי לפרוס מאזן עומסים פנימי:
- חוזרים לסשן הקיים של Cloud Shell.
יוצרים שתי קבוצות של מכונות לא מנוהלות, אחת לכל אזור, ומוסיפים את שני הצמתים לקבוצות.
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
יוצרים בדיקת תקינות לכתובת ה-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"
יוצרים שירות לקצה העורפי ומוסיפים את שתי קבוצות המכונות הקיימות.
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
יוצרים את מאזן העומסים הפנימי שמשויך לכתובת ה-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, צריך לפרוס מאזן עומסים פנימי חדש שמיועד לקבוצת הזמינות הזו, לפי השלבים הבאים:
יוצרים בדיקת תקינות למאזין של קבוצת הזמינות, שמאזן העומסים יכול להשתמש בה כדי לקבוע מהו הצומת הראשי בקבוצת הזמינות של
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.יוצרים שירות חדש לקצה העורפי ומוסיפים את שתי קבוצות המכונות.
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
יוצרים את מאזן העומסים הפנימי שמשויך למאזין של קבוצת הזמינות של SQL Server
bookshelf-ag.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 הסטטית של המאזין של קבוצת הזמינות.
בדיקת יתירות הכשל
עכשיו אפשר לבדוק אם יתירות הכשל פועלת כצפוי:
- חוזרים לסשן של PowerShell ב-
witness. מריצים את הסקריפט הבא.
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 באמצעות מאזין קבוצת הזמינות, ושולח שאילתה לשם השרת.
משאירים את הסקריפט פועל.
חוזרים לסשן של Remote Desktop ב-
node-1כדי להפעיל יתירות כשל.- ב-SQL Server Management Studio, עוברים אל Always On High Availability > Availability Groups > bookshelf-ag (Primary) ולוחצים לחיצה ימנית על הצומת.
- בוחרים באפשרות יתירות כשל.
- בדף Select new primary replica, מוודאים שהרפליקה
node-2נבחרה כרפליקה הראשית החדשה, ושהערך בעמודה Failover readiness הואNo data loss. אחר כך לוחצים על הבא. - בדף Connect to replica, לוחצים על Connect.
- בתיבת הדו-שיח Connect to server, מוודאים ששם השרת הוא
node-2ולוחצים על Connect. - לוחצים על הבא ואז על סיום.
- בדף Results, מוודאים שמעבר הגיבוי נכשל.
חוזרים לסשן של PowerShell ב-
witness.בודקים את הפלט של הסקריפט שפועל ורואים ששם השרת משתנה מ-
node-1ל-node-2כתוצאה מיתירות הכשל.כדי לעצור את הסקריפט, לוחצים על
Ctrl+C.
הסרת המשאבים
אחרי שמסיימים את המדריך, אפשר למחוק את המשאבים שנוצרו, כדי שהם יפסיקו להשתמש במכסה ולצבור חיובים. בסעיפים הבאים מוסבר איך למחוק או להשבית את המשאבים האלו.
מחיקת הפרויקט
הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך הזה.
כדי למחוק את הפרויקט:
- במסוף Google Cloud , נכנסים לדף Manage resources.
- ברשימת הפרויקטים, בוחרים את הפרויקט שרוצים למחוק ולוחצים על Delete.
- כדי למחוק את הפרויקט, כותבים את מזהה הפרויקט בתיבת הדו-שיח ולוחצים על Shut down.