שדרוג ל-AlloyDB Omni מגרסה 17.5.0 במכונה וירטואלית

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

בדף הזה מוסבר איך לשדרג את קונטיינרים מבוססי AlloyDB Omni PostgreSQL 15 ל-AlloyDB Omni PostgreSQL 16 באמצעות pg_upgrade. ההוראות בדף הזה מתארות את שלבי השדרוג של AlloyDB Omni שנפרס כשרת עצמאי ושל AlloyDB Omni שהוגדר כצמתים משוכפלים במצב המתנה. השימוש ב-pg_upgrade עוזר לוודא שהשדרוג יושלם בלי אובדן נתונים.

מידע נוסף על אפשרויות השדרוג של PostgreSQL זמין במאמר בנושא pg_upgrade.

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

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

    Docker

    docker exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
    

    Podman

    podman exec ALLOYDB15_CONTAINER psql -U postgres -c "SELECT 1;"
    
  • ההרחבה pg_squeeze ב-PostgreSQL 15 לא נתמכת ב-AlloyDB Omni PostgreSQL 17.5.0. אם pg_squeeze מותקן ב-AlloyDB Omni 15, צריך להסיר את התוסף לפני שמבצעים את השדרוג ל-AlloyDB Omni 16.

    אם התקנתם תוספים מותאמים אישית בנוסף ל-AlloyDB Omni, ודאו שהתוספים המותאמים אישית האלה מותקנים גם בתמונה 17.5.0. כדי לבדוק את התוספים המותקנים, מריצים את הפקודה הבאה:

    Docker

    docker exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c "
    SELECT * FROM pg_extension;"
    

    Podman

    podman exec ALLOYDB15_CONTAINER psql -U postgres -d postgres -c "
    SELECT * FROM pg_extension;
    
  • אם אתם משדרגים מגרסה 15.5.2 או מגרסה קודמת של AlloyDB Omni, אתם צריכים קודם לשדרג לגרסה עדכנית יותר של AlloyDB Omni 15. מעבר מגרסה 15.5.2 או מגרסה קודמת של AlloyDB Omni לגרסה העדכנית.

שדרוג AlloyDB Omni בסביבת קונטיינר של Docker

כדי לשדרג מ-AlloyDB Omni PostgreSQL 15 ל-AlloyDB Omni PostgreSQL 17.5.0 בסביבת Docker או Podman container, פועלים לפי השלבים הבאים:

Docker

  1. מעתיקים את bin ומשתפים את הספרייה מהגרסה של קונטיינר AlloyDB Omni שרוצים לשדרג:

    mkdir -p TMP/alloydb15_bin TMP/alloydb15_share
    docker cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin
    docker cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
    
  2. יוצרים ספריית נתונים חדשה למאגר AlloyDB Omni PostgreSQL 16 שבה יאוחסנו הנתונים המשודרגים:

    mkdir -p DATA_PATH/16/data
    chown 999 DATA_PATH/16/data
    
  3. מפעילים את מאגר AlloyDB Omni PostgreSQL 16 שפועל עם כל הנתיבים שמוגדרים באותה רשת כמו מאגר AlloyDB Omni הקודם. אפשר לראות דוגמה בהמשך:

    docker run -d --name ALLOYDB16_CONTAINER \
      -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      -v DATA_PATH/15/data:/var/lib/postgresql/old_data \
      -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \
      -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \
      --network container:ALLOYDB15_CONTAINER \
      google/alloydbomni:IMAGE_TAG /bin/sleep infinity
    
  4. מאתחלים את ספריית הנתונים החדשה לגרסה המשודרגת של מאגר התגים.

    docker exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
    

    אם באשכול הישן היו הגדרות מיוחדות, למשל, --data-checksum או --locale, צריך להעביר גם את הפרמטרים האלה כדי ליצור את מאגר AlloyDB Omni 16.

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

    docker update --restart=no ALLOYDB15_CONTAINER
    
  6. מריצים את הפקודה pg_upgrade --check כדי לוודא שהאשכול מוכן לשדרוג ל-AlloyDB Omni 16.

    docker exec -u postgres ALLOYDB16_CONTAINER bash -c "
     cd /tmp;
    
     pg_upgrade -p 5432 -P 5433 --check -v \
                -b /usr/lib/postgresql/15/bin \
                -B /usr/lib/postgresql/16/bin \
                -d /var/lib/postgresql/old_data \
                -D /var/lib/postgresql/data"
    

    אחרי שהפקודה pg_upgrade --check מסתיימת, מוצגת פלט שמסתיים ב-Clusters are compatible, שמציין שהאשכול מוכן לשדרוג. הפקודה הזו גם בודקת את קונטיינר AlloyDB Omni PostgreSQL 15 וסוגרת אותו. אחרי שהפקודה pg_upgrade --check מסתיימת, האפליקציות לא יכולות יותר להתחבר למסד הנתונים או להריץ שאילתות.

  7. מריצים את הפקודה pg_upgrade כדי להעתיק את הנתונים המשודרגים לספריית הנתונים החדשה, ואז מוודאים שהפקודה pg_upgrade הושלמה בהצלחה ושהקונטיינר AlloyDB Omni PostgreSQL 15 יצא:

    docker exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      pg_upgrade -v --copy \
           -b /usr/lib/postgresql/15/bin \
           -B /usr/lib/postgresql/16/bin \
           -d /var/lib/postgresql/old_data \
           -D /var/lib/postgresql/data"
    
    docker ps -a
    
  8. אם הפקודה pg_upgrade נכשלת, אפשר לחזור אחורה למאגר AlloyDB Omni PostgreSQL 15 על ידי הפעלת מאגר PostgreSQL 15:

    docker logs ALLOYDB16_CONTAINER
    docker rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER
    docker run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/15/data:/var/lib/postgresql/data \
      google/alloydbomni:15
    

    כדי לגלות את הסיבות לכשל בשדרוג, בודקים את היומנים.

  9. אם השדרוג יושלם, צריך לנקות את קובץ ה-container של AlloyDB Omni PostgreSQL 16 ולהפעיל אותו מחדש:

    docker rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER
    docker run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      google/alloydbomni:16
    

Podman

  1. מעתיקים את bin ומשתפים את הספרייה מהגרסה של קונטיינר AlloyDB Omni שרוצים לשדרג:

    mkdir -p TMP/alloydb15_bin TMP/alloydb15_share
    podman cp ALLOYDB15_CONTAINER:/usr/lib/postgresql/15 TMP/alloydb15_bin
    podman cp ALLOYDB15_CONTAINER:/usr/share/postgresql/15 TMP/alloydb15_share
    
  2. יוצרים ספריית נתונים חדשה למאגר AlloyDB Omni PostgreSQL 16 שבה יאוחסנו הנתונים המשודרגים:

    mkdir -p DATA_PATH/16/data
    chown 999 DATA_PATH/16/data
    
  3. מפעילים את מאגר AlloyDB Omni PostgreSQL 16 שפועל עם כל הנתיבים שמוגדרים באותה רשת כמו מאגר AlloyDB Omni הקודם. אפשר לראות דוגמה בהמשך:

    podman run -d --name ALLOYDB16_CONTAINER \
      -e POSTGRES_PASSWORD=PASSWORD -e PGPORT=5433 \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      -v DATA_PATH/15/data:/var/lib/postgresql/old_data \
      -v TMP/alloydb15_bin/15:/usr/lib/postgresql/15 \
      -v TMP/alloydb15_share/15:/usr/share/postgresql/15 \
      --network container:ALLOYDB15_CONTAINER \
      google/alloydbomni:16 /bin/sleep infinity
    
  4. מאתחלים את ספריית הנתונים החדשה לגרסה המשודרגת של מאגר התגים.

    podman exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      initdb -D /var/lib/postgresql/data --frozen-collations --encoding=UTF8 --locale=C --locale-provider=icu --icu-locale=und-x-icu
    

    אם באשכול הישן היו הגדרות מיוחדות, למשל, --data-checksum או --locale, צריך להעביר גם את הפרמטרים האלה כדי ליצור את מאגר AlloyDB Omni 16.

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

    podman update --restart=no ALLOYDB15_CONTAINER
    
  6. מריצים את הפקודה pg_upgrade --check כדי לוודא שהאשכול מוכן לשדרוג ל-AlloyDB Omni 16.

    podman exec -u postgres ALLOYDB16_CONTAINER bash -c "
     cd /tmp;
    
     pg_upgrade -p 5432 -P 5433 --check -v \
                -b /usr/lib/postgresql/15/bin \
                -B /usr/lib/postgresql/16/bin \
                -d /var/lib/postgresql/old_data \
                -D /var/lib/postgresql/data"
    

    אחרי שהפקודה pg_upgrade --check מסתיימת, מוצגת פלט שמסתיים ב-Clusters are compatible, שמציין שהאשכול מוכן לשדרוג. הפקודה הזו גם בודקת את קונטיינר AlloyDB Omni PostgreSQL 15 וסוגרת אותו. אחרי שהפקודה pg_upgrade --check מסתיימת, האפליקציות לא יכולות יותר להתחבר למסד הנתונים או להריץ שאילתות.

  7. מריצים את הפקודה pg_upgrade כדי להעתיק את הנתונים המשודרגים לספריית הנתונים החדשה, ואז מוודאים שהפקודה pg_upgrade הושלמה בהצלחה ושהקונטיינר AlloyDB Omni PostgreSQL 15 יצא:

    podman exec -u postgres ALLOYDB16_CONTAINER bash -c "
      cd /tmp;
      pg_upgrade -v --copy \
           -b /usr/lib/postgresql/15/bin \
           -B /usr/lib/postgresql/16/bin \
           -d /var/lib/postgresql/old_data \
           -D /var/lib/postgresql/data"
    
    podman ps -a
    
  8. אם הפקודה pg_upgrade נכשלת, אפשר לחזור אחורה למאגר AlloyDB Omni PostgreSQL 15 על ידי הפעלת מאגר PostgreSQL 15:

    podman logs ALLOYDB16_CONTAINER
    podman rm -f ALLOYDB15_CONTAINER ALLOYDB16_CONTAINER
    podman run -d --name ALLOYDB15_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/15/data:/var/lib/postgresql/data \
      google/alloydbomni:15
    

    כדי לגלות את הסיבות לכשל בשדרוג, בודקים את היומנים.

  9. אם השדרוג יושלם, צריך לנקות את קובץ ה-container של AlloyDB Omni PostgreSQL 16 ולהפעיל אותו מחדש:

    podman rm -f ALLOYDB16_CONTAINER ALLOYDB15_CONTAINER
    podman run -d --name ALLOYDB16_CONTAINER -p 5432:5432 \
      -e POSTGRES_PASSWORD=postgres \
      -v DATA_PATH/16/data:/var/lib/postgresql/data \
      google/alloydbomni:16
    

שדרוג שרת AlloyDB Omni בצומת במצב המתנה

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

כדי לשדרג את שרת הגיבוי של AlloyDB Omni, פועלים לפי השלבים הבאים:

  1. צריך לעצור את מאגר AlloyDB Omni במצב המתנה לפני שמשדרגים את הצומת הפעיל.
  2. אחרי שמשדרגים את הצומת הפעיל, מסנכרנים את ספריית הנתונים המשודרגת מהצומת הפעיל החדש לצומת ההמתנה באמצעות rsync. מידע נוסף על שדרוג שרת המתנה משוכפל בסטרימינג זמין במאמר pg_upgrade.
  3. מפעילים את הקונטיינר באמצעות תמונת AlloyDB ל-PostgreSQL PostgreSQL 16 באמצעות אותה ספריית נתונים.

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