Atualização e descoberta do serviço de contêiner Docker Consul

Índice

1. Introdução ao Cônsul

1.O que é registro e descoberta de serviço?

2. O que é cônsul?

3. arquitetura cônsul 

2. Implantar servidor cônsul (192.168.88.10)

1. Criar serviço Consul

2. Visualize informações do cluster

3. Obtenha informações do cluster por meio da API http

3. Servidor registrador (192.168.88.60)

1.Instale Gliderlabs/Registrador

2. Teste se a função de descoberta de serviço está normal

3. Verifique se os serviços http e nginx estão registrados no cônsul

4、modelo cônsul

1. Prepare o arquivo de modelo nginx

2.yum instalar nginx

3. Configure e inicie o modelo

4.Acesse o modelo-nginx

5. Adicione um nó de contêiner nginx

5.1 Adicione um nó de contêiner nginx para testar funções de descoberta de serviço e atualização de configuração.

5.2 Visualize o conteúdo do arquivo /usr/local/nginx/conf/vhost/kgc.conf

5.3 Visualize os logs dos três contêineres nginx e solicite a pesquisa de cada nó do contêiner normalmente

5. cônsul multinó


1. Introdução ao Cônsul

1.O que é registro e descoberta de serviço?

O registro e a descoberta de serviços são componentes indispensáveis ​​e importantes na arquitetura de microsserviços. A princípio os serviços eram single-node, o que não garantia alta disponibilidade e não considerava a pressão do serviço, as chamadas entre serviços eram simplesmente acessadas através da interface. Até o surgimento de uma arquitetura distribuída com múltiplos nós, a solução inicial era balancear a carga do front-end do serviço. Desta forma, o front-end deve conhecer as localizações de rede de todos os serviços back-end e configurá-los no arquivo de configuração . Haverá várias perguntas aqui:

  • Se você precisar chamar o serviço de back-end AN, precisará configurar os locais de rede dos serviços N, o que é muito difícil de configurar
  • A alteração do local de rede do serviço de back-end requer a alteração da configuração de cada chamador

Como existem esses problemas, o registro e a descoberta de serviços são as soluções para esses problemas. O serviço de back-end AN pode registrar sua localização de rede atual no módulo de descoberta de serviço, e a descoberta de serviço é registrada na forma de KV. K é geralmente o nome do serviço e V é IP:PORT. O módulo de descoberta de serviço realiza verificações de integridade regularmente e pesquisa se esses serviços de back-end podem ser acessados. Quando o front-end chama o serviço back-end AN, ele vai para o módulo de descoberta de serviço para solicitar sua localização de rede e, em seguida, chama seus serviços. Este método pode resolver o problema acima. O front-end não precisa registrar a localização da rede desses serviços de back-end. O front-end e o back-end estão completamente dissociados!

2. O que é cônsul?

Consul é o software de gerenciamento de serviços de código aberto do Google desenvolvido na linguagem Go. Suporta vários data centers, alta disponibilidade distribuída, descoberta de serviços e compartilhamento de configuração. O algoritmo Raft é usado para garantir alta disponibilidade de serviços. Possui estrutura integrada de registro e descoberta de serviços, implementação de protocolo de consistência de distribuição, verificação de integridade, armazenamento de chave/valor e solução de vários data centers, e não precisa mais depender de outras ferramentas (como ZooKeeper, etc.). A implantação do serviço é simples, com apenas um pacote binário executável. Cada nó precisa executar um agente, que possui dois modos de operação: servidor e cliente. A recomendação oficial de cada data center é que sejam necessários 3 ou 5 nós de servidores para garantir a segurança dos dados e garantir que a eleição do servidor-líder possa ser realizada corretamente.

No modo cliente, todos os serviços registrados no nó atual serão encaminhados para o nó servidor, e esta informação não será persistida.
No modo servidor a função é semelhante à do modo cliente, a única diferença é que irá persistir todas as informações localmente, para que em caso de falha as informações possam ser retidas.
O líder do servidor é o chefe de todos os nós do servidor. Ele é diferente dos outros nós do servidor porque precisa ser responsável por sincronizar as informações registradas com outros nós do servidor. Ele também é responsável pelo monitoramento da saúde de cada nó.

Alguns recursos principais fornecidos pelo cônsul:

  • Registro e descoberta de serviços: O Consul facilita o registro e a descoberta de serviços por meio de interfaces DNS ou HTTP. Alguns serviços externos, como os fornecidos por saas, também podem ser registrados da mesma forma.
  • Verificação de integridade: a verificação de integridade permite que o cônsul alerte rapidamente a operação no cluster. A integração com a descoberta de serviços evita o encaminhamento de serviços para serviços com falha.
  • Armazenamento de chave/valor: Um sistema para armazenar configurações dinâmicas. Fornece uma interface HTTP simples que pode ser operada em qualquer lugar.
  • Multidatacenter: suporte a qualquer número de regiões sem configuração complexa.

A instalação do consul é para registro de serviço, ou seja, algumas informações sobre o próprio container são cadastradas no cônsul, e outros programas podem obter as informações do serviço cadastrado através do cônsul.Isso é registro e descoberta de serviço.

3. arquitetura cônsul 

  • componente registrador : descobre a localização da rede da aplicação e envia-a para o módulo de descoberta automática do servidor/cliente cônsul para registro.
  • O componente do servidor cônsul : coleta informações descobertas automaticamente e persiste todas as informações que precisam ser registradas localmente. As informações de registro podem ser sincronizadas com outros nós do servidor por meio do líder do servidor e verificações de integridade podem ser realizadas em cada nó.
  • componente do modelo cônsul : Com base nas informações de registro do cônsul, o arquivo de configuração é gerado automaticamente e substituído de acordo com o modelo do arquivo de configuração.
  • Servidor proxy : use nginx como balanceador de carga e execute o encaminhamento de proxy de acordo com a configuração gerada pelo modelo cônsul.

2. Implantar servidor cônsul (192.168.88.10)

1. Criar serviço Consul

mkdir /opt/consul
cp consul_0.9.2_linux_amd64.zip /opt/consul
cd /opt/consul
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/local/bin/

#设置代理,在后台启动 consul 服务端
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.88.10 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &

-server: 以server身份启动。默认是client。
-bootstrap :用来控制一个server是否在bootstrap模式,在一个数据中心中只能有一个server处于bootstrap模式,当一个server处于 bootstrap模式时,可以自己选举为 server-leader。
-bootstrap-expect=2 :集群要求的最少server数量,当低于这个数量,集群即失效。
-ui :指定开启 UI 界面,这样可以通过 http://localhost:8500/ui 这样的地址访问 consul 自带的 web UI 界面。
-data-dir :指定数据存储目录。
-bind :指定用来在集群内部的通讯地址,集群内的所有节点到此地址都必须是可达的,默认是0.0.0.0。
-client :指定 consul 绑定在哪个 client 地址上,这个地址提供 HTTP、DNS、RPC 等服务,默认是 127.0.0.1。
-node :节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。
-datacenter :指定数据中心名称,默认是dc1。

netstat -natp | grep consul

启动consul后默认会监听5个端口:
8300:replication、leader farwarding的端口,集群内数据的读写和复制
8301:lan cossip的端口,单个数据中心gossip协议通讯
8302:wan gossip的端口,跨数据中心gossip协议通讯
8500:web ui界面的端口,提供获取服务列表、注册服务、注销服务等HTTP接口;提供UI服务
8600:使用dns协议查看节点信息的端口,采用DNS协议提供服务发现功能

2. Visualize informações do cluster

#查看members状态
consul members

#查看集群状态
consul operator raft list-peers

#查看leader状态
consul info | grep leader

3. Obtenha informações do cluster por meio da API http

curl 192.168.88.10:8500/v1/status/peers 			#查看集群server成员
curl 192.168.88.10:8500/v1/status/leader			#集群 server-leader
curl 192.168.88.10:8500/v1/catalog/services			#注册的所有服务
curl 192.168.88.10:8500/v1/catalog/nginx			#查看 nginx 服务信息
curl 192.168.88.10:8500/v1/catalog/nodes			#集群节点详细信息

#访问ui页面
http://192.168.88.10:8500/ui

3. Servidor registrador (192.168.88.60)

1.Instale Gliderlabs/Registrador

Gliderlabs/Registrator 可检查容器运行状态自动注册,还可注销 docker 容器的服务到服务配置中心。目前支持 Consul、Etcd 和 SkyDNS2。

docker pull gliderlabs/registrator:latest 

docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
--ip=192.168.88.60 \
consul://192.168.88.10:8500

--net=host :把运行的docker容器设定为host网络模式。
-v /var/run/docker.sock:/tmp/docker.sock :把宿主机的Docker守护进程(Docker daemon)默认监听的Unix域套接字挂载到容器中。
--restart=always :设置在容器退出时总是重启容器。
--ip :刚才把network指定了host模式,所以我们指定ip为宿主机的ip。
consul :指定consul服务器的IP和端口。

2. Teste se a função de descoberta de serviço está normal

docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx   	#-h:设置容器主机名

3. Verifique se os serviços http e nginx estão registrados no cônsul

浏览器中,输入 http://192.168.80.15:8500,在 Web 页面中“单击 NODES”,然后单击“consurl-server01”,会出现 3 个服务。

//在consul服务器使用curl测试连接服务器
curl 192.168.88.10:8500/v1/catalog/services 
{"consul":[],"httpd":[],"nginx":[]}

4、modelo cônsul

Consul-Template é um aplicativo que substitui automaticamente os arquivos de configuração baseados no Consul. Consul-Template é um processo daemon usado para consultar informações do cluster Consul em tempo real, atualizar qualquer número de modelos especificados no sistema de arquivos e gerar arquivos de configuração. Após a conclusão da atualização, você pode optar por executar o comando shell para realizar a operação de atualização e recarregar o Nginx.

Consul-Template pode consultar o diretório de serviço, chave, valores-chave, etc. Este poderoso modelo de linguagem de abstração e consulta torna o Consul-Template particularmente adequado para a criação dinâmica de arquivos de configuração. Por exemplo: Crie balanceadores de proxy Apache/Nginx, backends Haproxy, etc.

1. Prepare o arquivo de modelo nginx

//在consul服务器上操作
vim /opt/consul/nginx.ctmpl
#定义nginx upstream一个简单模板
upstream http_backend {
  {
   
   {range service "nginx"}}
   server {
   
   {.Address}}:{
   
   {.Port}};
   {
   
   {end}}
}

#定义一个server,监听8000端口,反向代理到upstream
server {
    listen 8000;
    server_name www.my.com;
    access_log /var/log/nginx/my.com-access.log;					#修改日志路径
 
    location / {
        proxy_set_header HOST $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Client-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://http_backend;
    }
}

2.yum instalar nginx

vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

yum -y install nginx

systemctl start nginx

3. Configure e inicie o modelo

unzip consul-template_0.19.3_linux_amd64.zip -d /opt/
cd /opt/
mv consul-template /usr/local/bin/

//在前台启动 template 服务,启动后不要按 ctrl+c 中止 consul-template 进程。
consul-template --consul-addr 192.168.88.10:8500 \
--template "/opt/consul/nginx.ctmpl:/etc/nginx/conf.d/my.conf:/usr/sbin/nginx -s reload" \
--log-level=info

//另外打开一个终端查看生成配置文件
vim /etc/nginx/conf.d/my.conf
upstream http_backend {
  
   server 192.168.80.10:83;
   
   server 192.168.80.10:84;
   
}

server {
  listen 8000;
  server_name localhost 192.168.80.15;
  access_log /var/log/nginx/kgc.cn-access.log;
  index index.html index.php;
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
  }
}

4.Acesse o modelo-nginx

docker ps -a

docker exec -it test-01 bash
echo "this is test1 web" > /usr/share/nginx/html/index.html

docker exec -it test-02 bash
echo "this is test2 web" > /usr/share/nginx/html/index.html

浏览器访问:http://192.168.88.70:8000/ ,并不断刷新。

5. Adicione um nó de contêiner nginx

5.1 Adicione um nó de contêiner nginx para testar funções de descoberta de serviço e atualização de configuração.

docker run -itd -p:85:80 --name test-05  nginx:centos

//观察 template 服务,会从模板更新/usr/local/nginx/conf/vhost/kgc.conf 文件内容,并且重载 nginx 服务。

5.2 Visualize o conteúdo do arquivo /usr/local/nginx/conf/vhost/kgc.conf

cat /usr/local/nginx/conf/mycom.conf

5.3 Visualize os logs dos três contêineres nginx e solicite a pesquisa de cada nó do contêiner normalmente

docker logs -f test-01
docker logs -f test-02
docker logs -f test-05

5. cônsul multinó

//添加一台已有docker环境的服务器192.168.88.20/24加入已有的群集中
consul agent \
-server \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.88.20 \
-client=0.0.0.0 \
-node=consul-server02 \
-enable-script-checks=true  \
-datacenter=dc1  \
-join 192.168.88.10 &> /var/log/consul.log &

-enable-script-checks=true :设置检查服务为可用
-datacenter : 数据中心名称
-join :加入到已有的集群中

Acho que você gosta

Origin blog.csdn.net/q1y2y3/article/details/131936547
Recomendado
Clasificación