במאמר הזה מתוארות הגדרות פריסה של Spanner Omni במכונות וירטואליות (VM) או בשרתי מתכת חשופה. במאמר מוסבר על המבנה ואפשרויות ההגדרה של קובץ הגדרות הפריסה ב-YAML (deployment.yaml) שמשמש להגדרת טופולוגיות של פריסת מכונות וירטואליות ופרמטרים של זמן ריצה כשמשתמשים ב-Spanner Omni CLI.
כדי ללמוד איך ליצור פריסה, אפשר לעיין באחד מהמאמרים הבאים:
- יצירת פריסה במכונות וירטואליות
- יצירת פריסה מאובטחת במכונות וירטואליות
- יצירת פריסה ב-Kubernetes
- יצירת פריסה מאובטחת ב-Kubernetes
סקירה כללית של הגדרת הפריסה
כשיוצרים פריסה במכונות וירטואליות או בשרתי מתכת חשופה, מעבירים את קובץ ההגדרות הזה לפקודה spanner deployment create ב-CLI של Spanner Omni:
spanner deployment create --config-file=deployment.yaml
הגדרות הפריסה מגדירות את הרכיבים העיקריים הבאים:
- מצב שרת יחיד: מצב אופטימיזציה שמגביל את כל הפריסה לשרת יחיד לצורך פיתוח ובדיקה.
- Locations: אתרים פיזיים או אזורים בענן שבהם נמצאים השרתים שלכם.
- מרחקי מיקום: השהיות ברשת בין זוגות של מיקומים.
- אזורים: קבוצות לוגיות של שרתים שמייצגות עותקים משוכפלים של Paxos.
- שרתי Root: שרתים ייעודיים שאחראים על מטא-נתונים של אזורים ועל קוורום של חברים.
- Replica types: תפקידים לכל אזור (קריאה-כתיבה, עדות או קריאה בלבד).
- הסכם רמת שירות (SLA) של השעון: פרמטרים של סנכרון TrueTime, כולל תנודות בשעון ושגיאה בשיעור הסחיפה.
- הגדרות פריסה: הגדרות גלובליות כמו מיקומי מנהיגים מועדפים והגדרות אבטחה של אימות.
מבנה קובץ התצורה
בדוגמה הבאה מוצג המבנה ברמה העליונה של קובץ הגדרות פריסה:
# Deployment name
name: regional-deployment
# Restrict the entire deployment to a single server (optional, default: false)
single_server: false
# Physical or logical locations (regions)
location:
- name: us-central1
# Network distances between locations (optional)
location_distance:
- src: us-central1
dest: us-east1
latency_ms: 30
# Zones and root servers in the deployment
zone:
- name: us-central1-a
location: us-central1
single_server: false
replica_type: READ_WRITE
root_server:
- host: rootserver1.example.internal
port_base: 15000
# Clock synchronization SLA parameters (optional)
clock_sla:
jitter_in_s: 0.005
rate_error_in_ppm: 200
# Deployment settings (optional)
deployment_settings:
preferred_leader_location: us-central1
security_settings:
insecure_mode: true
שדות ברמה העליונה
הגדרות הפריסה תומכות בשדות הבאים ברמה העליונה:
| שדה | סוג | תיאור |
|---|---|---|
name |
String | שם הפריסה, למשל prod, staging או regional-deployment. |
single_server |
בוליאני | זה שינוי אופציונלי. אם הערך הוא true, כל הפריסה היא פריסה של שרת יחיד, והיא מוגבלת לאזור אחד ולשרת אחד. אי אפשר להוסיף אזורים או שרתים לפריסות שנוצרו באמצעות single_server: true אחרי שהן נוצרו. אם רוצים להריץ את Spanner Omni במצב של שרת יחיד, לא צריך ליצור את ההגדרה הזו באופן ידני כי Spanner Omni יוצר אותה באופן אוטומטי כשמריצים את הפקודה spanner
start-single-server. ברירת המחדל היא false. |
location |
רשימת אובייקטים | המיקומים הפיזיים או הלוגיים (אזורים) בפריסה. |
location_distance |
רשימת אובייקטים | זה שינוי אופציונלי. זמן האחזור ברשת בין זוגות של מיקומים. |
zone |
רשימת אובייקטים | חובה. האזורים שמרכיבים את הפריסה. צריך לציין לפחות אזור אחד. |
clock_sla |
אובייקט | זה שינוי אופציונלי. הפרמטרים של הסכם רמת השירות (SLA) של שירות סנכרון השעון לתוכנת TrueTime. |
deployment_settings
|
אובייקט | זה שינוי אופציונלי. הגדרות זמן ריצה למיקום מועדף של שרת ראשי ולאימות אבטחה. |
שם הפריסה
בשדה name מצוין שם שהמשתמש בחר לפריסה. אפשר להשתמש בכל מחרוזת שמזהה את הפריסה, כמו prod, staging או regional-deployment.
מצב שרת יחיד
השדה single_server ברמה העליונה מציין שכל הפריסה היא פריסה של שרת יחיד. כשההגדרה הזו מוגדרת לערך true, הפריסה מוגבלת לאזור אחד ולשרת אחד, וכך מצטמצם העומס על המשאבים בסביבות פיתוח ובדיקה מקומיות. אי אפשר להוסיף אזורים או שרתים לפריסות שנוצרו באמצעות single_server:true אחרי שהן נוצרו.
אם רוצים להריץ את Spanner Omni במצב של שרת יחיד, לא צריך ליצור את ההגדרה הזו באופן ידני. כשמריצים את הפקודה spanner
start-single-server, Spanner Omni יוצר את ההגדרה הזו באופן אוטומטי. מידע נוסף זמין במאמר אפשרות א': פריסה של שרת יחיד.
השדה single_server ברמה העליונה שונה מהשדה single_server ברמת האזור:
- השדה ברמה העליונה
single_serverחל על כל הפריסה. - השדה zone-level
single_serverרלוונטי רק לאזור ספציפי בפריסה. מידע נוסף מופיע במאמר בנושא אזורים עם שרת יחיד.
מיקומים
מיקום מייצג מרכז נתונים פיזי או אזור בענן שבו נמצאים המכונות (שווה לאזור ב- Google Cloud).
מגדירים מיקומים ברשימה location:
location:
- name: us-central1
- name: europe-west2
שמות המיקומים צריכים לעמוד בדרישות הבאות:
- הוא חייב להתחיל באות ולהסתיים באות או בספרה.
- הוא יכול להכיל רק אותיות, ספרות, קווים תחתונים (
_) ומקפים (-). - אפשר גם לכלול קידומת דומיין ואחריה נקודתיים (לדוגמה,
cloud.google.com:us-east1אוonprem:datacenter1). - אי אפשר להשתמש בשם השמור
default. - חייב להיות ייחודי בכל הפריסה.
מרחקים מהמיקום
הרשימה location_distance מציינת את זמן האחזור ברשת בין זוגות של מיקומים. Spanner Omni משתמש במידע הזה כדי לבצע אופטימיזציה של השכפול וניתוב השאילתות.
location_distance:
- src: us-central1
dest: europe-west2
latency_ms: 105
- src: europe-west2
dest: us-central1
latency_ms: 110
כל אובייקט של מרחק ממיקום מכיל את השדות הבאים:
-
src: חובה. השם של מיקום המקור. הערך צריך להיות זהה למיקום מוגדר ברשימהlocation. -
dest: חובה. שם מיקום היעד. הערך צריך להיות זהה למיקום מוגדר, ולא יכול להיות זהה לערךsrc. -
latency_ms: זמן האחזור ברשת באלפיות השנייה. הערך חייב להיות מספר שלם לא שלילי. אם לא מציינים את הערך הזה, Spanner Omni מניח שההשהיה זניחה (פחות ממילי-שנייה).
השהיית הרשת ברשתות פיזיות לא תמיד סימטרית. אם מציינים גם את (src, dest) וגם את (dest, src), Spanner Omni יתייחס לשני המדדים. אם מספקים רק כיוון אחד, Spanner Omni מניח שההשהיה בכיוון ההפוך זהה.
תחומים
תחום (zone) הוא קיבוץ לוגי של שרת אחד או יותר במיקום מסוים. לשכפול נתונים, כל אזור מייצג עותק Paxos. פריסה חייבת לכלול לפחות אזור אחד.
zone:
- name: us-central1-a
location: us-central1
single_server: false
replica_type: READ_WRITE
root_server:
- host: rootserver1.example.internal
port_base: 15000
- host: rootserver2.example.internal
port_base: 15000
- host: rootserver3.example.internal
port_base: 15000
כל אובייקט של אזור תומך בשדות הבאים:
| שדה | סוג | תיאור |
|---|---|---|
name |
String | חובה. שם האזור. השם צריך לעמוד באותם כללים כמו שמות של מיקומים. חייב להיות ייחודי בכל הפריסה. |
location |
String | השם של המיקום שבו נמצא האזור. הערך צריך להיות זהה למיקום מוגדר ברשימה location. אם לא מציינים אזור, Spanner Omni מקצה את האזור למיקום default. |
single_server
|
בוליאני | זה שינוי אופציונלי. אם הערך הוא true, המשמעות היא שלאזור הזה יש רק שרת אחד (יכול להיות רק שרת בסיס אחד ולא שרתים אחרים). מבטל את התקורה של שכפול מטא-נתונים של אזור בתוך האזור.
בפריסה של כמה אזורים, אפשר להגדיר את הערך הזה ל-true עבור
אזורים ספציפיים, כמו אזור רפליקה WITNESS שלא
מאחסן נתוני משתמשים, בעוד שאזורים אחרים כוללים כמה שרתים. ברירת המחדל היא false. |
replica_type |
מחרוזת enum | תפקיד הרפליקה של האזור בקוורומים של Paxos. הערכים הנתמכים הם READ_WRITE, WITNESS ו-READ_ONLY. ברירת המחדל היא READ_WRITE. |
root_server |
רשימת אובייקטים | חובה. רשימת שרתי הבסיס באזור. |
סוגי רפליקות
Spanner Omni תומך בשלושה סוגים של עותקים משוכפלים לאזורים:
-
READ_WRITE: מאחסן עותק מלא של נתוני המשתמשים, משרת בקשות קריאה ומצביע בקוורומים של Paxos. עותקים לקריאה ולכתיבה יכולים להפוך למובילי Paxos כדי להציע פעולות כתיבה. -
WITNESS: מצביעים בקוורומים של Paxos כדי להגיע להסכמה, אבל לא יכולים להפוך למובילים. עותקים משניים של עדים לא מאחסנים נתוני משתמשים ולא יכולים לטפל בבקשות קריאה. הם עוזרים להשיג קוורום בלי תקורה של אחסון או חביון כתיבה של רפליקה מלאה במיקומים מרוחקים. -
READ_ONLY: מאחסן עותק מלא של נתוני המשתמשים שמשוכפלים באופן אסינכרוני מהשרתים הראשיים. רפליקות לקריאה בלבד לא יכולות להפוך למובילות ולא מצביעות בקוורומים של Paxos. הם מפחיתים עומס של תעבורת קריאה מרפליקות קריאה-כתיבה.
כשמגדירים סוגי רפליקות, צריך לוודא שהפריסה עומדת בכללים הבאים:
- הפריסה חייבת להכיל לפחות אזור
READ_WRITEאחד. - מספר האזורים של
READ_WRITEחייב להיות גדול ממספר האזורים שלWITNESS.
שרתי בסיס
לשרתי הבסיס יש תפקידים מיוחדים ב-Spanner Omni. הם מאחסנים מטא-נתונים של אזורים ומנהלים את החברות בשרתים אחרים באזור. אם קבוצת שרתים של שרתי הבסיס לא זמינה, כל התחום לא זמין.
כשמגדירים שרתי בסיס ב-deployment.yaml, חשוב לזכור את ההנחיות הבאות:
- מספר שרתי הבסיס לכל אזור צריך להיות מספר אי-זוגי בין אחד לתשעה, כולל, כדי להבטיח קוורום לעקביות. אם מספר השרתים הוא מספר זוגי, יכול להיות שהפריסות ייכשלו. כשמגדירים את האזורים, מציינים ששרתים מסוימים הם שרתי הבסיס. מומלץ להשתמש באחד מהם לפיתוח או לבדיקות, ובשלושה מהם לאזורי ייצור עם זמינות גבוהה.
- צריך לציין רק שרתי בסיס בקובץ
deployment.yamlבמהלך היצירה של הפריסה הראשונית. אפשר להוסיף שרתים שאינם שרתי בסיס בשלב מאוחר יותר כדי להגדיל את קיבולת המחשוב והאחסון.
כל אובייקט של שרת שורש תומך בשדות הבאים:
-
host: חובה. שם המארח או כתובת ה-IP של המכונה שבה פועל השרת. -
port_base: אופציונלי. מספר היציאה ההתחלתי של השרת. ברירת המחדל היא15000. היציאה הזו הופכת ליציאת ה-gRPC הציבורית לחיבורי לקוחות. צריך להזמין יציאות בטווח[port_base + 1, port_base + 31](לדוגמה,15001עד15031) לתהליכים פנימיים של Spanner Omni.
אזורים של שרת יחיד
השדה single_server ברמת התחום מציין שתחום מסוים מכיל רק שרת אחד. לאזור עם שרת יחיד יכול להיות רק שרת בסיס אחד, ואי אפשר להוסיף לו שרתים נוספים בהמשך. ההגדרה הזו מבטלת את התקורה של שכפול מטא-נתונים של אזור בתוך האזור הזה.
בשונה מהשדה single_server ברמה העליונה, שמציין שהפריסה כולה מורכבת משרת יחיד, השדה single_server ברמת האזור חל רק על האזור הספציפי הזה.
בפריסה מרובת אזורים, אתם יכולים להגדיר אזורים בודדים כאזורים עם שרת יחיד, בזמן שאזורים אחרים מכילים כמה שרתים. לדוגמה, נניח שיש פריסה עם שני אזורי רפליקה של READ_WRITE ואזור רפליקה אחד של WITNESS:
- שני התחומים
READ_WRITEמכילים כמה שרתים (single_server: false) כדי לספק זמינות גבוהה ולהרחיב את יכולות המחשוב והאחסון של נתוני המשתמשים. - אפשר להגדיר את אזור
WITNESSכאזור עם שרת יחיד או כאזור עם כמה שרתים, בהתאם לנפח ההצבעה של Paxos:- עומסי עבודה קטנים עד בינוניים: אם למכונה וירטואלית או לשרת יחיד יש מספיק קיבולת לעיבוד כל התנועה של הצבעות Paxos לפריסה, מגדירים את
single_server: true. מכיוון שרפליקות של עדים רק מצביעות ולא שומרות נתוני משתמשים, השימוש בשרת יחיד מבטל את התקורה של שכפול מטא-נתונים בתוך אזור. - פריסות בקנה מידה גדול: אם יש לכם תפוקת כתיבה גבוהה או הרבה שרתים בכל אזור
READ_WRITE(לדוגמה, עשרות או מאות צמתים), שרת יחיד עלול להיות עמוס מדי ולגרום לכשלים בהסכמה של Paxos. מגדירים את אזורWITNESSעם כמה שרתים (single_server: false) כדי לחלק את עומס העבודה של ההצבעה.
- עומסי עבודה קטנים עד בינוניים: אם למכונה וירטואלית או לשרת יחיד יש מספיק קיבולת לעיבוד כל התנועה של הצבעות Paxos לפריסה, מגדירים את
דוגמה להגדרה מופיעה במאמר בנושא פריסה במספר מיקומים עם עותק משוכפל של עד.
הסכם רמת שירות (SLA) של שעון
Spanner Omni מסתמך על תוכנת TrueTime כדי לספק עקביות חיצונית בלי לדרוש חומרת GPS מיוחדת או שעונים אטומיים. אובייקט
clock_sla מגדיר את גבולות הסנכרון הצפויים לשעוני השרתים בכל הפריסה:
clock_sla:
jitter_in_s: 0.005
rate_error_in_ppm: 200
ההגדרה clock_sla כוללת את השדות הבאים:
-
jitter_in_s: השגיאה המקסימלית הצפויה בשעון, בשניות. חייב להיות מספר בשיטת נקודה צפה לא שלילי (>= 0). -
rate_error_in_ppm: השגיאה המקסימלית בקצב סחיפת השעון בחלקים למיליון (ppm). הערך צריך להיות בין0ל-10000.
מידע נוסף על סנכרון זמן מופיע במאמר בנושא TrueTime ועקביות חיצונית.
הגדרות הפריסה
אובייקט deployment_settings מגדיר את אופן הפריסה הגלובלי, כולל העדפה למיקום של השרת הראשי ואבטחת הרשת:
deployment_settings:
preferred_leader_location: us-central1
security_settings:
insecure_mode: false
authentication_methods:
- AUTHENTICATION_METHOD_PASSWORD
- AUTHENTICATION_METHOD_CLIENT_CERTIFICATE
password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE
מיקום מועדף של מנהיג
השדה preferred_leader_location מציין מיקום שבו ממוקמים מנהיגי Paxos באופן מועדף. בחירת מובילים קרוב לעומס העבודה של האפליקציה הראשית מפחיתה את זמן האחזור של פעולות הכתיבה, כי לא צריך לבצע עוד נסיעות הלוך ושוב ברשת.
כשמגדירים את preferred_leader_location, חשוב לוודא את הפרטים הבאים:
- המיקום שצוין צריך להיות זהה למיקום שמוגדר ברשימה
location(אוdefault). - המיקום המיועד חייב להכיל לפחות אזור
READ_WRITEאחד.
הגדרות אבטחה
אובייקט security_settings מגדיר מצבי אימות והצפנה:
-
insecure_mode: בוליאני. אם הערך הואtrue, האימות וההרשאה של חיבורים נכנסים מושבתים. המצב הזה מיועד ליצירת אב טיפוס ולהערכה בלבד. ברירת המחדל היאfalse. -
authentication_methods: רשימה של שיטות אימות שמופעלות. חובה אם הערך שלinsecure_modeהואfalse. ערכים נתמכים:-
AUTHENTICATION_METHOD_PASSWORD: הפעלה של אימות באמצעות שם משתמש וסיסמה. -
AUTHENTICATION_METHOD_CLIENT_CERTIFICATE: הפעלה של אימות אישורי לקוח באמצעות TLS הדדי (mTLS).
-
-
password_authentication_protocol: הפרוטוקול שמשמש לאימות הסיסמה. חובה אם המאפייןAUTHENTICATION_METHOD_PASSWORDנכלל במאפייןauthentication_methods. ערך נתמך:-
PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE: משתמש בפרוטוקול OPAQUE אסימטרי להחלפת מפתחות מאומתת באמצעות סיסמה.
-
מידע נוסף על הגדרת הצפנה ופרטי כניסה זמין במאמר בנושא יצירת פריסה עם הצפנת TLS במכונות וירטואליות.
דוגמאות להגדרות פריסה
בדוגמאות הבאות מוסבר על תבניות פריסה נפוצות.
פריסה אזורית מרובת אזורים
ההגדרה הבאה יוצרת פריסה אזורית של זמינות גבוהה בשלושה אזורים במיקום יחיד:
name: regional-prod
location:
- name: us-central1
zone:
- name: us-central1-a
location: us-central1
replica_type: READ_WRITE
root_server:
- host: root-a1.example.internal
- host: root-a2.example.internal
- host: root-a3.example.internal
- name: us-central1-b
location: us-central1
replica_type: READ_WRITE
root_server:
- host: root-b1.example.internal
- host: root-b2.example.internal
- host: root-b3.example.internal
- name: us-central1-c
location: us-central1
replica_type: READ_WRITE
root_server:
- host: root-c1.example.internal
- host: root-c2.example.internal
- host: root-c3.example.internal
פריסה בכמה מיקומים עם רפליקה של עד
ההגדרה הבאה יוצרת פריסה בכמה מיקומים שמשתרעת על שני מרכזי נתונים ועל אתר עדים, עם מיקום מועדף של הליבה. הרשימה location_distance מציינת השהיות ריאליסטיות ולא סימטריות ברשת בין כל זוג מיקומים. כל אחד משני האזורים READ_WRITE משתמש בשלושה שרתי בסיס לזמינות גבוהה, ואילו האזור WITNESS משתמש ב-single_server:
true עם שרת בסיס יחיד, כי העותקים המשוכפלים של העדים לא מאחסנים נתוני משתמשים:
name: multi-site-deployment
location:
- name: datacenter-east
- name: datacenter-west
- name: datacenter-central
location_distance:
- src: datacenter-east
dest: datacenter-central
latency_ms: 25
- src: datacenter-central
dest: datacenter-east
latency_ms: 27
- src: datacenter-central
dest: datacenter-west
latency_ms: 30
- src: datacenter-west
dest: datacenter-central
latency_ms: 32
- src: datacenter-east
dest: datacenter-west
latency_ms: 55
- src: datacenter-west
dest: datacenter-east
latency_ms: 58
zone:
- name: east-zone-1
location: datacenter-east
replica_type: READ_WRITE
root_server:
- host: east-root-1.example.internal
- host: east-root-2.example.internal
- host: east-root-3.example.internal
- name: west-zone-1
location: datacenter-west
replica_type: READ_WRITE
root_server:
- host: west-root-1.example.internal
- host: west-root-2.example.internal
- host: west-root-3.example.internal
- name: central-witness-zone
location: datacenter-central
single_server: true
replica_type: WITNESS
root_server:
- host: witness-root-1.example.internal
deployment_settings:
preferred_leader_location: datacenter-east
פריסה מאובטחת עם TLS ואימות
ההגדרה הבאה מגדירה פריסה עם mTLS ואימות באמצעות סיסמה:
name: secure-deployment
location:
- name: us-central1
zone:
- name: us-central1-a
location: us-central1
replica_type: READ_WRITE
root_server:
- host: server-1.example.internal
port_base: 15000
- host: server-2.example.internal
port_base: 15000
- host: server-3.example.internal
port_base: 15000
deployment_settings:
security_settings:
insecure_mode: false
authentication_methods:
- AUTHENTICATION_METHOD_PASSWORD
- AUTHENTICATION_METHOD_CLIENT_CERTIFICATE
password_authentication_protocol: PASSWORD_AUTHENTICATION_PROTOCOL_OPAQUE
המאמרים הבאים
- יצירת פריסה במכונות וירטואליות
- יצירת פריסה עם הצפנת TLS במכונות וירטואליות
- התאמה של פריסת מכונות וירטואליות לעומס
- תחזוקת פריסה