Hacer un uso (temporal) del Almacenamiento en red para Restauraciones, Actualización de PSQL,

Estamos ejecutando una instalación de Discourse más grande en una configuración VPS que básicamente funciona muy bien para nosotros. En términos de rendimiento de CPU/Memoria, tenemos margen. Sin embargo, el espacio en disco es un problema, no en el día a día, sino cuando se trata de actualizar Postgres, por ejemplo (la actualización de 13-">15 está pendiente por eso), carecemos de espacio y no podemos expandirnos fácilmente.

Sé que hay otras opciones para la actualización de postgres, pero considera esto más como una pregunta general.

Estamos ejecutando en Hetzner, donde el almacenamiento en red está disponible fácilmente para uso temporal.

En nuestro servidor de prueba, ahora estoy jugando con hacerlo funcionar de forma temporal, primero para restaurar una copia de seguridad del sitio en vivo, luego para probar la actualización de Postgres. Hasta ahora no he tenido éxito.

Ya intenté crear enlaces simbólicos, pero noté que no funcionó y también leí aquí en alguna parte que no es la forma recomendada. También intenté mover la carpeta /shared de /var/discourse/shared/standalone a /mnt/ext-storage/standalone y moví los archivos allí, desafortunadamente no sin problemas. Ni siquiera puedo terminar la compilación.

¿Hay alguna manera que funcione para este tipo de casos? Soy consciente de que el rendimiento de la unidad es mucho peor que la unidad local, pero no estoy planeando ejecutar el foro en ella. Realmente me gustaría tener una forma cómoda de usarlo para ciertos escenarios.

Si tu objetivo es hacer la actualización, lo más fácil es iniciar una nueva VM y migrar a ella. Te saltas la necesidad de actualizar la base de datos y obtienes un nuevo sistema operativo en tu VM, lo cual probablemente necesites hacer de todos modos.

Sigue Mover un sitio de Discourse a otro VPS con rsync y no copies la base de datos (pero sí las cargas y los certificados de Let’s Encrypt.

Si tus copias de seguridad están en s3, es muy sencillo congelar la antigua, hacer una copia de seguridad y restaurarla en la nueva máquina.

Si hetzner tiene algún tipo de IP permanente que se pueda asignar a diferentes servidores, ni siquiera necesitarás cambiar el DNS.

Querrás saber que puedes construir un nuevo servidor para que, si alguna vez tienes que hacerlo por alguna razón, puedas hacerlo. Esta es una oportunidad perfecta para practicar.

En realidad, esta no es una opción. De todos modos, no se está quedando sin espacio para las necesidades diarias. Además, ahora mismo estamos en un disco de 600 GB y usamos ~50%. No hay una opción más grande, al menos no en Hetzner.

Por eso pregunté explícitamente por el disco externo.

¿Has ejecutado un ./launcher cleanup app por curiosidad? ¿Eso no ha liberado suficiente espacio para realizar la actualización in situ?

1 me gusta

¿Debería importar eso para una reconstrucción? Para un reinicio simple lo entendería, pero ¿para una reconstrucción?

No estaba sugiriendo cambiar a una unidad más grande, solo obtener un servidor nuevo exactamente igual a ese. Instala Discourse, restaura tu base de datos.

Esa es una muy buena pregunta.

Sí. Cada reconstrucción crea un nuevo contenedor y cada uno de ellos ocupa espacio. Si nunca lo has hecho, podrías liberar decenas de GB.

1 me gusta

Para la actualización de la base de datos, necesitas todo el espacio que puedas conseguir. Así que sí. Yo diría que es importante.

Nuestra guía de actualización incluye una guía para tu caso de uso exacto.

Hemos añadido esta opción para personas que se encuentran en la misma situación que tú. ¡Solo asegúrate de guardar una copia de seguridad fuera del sitio antes de intentar esto!

2 Me gusta

Si estás en una VM, es mucho, mucho más fácil simplemente moverte a una nueva, y hay muchos beneficios. Aquí hay algunos:

  • riesgo cero: si algo sale mal, todavía tienes tu servidor antiguo
  • tiempo de inactividad cero (solo lectura en el servidor antiguo)
  • obtienes la actualización del sistema operativo que probablemente necesites de todos modos
  • puedes verificar que sabes cómo iniciar un nuevo servidor en caso de que ocurra una calamidad
  • no necesitas reindexar y hacer vacuum
1 me gusta

Agradezco su consejo, chicos.

Gracias, esa es la otra opción de la que dije que era consciente. Gracias de todos modos por señalarla.

No lo dudo, pero aún me habría encantado explorar la opción de agregar almacenamiento adicional para tareas de mantenimiento si fuera necesario.

2 Me gusta

Puede ser útil mantener tus subidas, o, por ejemplo, /var/discourse/shared/web_only en almacenamiento de red. Necesitas editar el archivo yml para que apunte a él en lugar de usar un enlace simbólico (el enlace simbólico no funciona porque el contenedor no puede acceder al lugar al que apunta tu enlace simbólico).

Luego, si te mudas a una nueva VM, puedes simplemente volver a montar ese almacenamiento de red en lugar de copiarlo.

No recomiendo el almacenamiento de red para la base de datos, ya que es más lento.

1 me gusta

Creo que vale la pena desglosar cuál es tu uso. El tamaño real de tu base de datos podría no ser tan grande, si la mayor parte de tu uso son cargas, y es solo la parte de la base de datos la que exige quizás 3 veces más espacio durante la actualización.

Una cosa que puedes comprobar es el tamaño relativo de una copia de seguridad con descargas en comparación con una copia de seguridad sin descargas.

O, usa la línea de comandos. Aquí tienes una salida de mi foro, bastante pequeño:

root@rc-debian-hel:~# free -m
               total        used        free      shared  buff/cache   available
Mem:            3813        1631         267         492        1915        1504
Swap:           4095         730        3365
root@rc-debian-hel:~# swapon
NAME                       TYPE  SIZE   USED PRIO
/var/local/swap/swapfile.1 file 1024M 730.2M   -2
/var/local/swap/swapfile.3 file 1024M 136K   -3
/var/local/swap/swapfile.0 file 1024M     0B   -4
/var/local/swap/swapfile.2 file 1024M     0B   -5
root@rc-debian-hel:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           382M  1.2M  381M   1% /run
/dev/sda1        38G   22G   14G  62% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/sda15      253M  6.3M  246M   3% /boot/efi
overlay          38G   22G   14G  62% /var/lib/docker/overlay2/68abab42f48040e0dfc03d3c9fc893dfa3e7fb01ba1b2215731668339bbc3766/merged
tmpfs           382M     0  382M   0% /run/user/0

Mirando más de cerca:

root@rc-debian-hel:~# du -kx / | sort -n | tail -33
767000	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff/home/discourse/.local/share/pnpm
767004	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff/home/discourse/.local/share
767020	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff/home/discourse/.local
795804	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff/home/discourse
795808	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff/home
833836	/var/discourse/shared/standalone/postgres_data
884648	/var/discourse/shared/standalone/uploads/default/original
978000	/usr/lib/modules
991644	/var/lib/docker/overlay2/68abab42f48040e0dfc03d3c9fc893dfa3e7fb01ba1b2215731668339bbc3766/diff
991664	/var/lib/docker/overlay2/68abab42f48040e0dfc03d3c9fc893dfa3e7fb01ba1b2215731668339bbc3766
1025164	/var/discourse/shared/standalone/uploads/default/optimized
1146528	/usr/lib/firmware
1350496	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554/diff
1350512	/var/lib/docker/overlay2/8b6ac2d69a1fa195285e61aba2876484a69fd2a19032c2f4def1c4adb02d6554
1909816	/var/discourse/shared/standalone/uploads/default
1919380	/var/discourse/shared/standalone/uploads
2471968	/usr/lib
2506940	/var/log/journal/82e4cf9bff9748d090b41e6d336353eb
2515140	/var/log/journal
2592200	/var/log
3029428	/usr
3839148	/var/discourse/shared/standalone/backups/default
3839152	/var/discourse/shared/standalone/backups
4194324	/var/local/swap
4194328	/var/local
5171844	/var/lib/docker/overlay2
5217052	/var/lib/docker
5455612	/var/lib
6682972	/var/discourse/shared/standalone
6682976	/var/discourse/shared
6685716	/var/discourse
19041368	/var
23037264	/
root@rc-debian-hel:~# du -kx /var/discourse/shared/ | sort -n | tail -33
42312	/var/discourse/shared/standalone/uploads/default/original/2X/f
42448	/var/discourse/shared/standalone/uploads/default/original/2X/1
42548	/var/discourse/shared/standalone/uploads/default/original/2X/6
43380	/var/discourse/shared/standalone/uploads/default/optimized/2X/2
44148	/var/discourse/shared/standalone/uploads/default/optimized/2X/5
44340	/var/discourse/shared/standalone/uploads/default/optimized/2X/1
45240	/var/discourse/shared/standalone/uploads/default/optimized/2X/e
46648	/var/discourse/shared/standalone/uploads/default/optimized/2X/c
49516	/var/discourse/shared/standalone/uploads/default/optimized/2X/8
49772	/var/discourse/shared/standalone/uploads/default/optimized/2X/9
49932	/var/discourse/shared/standalone/log/var-log/nginx
50788	/var/discourse/shared/standalone/uploads/default/optimized/2X/0
55428	/var/discourse/shared/standalone/uploads/default/optimized/2X/d
55844	/var/discourse/shared/standalone/uploads/default/optimized/2X/f
57548	/var/discourse/shared/standalone/uploads/default/optimized/2X/6
77280	/var/discourse/shared/standalone/log/var-log
81928	/var/discourse/shared/standalone/postgres_data/pg_wal
84064	/var/discourse/shared/standalone/log
294384	/var/discourse/shared/standalone/uploads/default/optimized/1X
325068	/var/discourse/shared/standalone/uploads/default/original/1X
559576	/var/discourse/shared/standalone/uploads/default/original/2X
724684	/var/discourse/shared/standalone/postgres_data/base/16384
730776	/var/discourse/shared/standalone/uploads/default/optimized/2X
749424	/var/discourse/shared/standalone/postgres_data/base
833836	/var/discourse/shared/standalone/postgres_data
884648	/var/discourse/shared/standalone/uploads/default/original
1025164	/var/discourse/shared/standalone/uploads/default/optimized
1909816	/var/discourse/shared/standalone/uploads/default
1919380	/var/discourse/shared/standalone/uploads
3839148	/var/discourse/shared/standalone/backups/default
3839152	/var/discourse/shared/standalone/backups
6682972	/var/discourse/shared/standalone
6682976	/var/discourse/shared/
2 Me gusta

Debería haber sido más preciso inicialmente, pero no esperaba recibir comentarios tan generalizados.

Nuestras cargas y copias de seguridad están en S3. El tamaño de la base de datos en el sistema en vivo es de aproximadamente 230 GB. Las copias de seguridad comprimidas son de alrededor de 25 GB, creo.

4 Me gusta

¡Vaya, esa es una de las grandes! A ese tamaño, la operación de la base de datos suele ser un poco más problemática, en efecto.

2 Me gusta

Hola. ¿Has aspirado últimamente?

No, tenía la impresión de que autovacuum debería encargarse de ello, ¿no?

Creo que sí. No tengo claro qué lo activa. Creo que hacer uno adicional no hace daño y podría ahorrarte algo de espacio. Se recomienda hacerlo después de la actualización si la haces en el mismo lugar. He visto que ha limpiado considerable espacio algunas veces.

Si tu base de datos tiene 230 GB, definitivamente la restauraría en un servidor nuevo. El tiempo de inactividad para leer y escribir 230 GB será significativo.

1 me gusta