Introducción
Las bases de datos crecen con el tiempo y, en ocasiones, superan el espacio disponible en su sistema de archivos original. Cuando se encuentran en la misma partición que el resto del sistema operativo, esto puede generar conflictos de E/S.
RAID, almacenamiento en bloque en red y otros dispositivos pueden ofrecer redundancia y mejorar la escalabilidad, junto con otras características deseables. Ya sea que esté agregando más espacio, evaluando formas de optimizar el rendimiento o buscando aprovechar otras características de almacenamiento, este tutorial lo guiará en la reubicación del directorio de datos de PostgreSQL.
Prerrequisitos
Para completar esta guía, necesitarás:
-
Un servidor Ubuntu 22.04 con un usuario no root con
sudoprivilegios. Puede obtener más información sobre cómo configurar un usuario con estos privilegios en nuestra guía Configuración inicial del servidor con Ubuntu 22.04 . -
PostgreSQL instalado en su servidor. Si aún no lo ha configurado, la guía Cómo instalar y usar PostgreSQL en Ubuntu 22.04 puede ayudarlo.
Los ejemplos que se incluyen en este tutorial implican mover los datos a un dispositivo de almacenamiento en bloque montado en /mnt/volume_nyc1_01. Si está utilizando almacenamiento en bloque en DigitalOcean, lea nuestra documentación sobre Cómo crear y configurar volúmenes para usar con Droplets para guiarlo en el montaje de su volumen antes de continuar con este tutorial.
Sin embargo, independientemente del almacenamiento subyacente que utilice, los siguientes pasos pueden ayudarle a mover el directorio de datos a una nueva ubicación.
Paso 1: mover el directorio de datos de PostgreSQL
Antes de comenzar a mover el directorio de datos de PostgreSQL, verifiquemos la ubicación actual iniciando una sesión interactiva de PostgreSQL. En el siguiente comando, psqlse ingresa al monitor interactivo y -u postgresse indica sudoque se ejecute como usuario de PostgreSQLpsql del sistema :
- sudo -u postgres psql
Una vez que tenga abierto el indicador de PostgreSQL, use el siguiente comando para mostrar el directorio de datos actual:
- SHOW data_directory;
Output data_directory----------------------------- /var/lib/postgresql/14/main(1 row)
Esta salida confirma que PostgreSQL está configurado para usar el directorio de datos predeterminado, /var/lib/postgresql/14/main, por lo que ese es el directorio que debe mover. Una vez que haya confirmado el directorio en su sistema, puede cerrar el psqlmensaje ejecutando el qmetacomando:
- q
Para garantizar la integridad de los datos, detenga PostgreSQL antes de realizar cambios en el directorio de datos:
- sudo systemctl stop postgresql
systemctlNo muestra el resultado de todos los comandos de administración de servicios. Para verificar que haya detenido correctamente el servicio, utilice el siguiente comando:
- sudo systemctl status postgresql
La salida debería indicarle que PostgreSQL está en estado inactive (dead), lo que significa que se ha detenido:
Output○ postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor Active: inactive (dead) since Thu 2022-06-30 18:46:35 UTC; 27s ago Process: 4588 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 4588 (code=exited, status=0/SUCCESS) CPU: 1ms
Ahora que el servidor PostgreSQL ya no se está ejecutando, copie el directorio de la base de datos existente a la nueva ubicación con rsync. El uso de la -abandera conserva los permisos y otras propiedades del directorio, mientras que -vproporciona una salida detallada para ayudarlo a seguir el progreso. Comenzará rsyncdesde el postgresqldirectorio para imitar la estructura del directorio original en la nueva ubicación. Al crear ese postgresqldirectorio dentro del directorio de punto de montaje y conservar la propiedad por parte del usuario PostgreSQL, puede evitar problemas de permisos para futuras actualizaciones.
Nota: Asegúrese de que no haya una barra diagonal al final del directorio, ya que puede agregarla si utiliza TABla función de completar. Si incluye una barra diagonal al final, rsyncse volcará el contenido del directorio en el punto de montaje en lugar de copiarlo en el directorio en sí.
El directorio de la versión, 14, no es estrictamente necesario ya que ha definido la ubicación explícitamente en el postgresql.confarchivo, pero seguir la convención del proyecto ciertamente no hará daño, especialmente si existe la necesidad en el futuro de ejecutar múltiples versiones de PostgreSQL:
- sudo rsync -av /var/lib/postgresql /mnt/volume_nyc1_01
Una vez que se complete la copia, cambie el nombre de la carpeta actual con una .bakextensión y manténgala hasta que haya confirmado que la transferencia se realizó correctamente. Esto ayudará a evitar la confusión que podría surgir al tener directorios con nombres similares tanto en la ubicación nueva como en la antigua:
- sudo mv /var/lib/postgresql/14/main /var/lib/postgresql/14/main.bak
Ahora está listo para configurar PostgreSQL para acceder al directorio de datos en su nueva ubicación.
Paso 2: señalar la nueva ubicación de los datos
De forma predeterminada, la data_directorydirectiva de configuración se establece /var/lib/postgresql/14/mainen el /etc/postgresql/14/main/postgresql.confarchivo. Edite este archivo para reflejar el nuevo directorio de datos:
- sudo nano /etc/postgresql/14/main/postgresql.conf
Busque la línea que comienza con data_directoryy cambie la ruta que sigue para reflejar la nueva ubicación. En el contexto de este tutorial, la directiva actualizada se escribirá de la siguiente manera:
/etc/postgresql/14/main/postgresql.conf
. . .data_directory = '/mnt/volume_nyc1_01/postgresql/14/main'. . .
Guarde y cierre el archivo presionando CTRL + X, Yy luego ENTER. Esto es todo lo que necesita hacer para configurar PostgreSQL para que use la nueva ubicación del directorio de datos. Todo lo que queda en este punto es iniciar el servicio PostgreSQL nuevamente y verificar que efectivamente esté apuntando al directorio de datos correcto.
Paso 3: Reiniciar PostgreSQL
Después de cambiar la data-directorydirectiva en el postgresql.confarchivo, continúe e inicie el servidor PostgreSQL usando systemctl:
- sudo systemctl start postgresql
Para confirmar que el servidor PostgreSQL se inició correctamente, verifique su estado nuevamente usando systemctl:
- sudo systemctl status postgresql
Si el servicio se inició correctamente, la Activelínea dirá active (exited)en la salida del comando:
Output● postgresql.service - PostgreSQL RDBMS Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor Active: active (exited) since Thu 2022-06-30 18:50:18 UTC; 3s ago Process: 4852 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 4852 (code=exited, status=0/SUCCESS) CPU: 1ms
Por último, para asegurarse de que el nuevo directorio de datos esté realmente en uso, abra el símbolo del sistema de PostgreSQL:
- sudo -u postgres psql
Verifique nuevamente el valor del directorio de datos:
- SHOW data_directory;
Output data_directory---------------------------------------- /mnt/volume_nyc1_01/postgresql/14/main(1 row)
Esto confirma que PostgreSQL está usando la nueva ubicación del directorio de datos. A continuación, tómate un momento para asegurarte de que puedes acceder a tu base de datos e interactuar con los datos que contiene. Una vez que hayas verificado la integridad de los datos existentes, puedes eliminar el directorio de datos de respaldo:
- sudo rm -Rf /var/lib/postgresql/14/main.bak
Con esto, habrás movido exitosamente tu directorio de datos PostgreSQL a una nueva ubicación.
Conclusión:
Si ha seguido los pasos, su base de datos debería estar ejecutándose con su directorio de datos en la nueva ubicación y habrá completado un paso importante para poder escalar su almacenamiento. También puede consultar 5 configuraciones de servidor comunes para su aplicación web para obtener ideas sobre cómo crear una infraestructura de servidor que lo ayude a escalar y optimizar las aplicaciones web.