خرابی ارتقاء 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. اگر تا به حال میزبان slave را تغییر داده‌اید، باید ویژگی زیر را در /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 را مجدداً راه‌اندازی کنید تا مطمئن شوید که ویژگی تنظیم‌شده در مرحله ۴ بالا در فایل پیکربندی 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 
    

    اگر گزینه‌های جایگزین روی manual تنظیم شده‌اند، می‌توانید با استفاده از دستور زیر آنها را روی auto تنظیم کنید:

    update-alternatives --auto psql
    

    تنظیم گزینه‌های جایگزین روی auto ، فایل‌های باینری psql و postgres را به نسخه‌های ارتقا یافته ارجاع می‌دهد. در غیر این صورت، فایل‌های باینری به نسخه قدیمی‌تر اشاره می‌کنند که می‌تواند باعث بروز مشکل شود.