יצירת הגדרה של זמינות גבוהה

בחירת גרסה של מאמר העזרה:

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

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

  1. כדאי לקרוא את המאמר בנושא זמינות גבוהה ועמידות נתונים.

  2. אם עדיין אין לכם פרויקט, אתם יכולים ליצור Google Cloud פרויקט.

  3. מוודאים שהחיוב מופעל בפרויקט.

  4. פותחים את Cloud Shell במסוף Google Cloud .

  5. במסוף Google Cloud , משכפלים את מאגר המקור הבא.

    git clone https://github.com/GoogleCloudPlatform/cloud-solutions.git
    

התקנה

במדריך הזה נסביר איך פורסים אשכול Patroni עם שלושה צמתים באמצעות AlloyDB Omni, ואשכול etcd עם שלושה צמתים כמאגר ההגדרות. בחלק הקדמי של האשכול, אנחנו משתמשים ב-HAProxy בקבוצת מופעי מכונה מנוהלים עבור כתובת ה-IP הצפה, כדי שהמעבר ליתירות כשל יהיה שקוף ללקוחות.

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

הגדרה שבה HAProxy מנהל את החיבור בין הלקוחות לבין הצומת הראשי

איור 1. הגדרה שבה HAProxy מנהל את החיבור בין הלקוחות לבין הצומת הראשי.

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

עדכון ההגדרה שבו הצומת הראשי שנכשל מוחלף בצומת ההמתנה

איור 2. הגדרות העדכון שבהן הצומת הראשי שנכשל מוחלף בצומת ההמתנה.

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

פריסה

  1. ב-Cloud Shell, אחרי שכפול מאגר הפתרונות של Cloud, עוברים לספריית Terraform.

    cd cloud-solutions/projects/alloydbomni-ha-patroni-etcd/terraform
    
  2. יוצרים ועורכים קובץ terraform.tfvars. בתוך הקובץ, מגדירים ערכים למשתנים הבאים.

    project_id                   = "PROJECT_ID"
    region                       = "REGION"
    zones                        = "ZONES"
    node_count                   = 3
    cluster_name                 = "CLUSTER_NAME"
    replication_user_password    = "REPLICATION_USER_PASSWORD"
    postgres_super_user_password = "PG_SUPER_USER_PASSWORD"
    

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

  3. מריצים את סקריפט Terraform כדי ליצור את כל המשאבים.

    terraform init && terraform apply
    

    הסקריפט הזה יוצר ומגדיר את הפריטים הבאים:

    • שלושה צמתים לאשכול etcd

    • שלושה צמתים לאשכול Patroni

    • צומת אחד ל-HAProxy

הגדרת Patroni כסינכרוני

כדי ש-Patroni ישתמש רק בשכפול סינכרוני באשכול של שלושה צמתים, מוסיפים פריטי הגדרה כמו synchronous_mode, synchronous_node_count, synchronous_commit ו-synchronous_standby_names בקטע bootstrap בקובצי ההגדרה של Patroni. ההגדרה של Patroni מוגדרת בתבנית של סקריפט לטעינה בזמן ההפעלה ובקובץ /alloydb/config/patroni.yml בצמתי Patroni. כדי להשתמש בשכפול סינכרוני, הגדרת האתחול של Patroni צריכה להיראות כך:

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    synchronous_mode: true
    synchronous_node_count: 2
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        hot_standby: "on"
        wal_keep_segments: 20
        max_wal_senders: 8
        max_replication_slots: 8
        synchronous_commit: remote_apply
        synchronous_standby_names: '*'

כשsynchronous_mode מופעל, Patroni משתמש בשכפול סינכרוני בין השרת הראשי לבין שאר העותקים. הפרמטר synchronous_node_count משמש את Patroni לניהול מספר העותקים הסינכרוניים של הנתונים במצב המתנה. ‫Patroni מנהל מספר מדויק של רפליקות בהמתנה סינכרוניות על סמך הפרמטר synchronous_node_count, ומתאים את המצב במאגר ההגדרות וב-synchronous_standby_names ככל שחברים מצטרפים ועוזבים. מידע נוסף על שכפול סינכרוני זמין בקטע מצבי שכפול במסמכי העזרה של Patroni.

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