יצירת פריסה במכונות וירטואליות

במאמר הזה מוסבר איך לפרוס את Spanner Omni במכונות וירטואליות (VM). אין הצפנה בפריסה הזו. אם אתם רוצים להגדיר במהירות סביבת בדיקה או הוכחת היתכנות כדי להעריך את Spanner Omni, יצירת פריסה לא מאובטחת היא הדרך הכי מהירה להתחיל, כי היא לא מחייבת אתכם להגדיר mTLS או אמצעי אבטחה אחרים. עם זאת, בגלל סיכוני אבטחה כמו תנועת רשת לא מוצפנת וגישה פתוחה, לא מומלץ להשתמש בתצורה הזו בסביבות ייצור. אתם יכולים לבחור בין פריסה של שרת יחיד לבין פריסה אזורית בכמה אזורים.

גרסת הטרום-השקה של Spanner Omni לא תומכת בהצפנת TLS, והיא מפסיקה לכתוב נתונים 90 יום אחרי שיוצרים פריסה. כדי לקבל גישה מוקדמת למהדורה עם כל התכונות, אפשר לפנות אל Google.

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

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

  • גישת SSH: צריכה להיות לכם גישת SSH לכל מכונה בפריסה כדי להוריד ולהפעיל את הקובץ הבינארי של Spanner Omni.

  • קישוריות: כל המכונות בפריסה יכולות להתחבר זו לזו.

  • Networking: הגדרת הרשת מאפשרת תקשורת TCP ביציאות 15000 עד 15025.

  • אחסון: לכל מכונה יש מספיק נפח אחסון כדי לארח את הנתונים שהפריסה מטפלת בהם.

  • דרישות המערכת: מוודאים שההגדרה עומדת בכל דרישות המערכת.

  • הגדרת vSphere: אם אתם מריצים את Spanner Omni בפלטפורמת הווירטואליזציה vSphere, צריך להשבית את הווירטואליזציה של מונה חותמות הזמן (TSC). מוסיפים את monitor_control.virtual_rdtsc = FALSE לקובץ ההגדרות .vmx של המכונה הוירטואלית.

שלב 1: קובעים את טופולוגיית הפריסה

ב-Spanner Omni נעשה שימוש בהיררכיה של מיקומים, אזורים ושרתים כדי להגדיר את טופולוגיית הפריסה. אפשר לבחור מבין הטופולוגיות הבאות בהתאם ליעדי הזמינות שלכם:

  • שרת יחיד: הפריסה כוללת שרת יחיד שפועל במכונה יחידה.

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

  • מיקום יחיד, אזורים מרובים (פריסה משוכפלת): הפריסה פועלת בכמה שרתים שמפוזרים בכמה אזורים במיקום אחד.

  • מספר מיקומים, מספר אזורים: הפריסה פועלת במספר שרתים שמפוזרים במספר מיקומים ובמספר אזורים.

מידע נוסף זמין במאמרים מונחי מפתח ב-Spanner Omni והגדרות פריסה של Spanner Omni.

לכל פריסה שאינה שרת יחיד, יוצרים קובץ הגדרות YAML בשם deployment.yaml שמגדיר את הטופולוגיה. בקבצים האלה מציינים רק את שרתי הבסיס. אפשר להוסיף שרתים שאינם שרתי בסיס בהמשך.

דוגמה: פריסה משוכפלת בכמה אזורים

בדוגמה הבאה מוצגת הגדרה לפריסה אזורית בשלושה אזורים.

name: regional-deployment
location:
  - name: us-central1
zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver1
  - name: us-central1-b
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver2
  - name: us-central1-c
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver3

דוגמה: פריסה בכמה מיקומים

בדוגמה הבאה מוצגת הגדרה לפריסה בשלושה מיקומים.

name: multi-location-deployment
location:
  - name: us-central1
  - name: europe-west2
  - name: asia-southeast1
zone:
  - name: us-central1-a
    location: us-central1
    single_server: false
    root_server:
      - host: rootserver1
  - name: europe-west2-a
    location: europe-west2
    single_server: false
    root_server:
      - host: rootserver2
  - name: asia-southeast1-a
    location: asia-southeast1
    single_server: false
    root_server:
      - host: rootserver3

שלב 2: הורדה והגדרה של הקובץ הבינארי

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

  1. יוצרים ספרייה לקובץ הבינארי ועוברים אליה.

  2. מורידים את הקובץ הבינארי:

    gsutil cp gs://spanner-omni/VERSION/spanner-omni-VERSION-linux-x86_64.tar.gz .
    

    אפשר גם להשתמש ב-scp או בכלי העברת קבצים אחרים כדי להעתיק את הקובץ הבינארי למכונות הווירטואליות.

  3. מחילוץ הקובץ הבינארי:

    tar -xvf spanner-omni-VERSION-linux-x86_64.tar.gz
    

שלב 3: הפעלת השרתים

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

אפשרות א': פריסה של שרת יחיד

בפריסה של שרת יחיד, מריצים את הפקודה הבאה:

spanner start-single-server --base-dir=SPANNER_BASE_DIR

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

אפשרות ב': פריסת הרחבה

בפריסות של הרחבת השרת, מפעילים את השרת בכל מכונה. הערכים של הדגלים --server-address ו---zone תואמים לערכים בהגדרות הפריסה. הרשת פותרת את server_address.

spanner start --root --server-address=RESOLVABLE_HOSTNAME --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR

לדוגמה:

spanner start --root --server-address=rootserver1 --zone=us-central-1a --base-dir=./spanbasedir

שלב 4: יצירת הפריסה

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

  1. מעתיקים את הקובץ deployment.yaml שיצרתם בשלב 1: קביעת טופולוגיית הפריסה לאחד משרתי הבסיס.

  2. בשרת הבסיס הזה, מריצים את הפקודה הבאה כדי ליצור את הפריסה:

    spanner deployment create --config-file=deployment.yaml
    

    במסוף של כל מכונה מוצגות הודעות שמציינות שהפריסה מוכנה.

  3. כדי לאמת את הפריסה, מריצים את הפקודה הבאה כדי להציג את האזורים:

    spanner deployment zones list
    

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

שלב 5: (אופציונלי) הגדרת מאזן עומסים

מגדירים מאזן עומסים מסוג TCP עם הפרטים הבאים:

הגדרה ערך
פרוטוקול TCP
כתובת IP של השרת העורפי כתובות ה-IP של השרתים
יציאה 15000 (או היציאה שבה אתם משתמשים בדגל --server-address)
כתובת URL של בדיקת תקינות http://SERVER_IP:15012/healthz
שיטת איזון סדר סיבובי

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

שלב 6: אינטראקציה עם הפריסה

אחרי שהפריסה מוכנה, אפשר ליצור איתה אינטראקציה באמצעות ה-CLI מכל מכונה וירטואלית או ממחשב מקומי. אם מריצים את ה-CLI ממכונה נפרדת, כמו מחשב נייד של מפתח, צריך להוריד ולחלץ את חבילת ה-CLI. מידע נוסף זמין במאמר מדריך למתחילים לשימוש ב-Spanner Omni CLI.

כדי ליצור אינטראקציה עם הפריסה, פועלים לפי השלבים הבאים:

  1. יצירת מסד נתונים:

    spanner --deployment-endpoint=LOAD_BALANCER_IP_OR_SERVER_IP databases create DATABASE_NAME
    
  2. פותחים את מעטפת ה-SQL:

    spanner sql --database=DATABASE_NAME
    
  3. יצירת טבלה והוספת נתונים:

    CREATE TABLE names (
      nameId INT64 NOT NULL,
      name STRING(100)
    ) PRIMARY KEY (nameId);
    
    INSERT INTO names (nameId, name) VALUES (1, "Jack");
    
  4. מאמתים את מסד הנתונים והנתונים:

    כדי להציג רשימה של מסדי נתונים: bash spanner databases list

    הפלט אמור להיראות כך:

    שם STATE VERSION_RETENTION_PERIOD EARLIEST_VERSION_TIME ENABLE_DROP_PROTECTION
    DATABASE_NAME מוכן שעה 2025-02-07T12:25:30Z FALSE

    כדי לשלוח שאילתה לטבלה: bash spanner sql --database=DATABASE_NAME

  5. מריצים את פקודות ה-SQL הבאות:

    SHOW TABLES;
    SELECT * FROM names;
    

שלב 7: (אופציונלי) שינוי קנה המידה של הפריסה

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

spanner start --server-address=NON_ROOT_HOSTNAME --join-servers=SERVER1:PORT1,SERVER2:PORT2,SERVER3:PORT3 --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR

שלב 8: (אופציונלי) מעקב אחר הפריסה

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

הגדרת Prometheus

שרתי Spanner Omni מייצאים מדדים בפורמט Prometheus ביציאה 15012. מוסיפים את הנתונים הבאים לקובץ scrape_configs ב-prometheus.yml:

scrape_configs:
  - job_name: 'spanner'
    static_configs:
      - targets: ['HOST1:15012', 'HOST2:15012', 'HOSTN:15012']

הגדרת Grafana

כדי לראות את נתוני המעקב ב-Grafana:

  1. מגדירים את מקור הנתונים של Prometheus על ידי יצירת קובץ ב-provisioning/datasources:

    apiVersion: 1
    datasources:
      - name: Prometheus
        uid: prometheus
        type: prometheus
        access: proxy
        url: http://PROMETHEUS_HOST:PROMETHEUS_PORT
        jsonData:
          httpMethod: POST
          manageAlerts: false
          prometheusType: Prometheus
          prometheusVersion: PROMETHEUS_VERSION
          cacheLevel: 'High'
          disableRecordingRules: false
          incrementalQueryOverlapWindow: 10m
    
  2. יוצרים מרכז בקרה בממשק המשתמש של Grafana או מקצים אותו באמצעות provisioning/dashboards.

הגדרת התראות

אפשר להגדיר התראות באמצעות ממשק המשתמש של Grafana או קובצי התצורה. לדוגמה, אפשר להפעיל התראה אם האחוזון ה-95 (p95) של זמן האחזור של העסקה חורג מ-100 אלפיות השנייה. רשימת ההתראות הזמינות מופיעה במאמר שימוש בהתראות Prometheus כדי לעקוב אחרי Spanner Omni.

איסוף וניתוח של עקבות

אוספים מידע על מעקב מבוזר בפורמט OTLP ומציגים אותו באופן חזותי באמצעות כלים כמו Jaeger.

  1. מגדירים כלי לאיסוף נתוני מעקב שתואם ל-OTLP. ב-Jaeger:

    export COLLECTOR_OTLP_ENABLED=true
    jaeger-all-in-one
    

    מוודאים שהיציאה של OTLP מאפשרת תעבורת נתונים ברשת בין Spanner Omni לבין האוסף.

  2. מגדירים את משתנה הסביבה SPANNER_BOX_OTLP_TRACE_EXPORTER_ENDPOINT ומפעילים את שרתי Spanner Omni:

    export SPANNER_BOX_OTLP_TRACE_EXPORTER_ENDPOINT=COLLECTOR_HOST:COLLECTOR_PORT
    spanner start --root --server-address=RESOLVABLE_HOSTNAME --zone=ZONE_NAME --base-dir=SPANNER_BASE_DIR
    

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