Observação
Procurando por serf.io? O site do servo foi encerrado em 10/02/2024. Os documentos servidos anteriormente em Serf.io podem ser encontrados https://github.com/hashicorp/serf/blob/master/docs/index.html.markdown
O SERF é uma solução descentralizada para descoberta e orquestração de serviços que são leves, altamente disponíveis e tolerantes a falhas.
O servidor é executado no Linux, Mac OS X e Windows. Um protocolo de fofoca eficiente e leve é usado para se comunicar com outros nós. O SERF pode detectar falhas no nó e notificar o restante do cluster. Um sistema de eventos é construído no topo do SERF, permitindo que você use o protocolo de fofocas do servo para propagar eventos, como implantações, alterações de configuração, etc. O servo é completamente sem master, sem ponto de falha.
Aqui estão alguns exemplos de casos de uso de servo, embora haja muitos outros:
Primeiro, faça o download de um serfe binário pré -criado para o seu sistema operacional, compile você mesmo ou instale usando go get -u github.com/hashicorp/serf/cmd/serf
.
Em seguida, vamos iniciar alguns agentes de servos. Os agentes correm até que eles saem para sair e lidar com a comunicação de tarefas de manutenção do servo. Em uma configuração real de servidor, cada nó no seu sistema executará um ou mais agentes do SERF (ele pode executar vários agentes se você estiver executando vários tipos de cluster. Por exemplo, servidores da Web vs. servidores de memcached).
Inicie cada agente de servidor em uma sessão de terminal separada para que possamos ver a saída de cada um. Inicie o primeiro agente:
$ serf agent -node=foo -bind=127.0.0.1:5000 -rpc-addr=127.0.0.1:7373
...
Inicie o segundo agente em outra sessão do terminal (enquanto a primeira ainda está em execução):
$ serf agent -node=bar -bind=127.0.0.1:5001 -rpc-addr=127.0.0.1:7374
...
Neste ponto, dois agentes do SERF estão funcionando de forma independente, mas ainda não têm conhecimento um do outro. Agora vamos dizer ao primeiro agente a participar de um cluster existente (o segundo agente). Ao iniciar um agente de servidor, você deve participar de um cluster existente especificando pelo menos um membro existente. Depois disso, as fofocas de servidores e o restante do cluster tomam conhecimento da junção. Execute os seguintes comandos em uma terceira sessão do terminal.
$ serf join 127.0.0.1:5001
...
Se você está assistindo seus terminais, verá os dois agentes do SERF tomar conhecimento da junção. Você pode provar isso executando serf members
para ver os membros do cluster de servo:
$ serf members
foo 127.0.0.1:5000 alive
bar 127.0.0.1:5001 alive
...
Nesse ponto, você pode Ctrl-C ou forçar matar qualquer agente de servidor e eles atualizarão suas listas de associação adequadamente. Se você Ctrl-C um agente de servidor, ele sairá graciosamente notificando o cluster de sua intenção de sair. Se você forçar a matar um agente, ele eventualmente (geralmente em segundos) será detectado por outro membro do cluster que notificará o cluster da falha do nó.
A documentação completa e abrangente é visível no site do servo:
https://github.com/hashicorp/serf/tree/master/docs
Se você deseja trabalhar no próprio servo, primeiro precisará instalar (a versão 1.10+ é necessária ). Certifique -se de instalar corretamente, incluindo a configuração do seu Gopath.
Em seguida, clone este repositório em $GOPATH/src/github.com/hashicorp/serf
e depois digite make
. Em alguns momentos, você terá um executável serf
que trabalha:
$ make
...
$ bin/serf
...
NOTA: make
também colocará uma cópia do executável sob $GOPATH/bin/
O SERF é antes de tudo uma biblioteca com uma interface de linha de comando, serf
. A Biblioteca Serf é independente do agente da linha de comando, serf
. O serf
binário está localizado no cmd/serf
e pode ser instalado sozinho, emitindo o comando go get -u github.com/hashicorp/serf/cmd/serf
. As inscrições usando a biblioteca SERF devem incluir apenas github.com/hashicorp/serf
.
Os testes podem ser executados digitando make test
.
Se você fizer alterações no código, faça make format
para formatar automaticamente o código de acordo com os padrões Go.