= [native docker clustering with swarm] Discover the Discovery Services ==discovery services * necesidad de disponer de un servicio de descubrimiento para localizar aquello que buscas * con pocos nodos y configuraciones simples no sería necesario, tu sabes donde está todo aquello que necesitas * con muchos nodos, cambiantes, y cientos de contenedores, es imposible de gestionar (cambian dinámicamente de IP, por ejemplo) * existen muchos, pero todos ellos requieren: * sistemas distribuidos en todos los nodos * escalables * tolerancia a fallos * registro * anunciar * almacenaje key-value * swarm v1 * no integra uno propio * integrar el tuyo propio a través de //libkv// * token * Consul * Etcd (se ha acabado integrando) * ZooKeeper === token * ''docker run ... token:%%//%%$TOKEN'' * requiere conexión a internet de los nodos y acceso a Docker Hub * se ha de generar un UUID de swarm (''swarm create'') * se utiliza para unir nodos y hablar con el manager * se acabará deprecando === raft * algoritmo para consensuar en sistemas distribuidos la elección del lider y la consistencia de los valores * otro: paxos (más complejo y difícil de comprender) * raft: Consul, Etcd * paxos: ZooKeeper * [[https://ramcloud.stanford.edu/raft.pdf]] ==== teoría de funcionamiento * simplicidad * mensajes y logs son solo envíados del lider del cluster a sus miembros * un cluster basado en este algoritmo debería mantenerse replicado de una manera consistente, indistintamente de lo que pase: nevos nodos, caída de otros * número impar de nodos (para evitar split-brains) * en condiciones normales, hay un lider que mantiene informados a los seguidores de su estado (heartbeat). Si e lider, falla, los seguidores entienden que ha caído y buscan un nuevo lider (de manera consensuada) * los mensajes, antes de ser guardados en el registro principal del lider, son enviados a los seguidores y sólo cuando una mayoría ha confirmado su recepción, este es guardado. === Etcd * sistema de descubrimiento y compartición de configuración, en alta disponibilidad, distribuido y consistente key-value * soporta la caída de nodos (incluso el master), tiene un sistemna de elección de master. * los contenedores pueden leer y escribir en el almacen de Etcd * :2379 (comunicaciones cliente) * :2380 (comunicaciones master) * :4001 * ''etcdctl cluster-health'' * swarm v1 (lanzando servicio swarm como comentenedor y enlanzando con un cluster etcd previo):docker run -d -p 3376:3376 swarm manage -H tcp://0.0.0.0:3376 etcd://$(docker-machine ip etcd-m)/swarm * ''docker run swarm list etcd:%%//%%$(docker-machine ip etcdm):2379'' === ZooKeeper === Consul