Nota
¿Buscando serf.io? El sitio web del SERF se cerró el 10/02/2024. Los documentos anteriormente servidos desde Serf.io se pueden encontrar https://github.com/hashicorp/serf/blob/master/docs/index.html.markdown
SERF es una solución descentralizada para el descubrimiento y la orquestación de servicios que es liviano, altamente disponible y tolerante a fallas.
SERF se ejecuta en Linux, Mac OS X y Windows. Se utiliza un protocolo de chismes eficiente y liviano para comunicarse con otros nodos. SERF puede detectar fallas de nodos y notificar al resto del clúster. Un sistema de eventos se basa en SERF, lo que le permite utilizar el protocolo de chismes del SERF para propagar eventos como implementaciones, cambios de configuración, etc. El siervo no es completamente maestro sin un solo punto de falla.
Aquí hay algunos casos de uso de ejemplo de SERF, aunque hay muchos otros:
Primero, descargue un binario SERF pre -construido para su sistema operativo, compile el siervo usted mismo o instale usando go get -u github.com/hashicorp/serf/cmd/serf
serf/cmd/serf.
A continuación, comencemos un par de agentes del siervo. Los agentes ejecutan hasta que se les dice que renuncien y manejen la comunicación de tareas de mantenimiento de SERF. En una configuración de SERF real, cada nodo en su sistema ejecutará uno o más agentes del SERF (puede ejecutar múltiples agentes si está ejecutando múltiples tipos de clúster. Por ejemplo, servidores web frente a servidores Memcached).
Inicie cada agente del SERF en una sesión terminal separada para que podamos ver la salida de cada uno. Comience el primer agente:
$ serf agent -node=foo -bind=127.0.0.1:5000 -rpc-addr=127.0.0.1:7373
...
Inicie el segundo agente en otra sesión de terminal (mientras que el primero todavía se está ejecutando):
$ serf agent -node=bar -bind=127.0.0.1:5001 -rpc-addr=127.0.0.1:7374
...
En este punto, dos agentes del SERF se ejecutan de forma independiente, pero aún desconocen el uno del otro. Ahora les digamos al primer agente que se una a un clúster existente (el segundo agente). Al comenzar un agente SERF, debe unirse a un clúster existente especificando al menos un miembro existente. Después de esto, el siervo chismoso y el resto del clúster se da cuenta de la unión. Ejecute los siguientes comandos en una tercera sesión de terminal.
$ serf join 127.0.0.1:5001
...
Si está viendo sus terminales, debería ver que ambos agentes de SERF se dan cuenta de la unión. Puede probarlo ejecutando serf members
para ver a los miembros del clúster SERF:
$ serf members
foo 127.0.0.1:5000 alive
bar 127.0.0.1:5001 alive
...
En este punto, puede CTRL-C o Force Kill cualquiera de los agentes del SERF, y actualizarán sus listas de membresía adecuadamente. Si ctrl-c un agente de serf, se irá con gracia notificando al clúster su intención de irse. Si fuerza mata a un agente, eventualmente (generalmente en segundos) será detectado por otro miembro del clúster que notificará al clúster de la falla del nodo.
La documentación completa y completa se puede ver en el sitio web del sERF:
https://github.com/hashicorp/serf/tree/master/docs
Si desea trabajar en el SERF en sí, primero necesitará Instalar (se requiere la versión 1.10+). Asegúrese de haberlo instalado correctamente, incluida la configuración de su Gopath.
A continuación, clone este repositorio en $GOPATH/src/github.com/hashicorp/serf
y luego solo escriba make
. En unos momentos, tendrá un ejecutable serf
en funcionamiento:
$ make
...
$ bin/serf
...
Nota: make
también colocará una copia del ejecutable bajo $GOPATH/bin/
SERF es ante todo una biblioteca con una interfaz de línea de comandos, serf
. La biblioteca SERF es independiente del agente de la línea de comandos, serf
. El binario serf
se encuentra en cmd/serf
y se puede instalar independientemente emitiendo el comando go get -u github.com/hashicorp/serf/cmd/serf
. Las aplicaciones que usan la biblioteca SERF solo deben incluir github.com/hashicorp/serf
.
Las pruebas se pueden ejecutar escribiendo make test
.
Si realiza algún cambio en el código, ejecute make format
para formatear automáticamente el código de acuerdo con los estándares de GO.