Maison > Article > Opération et maintenance > Comment utiliser Consul-template+Nginx pour implémenter l'équilibrage de charge Thrift Consul
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. Consul
和 Nginx
,以及 Consul-template
来实现负载均衡。
说明 本例子是进行 RPC 的负载均衡,RPC 是 tcp协议,所以 Nginx 要配置 tcp 模块,支持 tcp 负载均衡。
Consul
集群 用于服务注册,注册多个服务实例,对外提供 RPC
服务。
Consul-template
用于实时监测 Consul
中服务的状态,配合自身一个模板文件,生成 Nginx
的配置文件。
Nginx
使用自身的配置文件和第二步生成的配置文件,进行负载均衡。
安装最新版 Nginx
,保证 Nginx
版本在 1.9.0 以上
1.9.0 版本以上才支持 TCP
转发,据说不是默认安装了该模块,安装完成可以查询一下,如果有--with-stream
参数,表示已经支持TCP
。如果没有就重新编译增加参数安装。
我的 Nginx 安装在/etc/nginx
目录下
安装完成使用nginx -t
监测一下是否成功。
本文旨在负载均衡,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
3.找个地方新建个文件夹,并创建三个文件
4.config.hcl
主要用来配置consul-template
的启动参数项,包括consul
服务器的地址,模板文件的位置,生成的配置文件的位置等等。除了consul
和template
块,其他参数可选。
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" } }
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" } }
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; } }
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; } }
确保服务已经成功注册到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; } }
再启动一个,服务列表变成两个了
[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; } }
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. #🎜🎜#
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. #🎜🎜#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. #🎜🎜#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. #🎜🎜#Nginx code>, assurez-vous que la version <code>Nginx
est supérieure à 1.9.0 #🎜🎜#
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. #🎜🎜##🎜🎜#/etc/nginx
#🎜🎜#nginx -t
pour vérifier si elle réussit. #🎜🎜##🎜🎜#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 blocConsul
adresse et port du serveur #🎜🎜#rrreee#🎜🎜#6.modèle
Le 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.thrift
Le 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!