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
מעתיקים את
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
יוצרים ספריית נתונים חדשה למאגר AlloyDB Omni PostgreSQL 16 שבה יאוחסנו הנתונים המשודרגים:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
מפעילים את מאגר 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
מאתחלים את ספריית הנתונים החדשה לגרסה המשודרגת של מאגר התגים.
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.אם הפעלתם את מדיניות ההפעלה מחדש בגרסה הקודמת של הקונטיינר, אתם צריכים להשבית את מדיניות ההפעלה מחדש, כמו בדוגמה הבאה:
docker update --restart=no ALLOYDB15_CONTAINER
מריצים את הפקודה
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מסתיימת, האפליקציות לא יכולות יותר להתחבר למסד הנתונים או להריץ שאילתות.מריצים את הפקודה
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אם הפקודה
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
כדי לגלות את הסיבות לכשל בשדרוג, בודקים את היומנים.
אם השדרוג יושלם, צריך לנקות את קובץ ה-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
מעתיקים את
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
יוצרים ספריית נתונים חדשה למאגר AlloyDB Omni PostgreSQL 16 שבה יאוחסנו הנתונים המשודרגים:
mkdir -p DATA_PATH/16/data chown 999 DATA_PATH/16/data
מפעילים את מאגר 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
מאתחלים את ספריית הנתונים החדשה לגרסה המשודרגת של מאגר התגים.
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.אם הפעלתם את מדיניות ההפעלה מחדש בגרסה הקודמת של הקונטיינר, אתם צריכים להשבית את מדיניות ההפעלה מחדש, כמו בדוגמה הבאה:
podman update --restart=no ALLOYDB15_CONTAINER
מריצים את הפקודה
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מסתיימת, האפליקציות לא יכולות יותר להתחבר למסד הנתונים או להריץ שאילתות.מריצים את הפקודה
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אם הפקודה
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
כדי לגלות את הסיבות לכשל בשדרוג, בודקים את היומנים.
אם השדרוג יושלם, צריך לנקות את קובץ ה-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, פועלים לפי השלבים הבאים:
- צריך לעצור את מאגר AlloyDB Omni במצב המתנה לפני שמשדרגים את הצומת הפעיל.
- אחרי שמשדרגים את הצומת הפעיל, מסנכרנים את ספריית הנתונים המשודרגת מהצומת הפעיל החדש לצומת ההמתנה באמצעות rsync.
מידע נוסף על שדרוג שרת המתנה משוכפל בסטרימינג זמין במאמר
pg_upgrade. - מפעילים את הקונטיינר באמצעות תמונת AlloyDB ל-PostgreSQL PostgreSQL 16 באמצעות אותה ספריית נתונים.
אם אתם משתמשים בשכפול לוגי, כדאי לעיין במאמר שדרוג נתונים באמצעות שכפול.