Сбой при обновлении PostgreSQL

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

Symptom

При обновлении базы данных 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. Сделайте файл конфигурации 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 будут указывать на обновленные версии. В противном случае двоичные файлы будут указывать на более старую версию, что может привести к проблемам.