שדרוג PostgreSQL נכשל

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

תיאור הבעיה

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

הודעת השגיאה

ERROR: PostgreSQL Upgrade FAILED 

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

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

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

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