Índice
1.O que é registro e descoberta de serviço?
2. Implantar servidor cônsul (192.168.88.10)
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
1. Prepare o arquivo de modelo nginx
3. Configure e inicie o modelo
5. Adicione um nó de contêiner nginx
5.2 Visualize o conteúdo do arquivo /usr/local/nginx/conf/vhost/kgc.conf
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 :加入到已有的集群中