Maison > Opération et maintenance > Nginx > Comment utiliser Consul-template+Nginx pour implémenter l'équilibrage de charge Thrift Consul

Comment utiliser Consul-template+Nginx pour implémenter l'équilibrage de charge Thrift Consul

王林
Libérer: 2023-05-15 08:19:10
avant
830 Les gens l'ont consulté

Architecture globale

Voyons d'abord à quoi ressemble l'architecture de l'ensemble du framework. Ici, nous avons trois fournisseurs de services et trois appelants de service, qui passent par Consul et <code>Nginx, et Consul-template pour réaliser l'équilibrage de charge. ConsulNginx,以及 Consul-template 来实现负载均衡。

说明 本例子是进行 RPC 的负载均衡,RPC 是 tcp协议,所以 Nginx 要配置 tcp 模块,支持 tcp 负载均衡。

  1. Consul 集群 用于服务注册,注册多个服务实例,对外提供 RPC 服务。

  2. Consul-template 用于实时监测 Consul 中服务的状态,配合自身一个模板文件,生成 Nginx 的配置文件。

  3. Nginx 使用自身的配置文件和第二步生成的配置文件,进行负载均衡。

Nginx安装

  1. 安装最新版 Nginx,保证 Nginx 版本在 1.9.0 以上

  2. 1.9.0  版本以上才支持 TCP 转发,据说不是默认安装了该模块,安装完成可以查询一下,如果有--with-stream参数,表示已经支持TCP。如果没有就重新编译增加参数安装。


  3. 我的 Nginx 安装在/etc/nginx目录下

  4. 安装完成使用nginx -t监测一下是否成功。

Consul-template

本文旨在负载均衡,Consul 集群搭建不作介绍。

1.下载对应系统版本文件 

2.解压,并复制到PATH路径下

[silence@centos145 ~]$ tar xzvf consul-template_0.19.4_linux_amd64.tgz
[silence@centos145 ~]$ mv ./consul-template /usr/sbin/consul-template
Copier après la connexion

3.找个地方新建个文件夹,并创建三个文件

4.config.hcl主要用来配置consul-template的启动参数项,包括consul服务器的地址,模板文件的位置,生成的配置文件的位置等等。除了consultemplate块,其他参数可选。

5.Consul块配置Consul服务器地址和端口

consul {
  auth {
    enabled  = false
    username = "test"
    password = "test"
  }


  address = "172.20.132.196:8500"
  retry {
    enabled = true
    attempts = 12
    backoff = "250ms"
    max_backoff = "1m"
  }


}
Copier après la connexion

6.template块配置模板的路径和生成文件的位置,以及生成文件后需要执行的命令。在我们这里我们需要nginx重新加载配置文件,所以设置的命令为nginx -s reload

template {
  source = "/etc/nginx/consul-template/template.ctmpl"
  destination = "/etc/nginx/consul-template/nginx.conf"
  create_dest_dirs = true
  command = "/usr/sbin/nginx -s reload"
  command_timeout = "30s"
  error_on_missing_key = false
  perms = 0600
  backup = true
  left_delimiter  = "{{"
  right_delimiter = "}}"
  wait {
    min = "2s"
    max = "10s"
  }
}
Copier après la connexion

7.template.ctmpl编写,因为这里只需要服务器地址和端口号就可以,所以模板文件如下:

[root@centos145 consul-template]# cat template.ctmpl
stream {


    log_format main '$remote_addr - [$time_local] '
      '$status';


    access_log /var/log/nginx/tcp_access.log main;


    upstream cloudsocket {
 \{\{range service "ad-rpc-device-server"}}server \{\{.Address}}:\{\{.Port}};{{end}}
    }


    server {
 listen 8888;
 proxy_pass cloudsocket;
    }
}
Copier après la connexion

8.启动consul-template  consul-template -config=./config.hcl

使用config.hcl配置文件是为了简化命令 consul-template -consul-addr=172.20.132.196:8500 -template=./template.ctmpl:./nginx.conf

9.初始的nignx.conf文件为空的,在启动后内容为

[root@centos145 consul-template]# cat nginx.conf
stream {


    log_format main '$remote_addr - [$time_local] '
      '$status';


    access_log /var/log/nginx/tcp_access.log main;


    upstream cloudsocket {
 server 172.20.139.77:8183;
    }


    server {
 listen 8888;
 proxy_pass cloudsocket;
    }
}
Copier après la connexion
Copier après la connexion

确保服务已经成功注册到Consul中,即可以看到服务器地址和端口已经配置进去了。

10.在nginx的安装目录的nginx.conf中引入consul-template生成的配置文件 include /etc/nginx/consul-template/nginx.conf;

注意生成的配置文件不能喝nginx本身的配置文件中内容重复!!!

11.启动一个服务实例,查看生成的nginx.conf文件会发现在upstream cloudsocket{}中会动态增加服务列表,并且随着服务的加入和离开,动态变化。

[root@centos145 consul-template]# cat nginx.conf
stream {


    log_format main '$remote_addr - [$time_local] '
      '$status';


    access_log /var/log/nginx/tcp_access.log main;


    upstream cloudsocket {
 server 172.20.139.77:8183;
    }


    server {
 listen 8888;
 proxy_pass cloudsocket;
    }
}
Copier après la connexion
Copier après la connexion

再启动一个,服务列表变成两个了

[root@centos145 consul-template]# cat nginx.conf
stream {


    log_format main '$remote_addr - [$time_local] '
      '$status';


    access_log /var/log/nginx/tcp_access.log main;


    upstream cloudsocket {
 server 172.20.139.77:8183;server 172.20.139.77:8184;
    }


    server {
 listen 8888;
 proxy_pass cloudsocket;
    }
}
Copier après la connexion

12.thrift客户端在调用的时候只需要配置Nginx的地址和端口就可以了,不需要配置服务的地址和端口了,Nginx

Explication Cet exemple concerne l'équilibrage de charge RPC. RPC est un protocole TCP, donc Nginx doit configurer le module TCP pour prendre en charge l'équilibrage de charge TCP. #🎜🎜#
  1. #🎜🎜#Consul Le cluster est utilisé pour l'enregistrement du service, l'enregistrement de plusieurs instances de service et la fourniture vers le service RPC du monde extérieur. #🎜🎜#
  2. #🎜🎜#Consul-template est utilisé pour surveiller l'état des services dans Consul en temps réel et coopère avec son propre fichier modèle pour générer le fichier de configuration de Nginx. #🎜🎜#
  3. #🎜🎜#Nginx utilise son propre fichier de configuration et le fichier de configuration généré lors de la deuxième étape pour effectuer l'équilibrage de charge. #🎜🎜#
#🎜🎜#Installation de Nginx#🎜🎜#
  1. #🎜🎜#Installer la dernière version de Nginx code>, assurez-vous que la version <code>Nginx est supérieure à 1.9.0 #🎜🎜#
  2. #🎜🎜#La version 1.9.0 ou supérieure ne prend en charge que TCP code> forwarding, On dit que ce module n'est pas installé par défaut. Vous pouvez le vérifier une fois l'installation terminée. S'il y a un paramètre <code>--with-stream, cela signifie que . TCP est déjà pris en charge. Sinon, recompilez et ajoutez des paramètres pour l'installation. #🎜🎜##🎜🎜#
    #🎜🎜#
  3. #🎜🎜#Mon Nginx est installé dans le répertoire /etc/nginx #🎜🎜#
  4. #🎜🎜#Une fois l'installation terminée, utilisez nginx -t pour vérifier si elle réussit. #🎜🎜#
#🎜🎜#Consul-template#🎜🎜#
#🎜🎜#Cet article est destiné à l'équilibrage de charge et n'introduit pas la construction du cluster Consul. #🎜🎜#
#🎜🎜#1. Téléchargez le fichier de version du système correspondant #🎜🎜##🎜🎜#2 Décompressez-le et copiez-le dans le chemin PATH #🎜🎜#. rrreee# 🎜🎜#3. Trouvez un endroit pour créer un nouveau dossier et créez trois fichiers #🎜🎜##🎜🎜#4 config.hcl est principalement utilisé pour configurer le consul-template. Les paramètres de démarrage de code> incluent l'adresse du serveur <code>consul, l'emplacement du fichier modèle, l'emplacement du fichier de configuration généré, etc. À l'exception des blocs consul et template, les autres paramètres sont facultatifs. #🎜🎜##🎜🎜#5.Consul configuration du blocConsuladresse et port du serveur #🎜🎜#rrreee#🎜🎜#6.modèleLe chemin d'accès au modèle de configuration de bloc et l'emplacement du fichier généré, ainsi que les commandes qui doivent être exécutées après la génération du fichier. Ici, nous avons besoin de nginx pour recharger le fichier de configuration, donc la commande set est nginx -s reload#🎜🎜#rrreee#🎜🎜#7.template. est écrit, car seuls l'adresse du serveur et le numéro de port sont nécessaires ici, donc le fichier modèle est le suivant : #🎜🎜#rrreee#🎜🎜#8. Démarrez consul-template <. code>consul -template -config=./config.hcl#🎜🎜#
#🎜🎜#Le fichier de configuration config.hcl est utilisé pour simplifier la commande consul-template -consul-addr=172.20. 132.196:8500 -template =./template.ctmpl:./nginx.conf#🎜🎜#
#🎜🎜#9. Le fichier nignx.conf initial est vide et le contenu après le démarrage est #🎜 🎜#rrreee
#🎜🎜# Assurez-vous que le service a été enregistré avec succès dans Consul, vous pouvez voir que l'adresse et le port du serveur ont été configurés. #🎜🎜#
#🎜🎜#10. Introduisez consul-template dans nginx.conf dans le répertoire d'installation de nginx pour générer le fichier de configuration include /etc/nginx/consul-template/nginx.conf;#🎜🎜#
#🎜🎜#Notez que le fichier de configuration généré ne peut pas dupliquer le contenu du fichier de configuration de nginx lui-même ! ! ! #🎜🎜#
#🎜🎜#11. Démarrez une instance de service et vérifiez le fichier nginx.conf généré. Vous constaterez qu'il y aura une dynamique dans cloudsocket en amont{}. La liste des services est ajoutée et change dynamiquement à mesure que des services sont ajoutés et supprimés. #🎜🎜#rrreee#🎜🎜#Commencez-en un de plus et la liste de services devient deux #🎜🎜#rrreee#🎜🎜#12.thriftLe client n'a qu'à configurer Nginx suffisent. Il n'est pas nécessaire de configurer l'adresse et le port du service Nginx le transmettra automatiquement. #🎜🎜#

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal