Saltar al contenido

Construir con ASP.NET Core y RethinkDB en el Docker Swarm Mode

Primero necesitamos habilitar el modo enjambre y crear una red dedicada para nuestro clúster RethinkDB:

12345# inicializar swarmdocker swarm init# crear RethinkDB superponer networkdocker network crear --driver superponer rdb-net

powerhell

Construir con ASP.NET Core y RethinkDB en el Docker Swarm Mode
Construir con ASP.NET Core y RethinkDB en el Docker Swarm Mode

Empezamos a construir nuestro clúster RethinkDB ejecutando un solo servidor RethinkDB, eliminaremos esta instancia más tarde:

12# crear y comenzar rethinkdb primarydocker servicio crear --nombre rdb-primary --network rdb-net --replicas 1 rethinkdb:latest rethinkdb --bind all --no-http-admin

powerhell

Ahora podemos crear un nodo secundario RethinkDB que se unirá al nodo rdb-primario y formará un cluster:

12# crear e iniciar el servicio rethinkdb secondarydocker crear --nombre rdb-secondary --network rdb-net --replicas 1 rethinkdb:latest rethinkdb --bind all --no-http-admin --join rdb-primary

powerhell

Escala el nodo secundario para que podamos tener un mínimo de 3 nodos necesarios para el mecanismo automático de RethinkDB:

12# hasta 3 nodos (primario + dos secundarios) para habilitar la escala de servicio de failoverdocker automático rdb-secondary=2

powerhell

Ahora tenemos un cluster RethinkDB funcional, pero aún no hemos terminado. Debido a que iniciamos el nodo primario sin un comando de unión, nuestro cluster tiene un solo punto de falla. Si por alguna razón el contenedor rdb-primario se cae, el motor del Docker Swarm recreará y arrancará este contenedor, pero no puede unirse al cluster existente. Si iniciamos nuevas instancias rdb-secundarias, se unirán al nuevo contenedor rdb-primario y formarán otro cluster.

Para resolver este problema tenemos que quitar el servicio de rdb-primaria y recrearlo con el comando de unión así:

12345# eliminar el servicio de primaria rm rdb-primaria# recrear la primaria con --unirse al servicio de flagdocker crear --nombre rdb-primaria --red rdb-net --replicas 1 rethinkdb:ultimo rethinkdb --unir todo --no-http-admin --unirse a rdb-secundaria

powerhell

Ahora también podemos escalar el nodo primario:

12# iniciar dos rdb-primario instancesdocker escala de servicio rdb-primario=2

powerhell

En este momento tenemos 4 nodos en nuestro cúmulo, dos rdb-primarios y dos rdb-secundarios. Podemos escalar aún más cualquiera de estos dos servicios y todos se unirán a nuestro cúmulo. Si una instancia rdb-primaria o rdb-secundaria se bloquea, el enjambre Docker iniciará automáticamente otro contenedor que se unirá a nuestro cúmulo actual.

El último paso es crear un nodo proxy RethinkDB, exponemos el puerto 8080 para el administrador de la web y el puerto 28015 para que podamos conectarnos al cluster desde nuestra aplicación. Tengan en cuenta que no es necesario exponer el puerto 28015 si su aplicación se ejecuta dentro del enjambre. Expongo este puerto para poder conectarme al cluster mientras depuro en VS.NET.

12# crear e iniciar el servicio rethinkdb proxydocker crear --nombre rdb-proxy --red rdb-net --publicar 8080:8080 --publicar 28015:28015 rethinkdb:ultimo rethinkdb proxy --vincular todo --unirse a rdb-primary

powerhell

Abre un navegador y navega a http://localhost:8080 para comprobar el estado del cúmulo. En la página de servidores debería ver 4 servidores conectados al clúster.

si llevamos el servicio de los estibadores, es lo que deberíamos conseguir:

1234ID NOMBRE REPLICAS IMAGEN COMANDO157bd7yg7d60 rdb-secundaria 2/2 rethinkdb:ultimo rethinkdb --unir todo --no-http-admin --unir rdb-primaria41eloiad4jgp rdb-primaria 2/2 rethinkdb: último rethinkdb --bind all --no-http-admin --join rdb-secondary67oci5m1wksi rdb-proxy 1/1 rethinkdb:último rethinkdb proxy --bind all --join rdb-primary