Pregunta

¿Alguien sabe de las mejores prácticas establecidas para ejecutar servicios de Windows (en mi caso, desarrollado en .NET) de modo que (automáticamente) fallarán correctamente a otro servidor, para fines de alta disponibilidad?

Las principales formas en que puedo ver que esto se está iniciando el servidor secundario cuando sea necesario (en cuyo caso debe haber algo que monitoree al otro servidor), o que ambos servicios se ejecuten (en cuyo caso necesitan sincronizar su trabajo. No intentan hacer las mismas cosas).

¿Existe un patrón o modelo para este tipo de problema? Sé que la situación exacta hará una gran diferencia, pero parece un problema bastante común.

Gracias

John

¿Fue útil?

Solución

Esto es lo que me ha funcionado.

Desde un punto de vista de infraestructura, deberá tener 2 servidores de Windows que se agrupen. (2 cajas estándar de Windows Server funcionarán, la pieza de clúster se puede instalar y configurar, la mayoría de los administradores de SYS deben saber cómo hacer esto. puesta en marcha. A continuación, agregue un recurso agrupado al administrador de clúster de Windows para su servicio que administrará activar y apagar su servicio en cualquier nodo que esté activo. Deje que el clúster de Windows se administre cuando su servicio se ejecute y en qué nodo. Esta es la parte fácil de agrupar su servicio.

Desde el punto de vista del servicio, querrá diseñar su servicio para que pueda ser lo más apaciente posible. Este es un consejo cojo, pero realmente depende de lo que esté haciendo su servicio. En el diseño, solo suponga que en SomePoint durante la vida del código se detendrá en el peor momento posible. ¿Cómo sabrá el servicio en el nodo2 dónde recoger donde nodo1 dejado? Esa es la parte difícil para la que necesitas diseñar. Dependiendo de lo que esté haciendo su servicio, puede dejar la última tarea completa en una tabla de DB o un archivo de datos compartidos. También podría hacer que comience desde el principio y verifique si esa tarea se ha completado o no antes de actuar sobre ella.

Nuevamente, realmente dependerá de lo que el servicio necesita lograr. Espero que esto ayude.

Otros consejos

Tener ambos ejecutándose todo el tiempo es probablemente la solución más simple, pero debe asegurarse de que nunca supere el 50% de carga, de lo contrario, cuando uno falla, el otro se sobrecargará y quizás también falle.

Para sincronizar, use una base de datos transaccional. Intentar escribir su propia sincronización generalmente dará como resultado errores.

Si puede tener ambos servicios funcionando, es mejor. Debe asegurarse de que sean apátranos o que sepan cómo manejar el problema de estado, y el sés de datos se sincronizará entre ellos. En un punto de falla sin solo, empujará el problema a la DB, y allí puede tener un clúster activo activo de 2 nodos, y dejará que la fabricación de DB maneje los problemas de sincronización.

Creo que la mejor manera de lidiar con la conmutación por error es a nivel de red siempre que sea posible. IPS virtuales Fronting Balanced o entornos primarios/de conmutación por error es una buena manera de evitar tener que escribir código para escenarios de conmutación por error.

En los casos en que debe manejar la conmutación por error en el código:

  1. Prueba de conexión/llamada de servicio
  2. Si la prueba falla, envíe alertas
  3. No se puede superar el próximo punto final del servicio "registrado"

Hay dos enfoques básicos.

  1. Los clientes son conscientes de diferentes direcciones de punto final y cambian según sea necesario o según lo indique otro servicio o mecanismo de configuración. (Como ejemplo el Aplicación de demostración de StockTrader Haz esto.)

  2. Los clientes no son conscientes, y usted utiliza un enfoque de equilibrio de carga de red estándar que también puede proporcionar conmutación por error. F5 es un producto. Hay muchos otros. Básicamente es como un NAT para Servicios, todas las solicitudes pasan por su NLB y las envía a un servidor, y reenvía la respuesta a la persona que llama. Estos productos monitorean los servicios y solo usan los que están activos. También a menudo puede personalizarlo con las reglas para que asignen nuevas solicitudes a los servidores según las cargas de trabajo del servidor. Windows Server tiene esto Funcionalidad incorporada hasta cierto punto.

De cualquier manera que lo haga, es mucho más fácil si sus llamadas de servicio son "apátridas".

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top