
Tengo un problema aquí.
Tenemos una configuración de instancias informáticas en dos regiones de nube diferentes de un proveedor de nube que no mencionaría excepto para señalar que es complicado trabajar con él.
Esas instancias utilizan (obviamente) privadas.
No podemos usar una solución de equilibrio de carga basada en un VIP porque este proveedor de nube no permite IP privadas entre regiones, por lo que un NLB está fuera de escena.
Lo que necesitamos es un servidor DNS (bueno, dos, en realidad, al menos) con capacidades de verificación del estado del registro A. Déjame poner un ejemplo:
- Servicio:
- Servidor A - Región 1 - IP 10.1.1.100
- Servidor B - Región 2 - IP 172.26.1.100
- Equilibradores de DNS (que comparten los mismos registros y base de datos de configuración):
- DNS A - Región 1 - IP 10.1.1.50
- DNS B - Región 2 - IP 172.26.1.50
- Registro DNS 1: lo que sea.local - 10.1.1.50
- Registro DNS 2: lo que sea.local - 172.26.1.50
- Clientela:
- Cliente A - Cualquier región - Cualquier IP
- Escenario A:
- El cliente A tiene DNS A y DNS B configurados como servidores DNS.
- El cliente A solicita lo que sea.local al servidor DNS A
- El servidor A está fuera de línea
- El servidor DNS A tiene comprobaciones de estado del backend, lo detecta y responde con la IP del servidor B (172.26.1.50).
- TTL se establece en 0 (cero) o algo igualmente bajo para evitar el almacenamiento en caché.
- Escenario B:
- El cliente A tiene DNS A y DNS B configurados como servidores DNS.
- El cliente A solicita lo que sea.local, el servidor DNS A está inactivo, por lo que el servidor DNS B responde
- El servidor B está desconectado
- El servidor DNS B tiene comprobaciones de estado del backend, lo detecta y responde con la IP del servidor A (10.1.1.100)
- TTL se establece en 0 (cero) o algo igualmente bajo para evitar el almacenamiento en caché.
En esencia: un servidor DNS que verifica el estado de las IP de los registros DNS.
Saludos.
Respuesta1
El cliente A tiene DNS A y DNS B configurados como servidores DNS.
Erm, te diriges a un mundo de dolor al tener una máquina que utiliza múltiples servidores DNS configurados con diferentes datos divididos. Realmente necesitarías crear tu propia pila resuelta en el host de monitoreo para obtener un comportamiento predecible.
La forma de monitorear este servicio es sin dividir DNS:
service.example.com. CNAME region1_service.example.com.
service.example.com. CNAME region2_service.example.com.
region1_service.example.com. A 10.1.1.50
region2_service.example.com. A 172.26.1.50
Y monitorear cada uno de:
- servicio.ejemplo.com
- región1_servicio.ejemplo.com
- región2_servicio.ejemplo.com
Alternativamente su agente de monitoreopuedeadmite la configuración de direcciones explícitas, para que pueda monitorear cada instancia por separado. Pero luego tienes la complicación de marcar una interrupción en AMBOS nodos, lo cual es mucho más grave que una interrupción en uno de los nodos.
También debe verificar CÓMO su cliente de monitoreo implementa rrDNS. El tiempo de detección de conmutación por error para cumplir las reglas es de aproximadamente 5 minutos, pero los navegadores aplican un umbral de alrededor de 10 segundos para la conexión inicial y <1 segundo para solicitudes posteriores.
Respuesta2
Al final HAY soluciones para esto. Esto es esencialmente lo que proporciona un GSLB, hay muchos comerciales.
Si quieres hacerlo con cierta sencillez y código abierto, puedes utilizar PowerDNS con registros LUA en un cluster PowerDNS.