Werfen wir zunächst einen Blick darauf, wie die Architektur des gesamten Frameworks aussieht. Hier haben wir drei Dienstanbieter und drei Dienstaufrufer, die Consul
und Nginx
übergeben > und Consul-template
, um einen Lastausgleich zu erreichen. 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
Erläuterung Dieses Beispiel gilt für den RPC-Lastausgleich. RPC ist ein TCP-Protokoll, daher muss Nginx das TCP-Modul konfigurieren, um den TCP-Lastausgleich zu unterstützen. 🎜
Consul
-Cluster wird für die Dienstregistrierung, die Registrierung mehrerer Dienstinstanzen und die Bereitstellung von RPC
verwendet > Dienstleistungen. 🎜Consul-template
wird verwendet, um den Status von Diensten in Consul
in Echtzeit zu überwachen, und generiert Nginx
mit eine eigene Vorlagendatei > Konfigurationsdatei. 🎜Nginx
verwendet seine eigene Konfigurationsdatei und die im zweiten Schritt generierte Konfigurationsdatei für den Lastausgleich. 🎜Nginx
, um sicherzustellen, dass Nginx code> Nur Version 1.9.0 oder höher 🎜
TCP
-Weiterleitung. Es wird gesagt, dass dieses Modul nicht standardmäßig installiert ist Nach Abschluss der Installation gibt der Parameter --with-stream
an, dass TCP
bereits unterstützt wird. Wenn nicht, kompilieren Sie es neu und fügen Sie Parameter für die Installation hinzu. 🎜🎜/etc/nginx
installiert🎜🎜Dieser Artikel zielt auf den Lastausgleich ab und stellt nicht den Aufbau des Consul-Clusters vor. 🎜🎜1. Laden Sie die entsprechende Systemversionsdatei herunter 🎜🎜2. Entpacken Sie sie und kopieren Sie sie in den
PATH
-Pfad 🎜rrreee🎜3 Dateien 🎜🎜4.config.hcl
wird hauptsächlich zum Konfigurieren der Startparameter von consul-template
verwendet, einschließlich der Adresse des consul
-Servers und der Speicherort der Vorlagendatei, der Speicherort der generierten Konfigurationsdatei usw. Mit Ausnahme der Blöcke consul
und template
sind andere Parameter optional. 🎜🎜5.Consul
-Block konfiguriert die Consul
-Serveradresse und den Port. 🎜rrreee🎜6.template
blockiert den Pfad zum Konfigurieren der Vorlage und des Speicherorts der generierten Datei und die Befehle, die nach dem Generieren der Datei ausgeführt werden müssen. Hier benötigen wir nginx
, um die Konfigurationsdatei neu zu laden, daher wird der Set-Befehl als nginx -s reload
🎜rrreee🎜7.template.ctmpl
geschrieben , da hier nur die Serveradresse und die Portnummer benötigt werden, lautet die Vorlagendatei wie folgt: 🎜rrreee🎜8. Starten Sie consul-template
consul-template -config=./config.hcl code>🎜<blockquote>🎜Die Verwendung der Konfigurationsdatei config.hcl dient der Vereinfachung des Befehls consul-template -consul-addr=172.20.132.196:8500 -template=./template.ctmpl:./nginx.conf🎜🎜 9. Die anfängliche <code>nignx.conf
-Datei ist leer. Nach dem Start ist der Inhalt 🎜rrreee🎜 Stellen Sie sicher, dass der Dienst erfolgreich in Consul registriert wurde. Sie können sehen, dass Serveradresse und Port wurden konfiguriert. 🎜🎜10. Fügen Sie die von
consul-template
generierte Konfigurationsdatei in <code>nginx.conf
im Installationsverzeichnis von nginx
ein > include /etc/nginx/consul-template/nginx.conf;🎜🎜Beachten Sie, dass die generierte Konfigurationsdatei den Inhalt in der Konfigurationsdatei von nginx selbst nicht duplizieren kann! ! ! 🎜🎜11. Starten Sie eine Dienstinstanz und überprüfen Sie die generierte Datei
nginx.conf
. Sie werden feststellen, dass die Dienstliste dynamisch in upstream cloudsocket{}
hinzugefügt wird > und werden entsprechend dynamische Änderungen hinzugefügt, wenn Dienste hinzugefügt und verlassen werden. 🎜rrreee🎜Starten Sie einen weiteren, und die Dienstliste wird zu zwei🎜rrreee🎜12.thrift
Der Client muss beim Aufrufen nur die Adresse und den Port von Nginx
konfigurieren Es ist nicht erforderlich, die Dienstadresse und den Port zu konfigurieren. Nginx
leitet ihn automatisch weiter. 🎜Das obige ist der detaillierte Inhalt vonSo verwenden Sie Consul-template + Nginx, um den Lastausgleich von Thrift Consul zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!