Guía para construir un super Nodo de Bitcoin
Cyph3rp9nkEl nodo esta virtualizado bajo Proxmox y usaremos Start9 (embassyOS) como sistema operativo.
Proxmox usa KVM que es un hypervisor de tipo 1 y nada tiene que envidiar a soluciones como ESXi de VMware, y lo mejor, es open source, está basado en Debian y con un kernel de Ubuntu LTS modificado. ¿Por qué virtualizamos el nodo? Porque todo son ventajas con respecto a ejecutarlo directamente sobre el hardware.
- Aislamiento del hardware, en el caso de embassyOS al estar basado en PureOS, una versión de Debian enfocada en la seguridad y que solo usa drivers open source, el soporte de hardware está bastante restringido, además embassyOS no soporta UEFI y hay muchos equipos nuevos que vienen sin la opción de Legacy BIOS.
- Posibilidad de realizar un backup completo de la máquina en almacenamiento en red, o en un disco USB, y la posibilidad de restaurar dicho backup en otra maquina Proxmox sin preocuparnos del hardware que hay por debajo, además, los backups se pueden programar.
- Posibilidad de aumentar el disco en un futuro sin tener que volver a reinstalarlo todo o seguir procedimientos complicados.
- Posibilidad de poder usar la maquina hosts para más cosas, además proxmox soporta Linux Containters (LXC) con lo que podemos montar muchas máquinas ejecutando servicios a un coste de recursos hardware ridículos.
- Proxmox soporta RAID por software vía ZFS y Btrfs; En nuestro caso usaremos Btrfs por consumir menos recursos hardware que ZFS. Esto es una gran ventaja frente a usar raid por BIOS/UEFI ya que en los RAID hardware necesitaras el mismo hardware para restaura en caso de fallo del mismo, con el RAID software te aíslas del hardware, los discos te los puedes llevar a un hardware distinto.
- Facilidad de migración de la máquina virtual a nuevo hardware, solo necesitamos hacer un backup y restaurarlo.
- Posibilidad de realizar snapshots de la máquina, lo cual nos permite realizar por ejemplo una restauración en caso de una actualización fallida.
- Posibilidad de tener un nodo en alta disponibilidad si montamos un cluster con dos o más servidores.
¿Por qué Start9 (embassyOS) y no otra plataforma como Umbrel u otros? Simplemente porque embassyOS está bien construido, el resto de plataformas no se han creado pensando en la seguridad y en la escalabilidad.
- Arquitectura modular, ahora mismo usan Docker pero se podría cambiar de forma fácil.
- Sistema de backups integrado
- Funciones de migración y restauración
- Volumen encriptado
- Integración de las aplicaciones
- Posibilidad de crear tus propios servicios
- Estabilidad
Instalación de Proxmox con Btrfs y Raid 1
El hardware recomendado son dos discos ssd o mecánicos, pero preferiblemente ssd y 8gb de memoria ram mínimo.
Descargamos la iso de Proxmox desde:
https://www.proxmox.com/en/downloads/category/iso-images-pve
En esta guía no voy a entrar en detalles básicos de cómo crear un USB bootable y demás, esto deberías saberlo y si no Google es tu amigo.
La primera pantalla que te aparecerá será esta:
En la segunda pantalla aceptas los términos del contrato:
Y ahora fíjate en la siguiente, es aquí donde seleccionamos Btrfs y Raid 1 en opciones. Como podéis ver aparecen dos discos, no hay que tocar ninguna opción más, simplemente darle en Ok. Quiero recordar que usamos Btrfs frente a ZFS porque consume menos recursos y además en ZFS se recomienda memoria ECC para evitar la corrupción de datos. ¿Y porque usamos Btrfs frente a ext4 u otros? Porque al igual que ZFS, Btrfs lleva un gestor de volúmenes integrado que nos permite realizar raids por software sin necesidad de mdadm con un rendimiento excelente y Btrfs es un sistema de archivos COW que nos protege también frente a corrupción de datos.
En la siguiente pantalla seleccionamos el país y zona horaria:
Ahora elegimos el password de root y un correo para notificaciones, os lo podéis inventar:
En la siguiente pantalla configuráis la red de la máquina:
Finalmente revisáis vuestros datos y pulsáis en instalar:
La máquina reiniciara y podréis entrar a gestionar el entorno Proxmox a través de un navegador web y la ip que le hayáis puesto.
No voy a comentar mucho sobre entornos virtuales de nuevo, entiendo que estáis familiarizados, no obstante, comentare las principales características que son útiles para vuestro nodo.
Añadir repositorio de actualizaciones sin suscripción
Proxmox tienes dos modos de funcionamiento, con suscripción y sin suscripción(gratuito), es exactamente lo mismo solo que en el modo de suscripción las actualizaciones están más testeadas, podríamos compararlo al modelo de Red Hat y Fedora.
Lo primero será ir a los repositorios y desactivar el repositorio entreprise y luego activar el repositorio no-subscription.
Ahora agregamos el repositorio no-subscription:
Tras esto en el apartado updates refrescamos los repositorios y procedemos a actualizar desde el botón upgrade.
Fallo de un disco en Btrfs.
En el caso de que os falle un disco del Raid 1 el sistema no arrancara, ya que en Btrfs no se permite el arranque de un raid degradado a no ser que uses la opción rootflags=degraded en el grub, pero no lo recomiendo porque así os enterareis cuando un disco falle.
Cuando falle un disco el sistema entrara en la consola initramfs y allí tendréis que ejecutar:
mount -o degraded /dev/sdXY /root
sdXY es el disco donde estará vuestra partición root de Proxmox, en este caso el disco que quede vivo.
Luego de ejecutar el comando tenemos que pulsatr Ctrl + D para continuar con el arranque.
Una vez arrancado de nuevo nuestro sistema proxmox con otro disco en buen estado, procederéis a copiar las particiones de un disco a otro ya que los dos discos tienen que ser idénticos para que en caso de que falle uno puedas arrancar del otro.
sfdisk -d /dev/sdb > parts
sfdisk /dev/sda < parts
Estos comandos copian las particiones del disco sdb en el disco sda.
Tener en cuenta tras esto de copiar el contenido de la segunda partición correspondiente al arranque grub de EFI, para ello simplemente montáis la partición sda2 en cualquier directorio y le copias el contenido de /boot/efi que corresponde al punto de montaje de sdb2.
Ahora es la hora de recrear la partición btrfs correspondiente al raid 1 para ellos usamos el siguiente comando:
btrfs replace start 1 /dev/sda3 /
Donde el 1 después del start indica el disco fallido que en este casi era el primero, esto lo podemos ver con el comando “btrfs filesystem show” y /dev/sda3 corresponde a la partición Btrfs del nuevo disco, por último / el punto de montaje.
Con el siguiente comando podemos ver el progreso de la reconstrucción.
btrfs replace status /
Copia de seguridad de la máquina virtual
Proxmox nos permite realizar copias de seguridad de la máquina virtual lo cual nos facilita la tarea de migración a un nuevo hardware o restauración en caso de desastre.
Primero deberéis de añadir el tipo de almacenamiento deseado para la copia, para ellos tenéis que ir a las opciones del datacenter sobre Storage:
Si por ejemplo queréis añadir un disco USB solo tendrías que montarlo primero en Proxmox y luego pasarle el punto de montaje y nombre y el tipo de contenido en este caso VZDump.
Tras esto ya podréis ejecutar backups o programarlos. No me voy a extender mucho aquí mejor que lo probéis, solo tener en cuenta que Proxmox soporta tres tipos de backups, snapshots, suspend y stop. El modo suspend se usa por razones de compatibilidad y no recomiendo usarlo. El modo snapshots es el más rápido ya que la maquina no se tiene que parar, pero corres el riesgo de tener alguna inconsistencia sobre todo en determinadas bases de datos y el modo stop para la máquina para realizar un backup pero es el más consistente. Para la migración de una máquina a un nuevo hardware recomiendo el modo stop.
Snapshots de la máquina
Recomiendo realizar snapshots de vuestro nodo antes de una actualización o cualquier cambio crítico, os ahorrara horas de trabajo ante un desastre. Tan fácil como ir a la máquina en cuestión y pulsar sobre snapshot:
Instalación embassyOS
Lo primero es descargar la ISO en embassyOS en el almacenamiento de Proxmox. Para ellos vamos a nuestro local-btrfs y en ISO Images metemos la dirección de descarga y pulsamos sobre Query URL para que capture el nombre de la ISO o añadimos el nombre que quedamos manualmente, tras lo cual pulsamos en Download.
https://github.com/Start9Labs/embassy-os/releases/download/v0.3.3/embassyos_amd64.iso
Ahora crearemos la máquina virtual:
Ponemos el nombre de la máquina:
Seleccionamos la ISO de instalación:
En la siguiente pantalla todo por defecto:
En esta pantalla elegimos el tamaño de disco:
Elegimos el número de CPUs:
La cantidad de memoria RAM:
La configuración de red la dejamos toda por defecto:
Finalmente pulsamos en confirmar:
Arrancamos la maquina y en console podemos ver la pantalla de la misma:
Procedemos a la instalación de embassyOS.
Seleccionamos el disco de instalación:
Eliminamos la ISO Cargada:
Para ello vamos a Hardware seleccionamos el CD y marcamos “Do not use any media”:
Volvemos a la consola y reiniciamos.
En la siguiente pantalla pulsamos sobre “Start Fresh”. Las opciones de recover para poder restaurar de un backup o realizar un traspaso de los datos a otra máquina, pero estas funciones las delegamos en Proxmox, exceptuando el backup de los servicios que veremos más adelante.
Seleccionamos el disco de instalación:
E introducimos el password:
Se inicializa la máquina:
Y ya podemos proceder con el Login:
No voy a extenderme en como configurar embassyOS ya que es tan simple como ir al Marketplace e instalar los servicios deseados y tenéis un manual bastante completo en su web:
https://docs.start9.com/latest/user-manual/
Si os recalco la importancia del backup de los servicios que podéis realizar en un dispositivo USB o en red. La función se encuentra dentro de System:
El backup este encriptado con vuestra contraseña de embassyOS y es necesario por ejemplo para salvaguardar los fondos onchain de LND y los fondos de los canales. En caso de desastre solo tenéis que montar un embassyOS nuevo y restaurar desde el backup, una vez termine la sincronización inicial del grafo de LND los canales se cerraran y tendréis todo vuestro saldo en onchain.
Ampliación de disco en embassyOS
Si me voy a extender en este punto porque es una de las razones por la cual hemos instalado embassyOS en un entorno virtual. La razón es no depender del hardware y tratar la máquina virtual como un archivo, con lo cual nos lo podemos llevar donde queramos. En este caso supondremos que hemos montado un servidor Proxmox nuevo con más almacenamiento y vamos a migrar la máquina embassyOS realizando un backup de la misma e importándolo en el nuevo entorno como anteriormente se ha explicado en la sección Backup.
Lo primero seria ampliar el espacio de la máquina virtual embassyOS para ello vamos a las opciones de Hardware y editamos el disco:
Le decimos en cuanto queremos incrementarlo:
Y reiniciamos la máquina.
Entramos por ssh en la máquina, para ello primero tendremos que importar en Embassy nuestra clave publica ssh, no os voy a explicar cómo crear una clave publica/privada, doy por sentado que entendéis cómo funciona ssh. embassyOS por seguridad no permite el Login ssh con usuario y contraseña, solo a través de claves.
Una vez dentro comprobaremos que el espacio del disco virtual se ha aumentado con el comando:
sudo lsblk /dev/sda
Como vemos ahora el espacio es de 64G frente a los 32 anteriores.
El siguiente paso será aumentar la partición destinada a los datos de Embassy que se corresponde con la sda3:
Como vemos actualmente ocupa 16G porque los 16 restantes se reservan para el sistema operativo.
Lo primero será destruir la partición y volverla a recrear con todo el espacio restante de disco. No os preocupéis que no hay perdida de datos, solo modificamos los segmentos que delimitan la partición. Para ello usaremos fdisk.
sudo fdisk /dev/sda
Con la opción “p” vemos la información del disco.
Con “d” borramos la partición seleccionada que será la “3”:
Ahora recreamos la partición con “n”, la partición tiene que ser primaria y del tipo “Linux LVM”, esto lo cambiaremos más tarde y mantenemos el número de partición, la opción que aparecen de “First sector” y “Last sector” las dejamos por defecto para que no coja todo el espacio disponible.
Muy importante mantener la firma ya que de no hacerlo romperemos el volumen LVM.
El tipo de partición lo cambiamos con la opción “t” y el tipo es 8e (Linux LVM):
Por último, escribimos “w” para guardar los cambios y comprobamos de nuevo con fdisk que se han realizado:
El siguiente paso será decirle a LVM que el disco ha cambiado de tamaño, para ello ejecutar:
sudo pvresize /dev/sda3
Lo siguiente será aumentar el volumen LVM, para ello entramos en el gestor de volumenes con:
sudo lvm
Una vez dentro con el comando “lvs” veremos los volúmenes:
El volumen que queremos ampliar es el “package-data”.
Ahora tenderemos que averiguar el path para ampliar, para ello ejecutamos el comando lvdisplay:
Y finalmente ampliamos el lv con el comando:
"sudo lvextend -l +100%FREE /dev/EMBASSY_ZO5QLRUJOANYWETOOFKNZBLBCL33XK6C7MGG4FFN6K5HNMPPW3SQ/package-data"
Ahora podremos ver de nuevo que el volumen se ha ampliado:
Por último, solo nos quedara ampliar el sistema de ficheros.
Primero averiguamos el mapeo del dispositivo con “df -h” y ejecutamos el siguiente comando:
"sudo resize2fs -f /dev/EMBASSY_ZO5QLRUJOANYWETOOFKNZBLBCL33XK6C7MGG4FFN6K5HNMPPW3SQ/package-data"
Ahora podremos ver que el sistema de ficheros se ha extendido:
Y si vamos al monitor de embassyOs también lo podremos ver: