python - metodo - ¿Cómo podemos conectar softwares basados en clústeres usando Chef?
metodo del codo python (3)
Como parte de una configuración de plataforma orquestación, estamos utilizando nuestro paquete python para instalar varios paquetes de software en un grupo de máquinas en la nube.
Tenemos el siguiente escenario:
- de muchos softwares, uno de nuestros software es Ambari (ayuda en la administración de la plataforma de hadoop).
- funciona de la siguiente manera: ''n'' número de máquinas de clúster que informan a 1 servidor ambari.
- Para que cada máquina de clúster haga informes, debemos instalar ambari-agent en cada una de las máquinas del clúster y modificar su archivo de propiedades con el servidor de ambari que se supone que debe informar e iniciar ambari-agent.
¿Qué podemos hacer? Tuvimos éxito en la instalación de servidores Ambari y agentes ambari por separado en nuestras máquinas de clúster con la ayuda de libros de cocina de chef independientes.
lo que no podemos hacer, cómo podemos modificar el archivo de propiedades ambari-agent de cada máquina para que apunte a nuestra IP del servidor ambari. en general, ¿cuál es una forma elegante de conectar softwares basados en clústeres como parte de la orquestación de chef?
NÓTESE BIEN:. ambari-server se crea al vuelo y, por lo tanto, su IP se obtiene durante el tiempo de ejecución.
¿Es posible? ¿Hay alguna alternativa al problema anterior?
Gracias
Si tiene un servidor de chef, puede hacer una búsqueda del nodo que ejecuta la receta ambari-server. Luego usa la IP de esa máquina. Alternativamente, puede usar un nombre DNS para el servidor ambari, y luego actualizar su entrada DNS para apuntar al nuevo servidor cuando esté disponible.
Otras opciones incluyen usar confd con etcd o usar cónsul. Cada uno te permite actualizar tu config post-chef con la ip del servidor.
Esto suena como un caso de uso perfecto para el Cónsul .
Almacén flexible de valores / claves para configuración dinámica, marcado de características, coordinación, elección de líderes y más. Encuesta larga para la notificación casi instantánea de los cambios de configuración.
Hemos comenzado a usarlo para resolver un problema que suena muy similar al tuyo. Históricamente, cualquier tipo de configuración era manejada por una gran base de código de Python con un montón de Chef. Hemos estado trabajando en reemplazar algunas partes de Cónsul.
Lo que realmente me impresionó fue ver qué tan rápido la información enviada a través del clúster aumenta la visibilidad. Puedo ver la provisión de máquinas y entrar en línea antes de que el panel de control del servicio en la nube lo haga gracias a los cheques de salud de Consuls.
Hace mucho más que solo actuar como una tienda clave / valor. También puede manejar el descubrimiento de servicios y realizar cualquier tipo de chequeo de salud regular que actualmente pueda rastrear a través de algo como Sensu.
Recomiendo echarle un vistazo.
Espero que sea de alguna ayuda. Buena suerte con las implementaciones!
Este es un escenario para Chef-servidor y búsqueda .
Tendrás que cambiar tu receta que instala el agente de ambari para obtener IP del servidor de ambari dinámicamente.
Primero ejecutas recetas que configuran tu servidor ambari. Cuando Chef se haya ejecutado exitosamente allí, incluye cierta información sobre el nodo en Chef-servidor, incluidas las recetas y los roles que se aplicaron a ese nodo en particular. Puede dirigirse al chef-servidor y verificar los atributos del nodo, particularmente el atributo "recetas".
Ahora cambie su receta de agente ambari. No sé cómo se ve exactamente el archivo de configuración del agente, pero solo nos interesa una línea, donde se establece la IP del servidor maestro.
Cree una plantilla del archivo de configuración y agréguelo al libro de cocina. Reemplace el valor IP principal codificado con <%= @master_ip %>
Cambie la receta del agente ambari para que establezca este valor correctamente:
# search for the server node. I expect server node was configured with
# ambari::server recipe. If not, change it to the appropriate value and
# don''t fortget to escape colons.
ambari_server_node = search( :node, ''recipes:ambari/:/:server'' )
# now create the configuration file on ambari agent node from
# the previously created template and pass the value for the @master_ip
# variable
template ''/right/path/on/target/node/config.file'' do
[...]
variables( :master_ip => ambari_server_node[''ipaddress''] )
end