خرابی ارتقاء 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. اگر نه، به Resolution بروید.

قطعنامه

  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 موجود در DB قدیمی را به یک کاربر موقت تغییر نام دهید (به عنوان مثال: 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 را به نسخه های ارتقا یافته هدایت می کند. در غیر این صورت، باینری ها به نسخه قدیمی تر اشاره می کنند که می تواند مشکلاتی را ایجاد کند.