שדרוג PostgreSQL נכשל

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

תיאור הבעיה

התקבלה שגיאה במהלך העדכון של מסד הנתונים של 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:

    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 psql
    

    או

    update-alternatives --list pgsql
    

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

    update-alternatives --auto psql
    

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