Pregunta Múltiples servidores Postgres (un escritor, varios lectores) con disco compartido


Aquí está el escenario:

  1. Disco de un fragmento (Gluster)
  2. Múltiples servidores de Postgres

Requisitos:

  1. Usa el disco compartido para almacenar los archivos de la base de datos.
  2. Utilizar una configuración que proporcione la máxima eficiencia.

Hallazgos hasta ahora,

  1. Es posible usar un disco compartido para almacenar los datos ya que esto documento dice. Pero también dice que "Otro problema es que el servidor en espera nunca debe acceder al almacenamiento compartido mientras el servidor primario se está ejecutando". Eso significa que todos los servidores (excepto el maestro) quedan sin uso, lo que es casi inaceptable para nosotros.

  2. Como estamos usando un disco compartido, no debería haber replicación. Se ha encontrado en este documento que algunas configuraciones (modos Raw y Master / Slave) son suficientemente buenas. Pero el otro problema es que pueden causar el problema anterior.

Problemas:

  1. Hay una gran cantidad de documentación en la web que me confundió acerca de sus requisitos y características. ¿Mi entendimiento es correcto?
  2. Si es así, ¿existe alguna posibilidad de lograr este diseño (con pgpool o cualquier otra herramienta)?
  3. Si es así, ¿podría nombrar las herramientas o las palabras clave para que pueda encontrar más información?

Nota (para aquellos que estén interesados ​​en cerrar las preguntas tanto como puedan) - Me sucedió antes. Algunos dicen que estoy buscando respuestas basadas en la opinión. De hecho no lo soy. Lo que estoy buscando es el nombre de la tecnología o algún tipo de palabras clave, sin importar qué. Para que al usarlos pueda buscar más información. A veces sucede que necesita conocer algunas palabras clave para buscar y encontrar la información.

Gracias por adelantado.


5
2017-08-14 04:38


origen




Respuestas:


No es posible ejecutar varios servidores PostgreSQL desde el mismo directorio de datos, incluso si todos menos uno son de solo lectura. Absolutamente 100% sin apoyo. No se puede hacer. Ríndete ahora.

Alguien podría algún día agregar una característica así, pero implicaría mayor cambios en PostgreSQL, ya que Pg se basa en gran medida en la memoria compartida y las señales para la sincronización entre procesos. También el shared_buffers contienen buffers "sucios" que aún no están escritos; estos pueden escribirse perezosamente porque PostgreSQL sabe que todos los backends leerán desde allí y solo irán al disco si los datos no están en shared_buffers.

Sus posiblemente práctico hacerlo con pequeños cambios en PostgreSQL si todos los servidores son de solo lectura, pero no lo he investigado porque es un caso de uso bastante poco interesante.

Las referencias al almacenamiento compartido que has visto son solamente para failover, no operación concurrente. El manual es bastante específico y necesita asegurarse de que haya un cercado adecuado en el lugar para evitar el acceso simultáneo al almacenamiento por parte de múltiples servidores de bases de datos y que, si no lo hace, se producirán importantes daños.

Tendrá que confiar en la replicación o usar otro motor de base de datos que admita el almacenamiento compartido (y se ocupe del impacto en el rendimiento resultante).

Por otro lado, sin embargo: los DBs a menudo están limitados de E / S. El almacenamiento compartido no le gana nada si ahora tiene dos servidores capaces de 1000tps en lugar de un servidor que puede hacer 2000. O, dados los costos generales de sincronización de un sistema de almacenamiento compartido con un bus de baja latencia (piense en Infiniband / Myrinet ), más como dos servidores capaces de 200tps cada uno.


7
2017-08-14 05:24