Si se produce un error en la base de datos del dispositivo y no hay nodos de base de datos operativos y en ejecución, o todos los nodos de réplica están desincronizados cuando se produce el error en el nodo principal, utilice el siguiente procedimiento para intentar recuperar la base de datos.

Por qué y cuándo se efectúa esta tarea

Este procedimiento se aplica a las situaciones en las que no hay nodos de base de datos operativos a través de un clúster que se está ejecutando en modo asincrónico. En este escenario, por lo general, verá errores similares a los siguientes en la página de la interfaz de administración de dispositivos virtuales al intentar cargar o actualizar la página:

Error al inicializar el servicio de base de datos: No se pudo abrir la conexión JDBC de la transacción; la excepción anidada es org.postgresql.util.PSQLException: Se produjo un error durante el intento de conexión.

Procedimiento

  1. Intente recuperar la base de datos mediante la interfaz de administración de dispositivos virtuales desde uno de los nodos de base de datos.
    1. Si es posible, abra la página de la base de datos de Interfaz de administración de dispositivos virtuales del nodo que tenga el estado más reciente. Por lo general, es el que funcionaba como nodo principal antes del error de la base de datos.
    2. Si se produce un error al abrir la interfaz de administración de dispositivos virtuales para el nodo principal, intente abrir la interfaz de los demás nodos de réplica.
    3. Si encuentra un nodo de base de datos con una interfaz de administración de dispositivos virtuales en funcionamiento, intente recuperarlo mediante una conmutación por error manual.
  2. Si se produce un error del procedimiento en el paso 1, inicie una sesión de shell e intente determinar el nodo con el estado más reciente. Inicie una sesión de shell en todos los nodos disponibles del clúster y vuelva a intentar iniciar las bases de datos ejecutando el siguiente comando de shell: service vpostgres start
  3. Utilice el siguiente procedimiento para cada nodo que tenga una base de datos local en funcionamiento para determinar el nodo con el estado más reciente.
    1. Ejecute el siguiente comando para determinar qué nodo tiene el estado más reciente. Si el comando devuelve f, ese es el nodo con el estado más reciente, y puede continuar con el paso 4.
      su - postgres
      psql vcac
      vcac=# select pg_is_in_recovery();
       pg_is_in_recovery
      • Si este comando devuelve una f, este nodo tiene el estado más reciente.

      • Si el nodo devuelve un t, ejecute el siguiente comando en el nodo:

      SELECT pg_last_xlog_receive_location() as receive_loc, pg_last_xlog_replay_location() as replay_loc, extract(epoch from pg_last_xact_replay_timestamp()) as replay_timestamp;

      Este comando debe devolver un resultado similar al siguiente.

      vcac=# SELECT pg_last_xlog_receive_location() as receive_loc, pg_last_xlog_replay_location() as replay_loc, extract(epoch from pg_last_xact_replay_timestamp()) as replay_timestamp;
       receive_loc | replay_loc | replay_timestamp
      -------------+------------+------------------
       0/20000000 | 0/203228A0 | 1491577215.68858
      (1 row)
      
  4. Compare los resultados de cada nodo para determinar cuál tiene el estado más reciente.

    Seleccione el nodo cuyo valor de la columna receive_loc sea superior. Si son iguales, seleccione el mayor valor de la columna replay_loc y, a continuación, si siguen siendo iguales, seleccione el nodo que tenga el mayor valor de replay_timestamp.

  5. Ejecute el siguiente comando en el nodo que tenga el estado más reciente: vcac-vami psql-promote-master -force
  6. Abra el archivo /etc/haproxy/conf.d/10-psql.cfg en un editor de texto y actualice la siguiente línea:
    server masterserver sc-rdops-vm06-dhcp-170-156.eng.vmware.com:5432 check on-marked-up shutdown-backup-sessions
    

    Para que se lea como sigue con el FQDN de nodo actual:

    server masterserver fqdn de nodo actual:5432 check on-marked-up shutdown-backup-sessions
  7. Guarde el archivo.
  8. Ejecute el comando service haproxy restart.
  9. Abra la página de la base de datos de Interfaz de administración de dispositivos virtuales para el nodo más reciente.

    Este nodo debería aparecer como nodo principal, con los otros nodos como réplicas no válidas. Además, se habilita el botón Restablecer para las réplicas.

  10. Haga clic en Restablecer y Actualizar para cada réplica en sucesión hasta que se repare el estado del clúster.