שדרוג PostgreSQL נכשל

מוצג המסמך של Apigee Edge.
כניסה למסמכי העזרה של Apigee X.
info

תיאור הבעיה

מופיעה שגיאה כשמעדכנים את מסד הנתונים של PostgreSQL.

הודעת השגיאה

ERROR: PostgreSQL Upgrade FAILED 

סיבות אפשריות

סיבה תיאור ההוראות לפתרון בעיות רלוונטיות ל-
הגדרות שגיאות של רפליקה בקובץ התצורה של PostgreSQL השדרוג של PostgreSQL נכשל בגלל הגדרות רפליקציה שגויות במהלך השדרוג. משתמשי Edge בענן פרטי
התקנת PostgreSQL שבוצעה על ידי משתמש התקנה אחר שאינו משתמש ה-apigee PostgreSQL הותקן בהתחלה אצל משתמש אחר כמשתמש התקנה, מה שמוביל לכשל בשדרוג. משתמשי Edge בענן פרטי

שלבים נפוצים לאבחון

אם מופיעה הודעת שגיאה במהלך השדרוג של מסד הנתונים PostgreSQL, צריך לבצע קודם את שלבי האבחון הבאים:

  1. משנים את השם של תיקיית הנתונים של PostgreSQL:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. מוודאים שנתוני הגיבוי המקוריים נמצאים בתיקייה בשם /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    לדוגמה:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. משחזרים את נתוני הגיבוי ב-/opt/apigee/data/apigee-postgresql/pgdata-version.old/ ל-/opt/apigee/data/apigee-postgresql/pgdata באמצעות הפקודה הבאה:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    לדוגמה:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata
  4. מריצים מחדש את הפקודה db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  5. אם מופיעה הודעת השגיאה הבאה...

    pg_resetxlog: could not open file "global/pg_control" for reading:
    No such file or directory
    

    ...ואז משנים את שם הקובץ pg_control.old ל-pg_control באמצעות הפקודה הבאה:

    mv /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control.old /apigee/apigeeinst/data/apigee-postgresql/pgdata/global/pg_control 
    
  6. מריצים מחדש את הפקודה db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    

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

הסיבה: הגדרות רפליקציה שגויות בקובץ התצורה של PostgreSQL

אבחון

  1. בודקים אם קובץ התצורה של PostgreSQL /opt/apigee/apigee-postgresql/conf/pg_hba.conf כולל את הגדרות הרפליקציה שהתכוונתם לעשות.
  2. אם בקובץ הזה מופיעות הגדרות הרפליקציה הצפויות, עוברים אל התקנת PostgreSQL שבוצעה על ידי משתמש התקנה אחר שאינו המשתמש 'apigee'.
  3. אם לא, עוברים אל פתרון.

רזולוציה

  1. משנים את שם התיקייה של נתוני PostgreSQL באמצעות הפקודה הבאה:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  2. מוודאים שנתוני הגיבוי המקוריים נמצאים בתיקייה בשם: /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    לדוגמה:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  3. משחזרים את נתוני הגיבוי מ-/opt/apigee/data/apigee-postgresql/pgdata-version.old/ ל-/opt/apigee/data/apigee-postgresql/pgdata באמצעות הפקודה הבאה:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    לדוגמה:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  4. אם אי פעם שינית את מארח העבדים, עליך לעדכן את המאפיין הבא ב /opt/apigee/customer/application/postgresql.properties כדי לעדכן את קובץ התצורה pg_hba.conf:

    conf_pg_hba_replication.connection=host replication apigee
    existing_slave_ip/32 trust\ \nhost replication apigee new_slave_ip/32 trust 
    
  5. צריך להפעיל מחדש את השירות apigee-postgresql כדי לוודא שהנכס הוגדר שלב 4 שלמעלה מעודכן לקובץ התצורה pg_hba.conf:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql restart
    
  6. כדי לוודא שלא יתבצע עדכון של קובץ התצורה pg_hba.conf עם הגדרות שגויות במהלך השדרוג של PostgreSQL, משנים את הסטטוס שלו ל-immutable באמצעות הפקודה הבאה:

    chattr +i /opt/apigee/apigee-postgresql/conf/pg_hba.conf 
    
  7. מריצים מחדש את הפקודה db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  8. מסירים את ההגדרה שלא ניתנת לשינוי מקובץ התצורה pg_hba.conf:

    chattr -i /opt/apigee/apigee-postgresql/conf/pg_hba.conf
    

סיבה: התקנת PostgreSQL שבוצעה על ידי משתמש התקנה אחר שאינו המשתמש apigee

אבחון

  1. כדי לבדוק אם יש משתמש אחר שהערך של rolesuper מוגדר בו כ-true, פועלים לפי השלבים הבאים:

    1. בצומת PostgreSQL, מתחברים ל-PostgreSQL באמצעות הפקודה הבאה:

      psql -h $(hostname -i)  -U apigee
      
    2. מריצים את שאילתת ה-SQL הבאה:

      select * from pg_authid;
      
    3. בודקים אם יש כמה משתמשים ש-rolesuper מוגדר ל-true. אם יש כאלה, השדרוג של PostgreSQL נכשל כי משתמש אחר הוגדר בתור install user במקום המשתמש apigee. כל משתמש עם התפקיד rolesuper ומזהה OID נמוך יותר נחשב כמשתמש התקנה.

      כדי לבדוק את הסוג הזה של בעיות בתפקיד, מריצים את שאילתות ה-SQL הבאות:

      select oid,rolname,rolsuper from pg_roles;
      select * from pg_user;
      

רזולוציה

  1. מתחברים ל-PostgreSQL באמצעות הפקודה הבאה:

    psql -h $(hostname -i)  -U apigee
    
  2. משנים את השם של התפקיד הקיים apigee במסד הנתונים הישן למשתמש זמני (לדוגמה: apigee2):

    update pg_authid set rolname ='apigee2' where rolname = 'apigee'; 
    
  3. נניח שהיה משתמש התקנה אחר, srcapige. שינוי השם של srcapige לתפקיד apigee:

    update pg_authid set rolname ='apigee' where rolname = 'srcapigee';
    
  4. שינוי השם של apigee2 למשתמש srcapige:

    update pg_authid set rolname ='secapigee' where rolname = 'apigee2'; 
    
  5. מעדכנים את הסיסמה של כל המשתמשים ששינו את השם שלהם:

    ALTER ROLE apigee WITH PASSWORD '<secret>'; 
    ALTER ROLE srcapige WITH PASSWORD '<secret>'; 
    
  6. כדי לשנות את השם של תיקיית הנתונים של PostgreSQL, משתמשים בפקודה הבאה:

    mv /opt/apigee/data/apigee-postgresql/pgdata /opt/apigee/data/apigee-postgresql/pgdata-bkp
    
  7. ודא שיש נתוני גיבוי מקוריים בתוך תיקייה בשם /opt/apigee/data/apigee-postgresql/pgdata-version.old/

    לדוגמה:

    /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/
    
  8. משחזרים את הנתונים בתיקייה /opt/apigee/data/apigee-postgresql/pgdata-version.old/ ל-/opt/apigee/data/apigee-postgresql/pgdata באמצעות הפקודה הבאה:

    mv /opt/apigee/data/apigee-postgresql/pgdata-version.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    

    לדוגמה:

    mv /opt/apigee/data/apigee-postgresql/pgdata-9.6.old/ /opt/apigee/data/apigee-postgresql/pgdata 
    
  9. מריצים מחדש את הפקודה db_upgrade:

    /opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade 
    
  10. מפעילים מחדש את כל השירותים של apigee-qpidd ו-edge-qpid-server:

    /opt/apigee/apigee-service/bin/apigee-service apigee-qpidd restart
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
    

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

חובה לאסוף פרטי אבחון

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

  1. מוסיפים את set -x בשורה השנייה של הקובץ/opt/apigee/apigee-postgresql/lib/actions/db_upgrade.
  2. עליכם לפעול לפי שלבי האבחון הנפוצים ולספק את פלט המסוף של הפקודה db_upgrade לצוות התמיכה:

    opt/apigee/apigee-service/bin/apigee-service apigee-postgresql db_upgrade
    
  3. עליכם לספק לצוות התמיכה את קובצי היומן הבאים:

    /opt/apigee/var/log/apigee-postgresql/apigee-postgresql.log
    /opt/apigee/var/log/apigee-postgresql/update.log
    
  4. כדי לבדוק אם, יש לספק את הפלט של פקודות מערכת ההפעלה הבאות החלופות מוגדרות ל-auto.

    update-alternatives --display psql 
    

    או

    update-alternatives --display pgsql
    update-alternatives --list psql
    

    או

    update-alternatives --list pgsql
    

    אם החלופות מוגדרות ל-manual, אפשר להגדיר אותן ל-auto באמצעות הפעולות הבאות הפקודה:

    update-alternatives --auto psql
    

    הגדרת החלופות ל-auto מפנה את קובצי ה-binary של psql ו-postgres לגרסאות המשודרגות. אחרת, הקבצים הבינאריים יפנו לגרסה הישנה יותר, וזה עלול לגרום לבעיות.