Estamos ejecutando muchas máquinas virtuales Linux en un entorno de almacenamiento vmware / compartido, cada una con su propia instancia de postgreSQL (una combinación de 9.0 y 9.3). Actualmente, toda la VM se encuentra en una sola partición / volumen raíz, y hemos tenido un gran éxito (~ 8 años) usando instantáneas basadas en almacenamiento de los volúmenes VMFS subyacentes para el proceso de copia de seguridad / restauración (y la replicación en nuestro sitio de recuperación ante desastres).
Debido a la arquitectura de nuestro almacenamiento, sería ventajoso separar los archivos WAL de postgres en un volumen no en caché, en su mayoría de escritura, para darnos menos abandono de caché en el lado del almacenamiento. Con nuestro almacenamiento (Nimble Storage), podemos asignar ambos volúmenes a un solo grupo de protección / instantánea, pero no he podido obtener de nuestro proveedor que las instantáneas sucederán EXACTAMENTE al mismo tiempo en todos los volúmenes del grupo de protección - probablemente lo hará, pero siempre existe la posibilidad de que sus milisegundos se separen.
Con ese fin, realizamos algunos experimentos, todo mientras escribíamos datos en el DB lo más rápido posible usando pg_bench. Después de los experimentos, restauramos nuestros volúmenes de instantáneas y comenzamos los postgres VM +
- Instantánea de los volúmenes de datos y registros cerca de forma simultánea - resultado: DB recuperada
- Volumen de datos de instantánea primero, volumen de registro ~ 1 minuto después - resultado: DB recuperada
- Volumen de registro de instantánea primero, volumen de datos ~ 1 minuto después - resultado: DB recuperada
- Volumen del registro de instantáneas primero, volumen de datos ~ 3 minutos después, después de que un punto de control de WAL escribió nuevos datos en los archivos de datos: resultado: DB recuperada
Por lo tanto, las pruebas parecen decirnos, siempre y cuando ambas instantáneas sean consistentes a nivel de volumen, y relativamente juntas, obtendrá una copia consistente de la base de datos, en función del tiempo de la instantánea de volumen WAL / Log.
Mi pregunta: ¿es esto seguro? ¿Cuáles son los casos esquimales que nos faltan en nuestras pruebas y qué podría salir mal?
El documento de Postgres indica que esto no es seguro, pero las pruebas parecen indicar que es bastante robusto: http://www.postgresql.org/docs/9.1/static/backup-file.html
Si su base de datos se extiende a través de múltiples sistemas de archivos, es posible que no haya ninguna forma de obtener instantáneas congeladas exactamente simultáneas de todos los volúmenes. Por ejemplo, si sus archivos de datos y el registro WAL están en discos diferentes, o si los espacios de tablas están en sistemas de archivos diferentes, es posible que no sea posible utilizar la copia de seguridad de la instantánea porque las instantáneas deben ser simultáneas. Lea la documentación de su sistema de archivos con mucho cuidado antes de confiar en la técnica de instantánea consistente en tales situaciones.
NOTA: Sí, conocemos otras opciones para asegurarnos de que sean consistentes, como poner PostgreSQL en modo de copia de seguridad en caliente o usar la integración de VMware de nuestro almacenamiento para inmovilizar las propias máquinas virtuales, pero estamos buscando una solución solo de almacenamiento por velocidad, conveniencia, y cero impacto para nuestros clientes.