שדרוג PostgreSQL נכשל

אתם צופים במסמכי התיעוד של Apigee Edge.
אפשר לעבור אל מסמכי התיעוד של Apigee X.
מידע

תיאור הבעיה

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

הודעת השגיאה

ERROR: PostgreSQL Upgrade FAILED 

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

סיבה תיאור ההוראות לפתרון בעיות רלוונטיות ל
הגדרות רפליקציה שגויות בקובץ תצורה של PostgreSQL השדרוג של PostgreSQL נכשל בגלל הגדרות שכפול שגויות במהלך השדרוג. משתמשים ב-Edge Private Cloud
התקנת 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. כדי לוודא שהקובץ לא יעודכן בהגדרות שגויות במהלך השדרוג של PostgreSQL, צריך להפוך את קובץ התצורה pg_hba.conf לבלתי ניתן לשינוי באמצעות הפקודה הבאה:

    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 נכשל כי משתמש אחר הוגדר כמשתמש ההתקנה במקום המשתמש 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 
    

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

    update-alternatives --auto psql
    

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