Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So verwenden Sie Consul-template + Nginx, um den Lastausgleich von Thrift Consul zu implementieren

So verwenden Sie Consul-template + Nginx, um den Lastausgleich von Thrift Consul zu implementieren

王林
王林nach vorne
2023-05-15 08:19:10749Durchsuche

Gesamtarchitektur

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. 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

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"
  }


}

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. 🎜
  1. 🎜Consul-Cluster wird für die Dienstregistrierung, die Registrierung mehrerer Dienstinstanzen und die Bereitstellung von RPCverwendet > Dienstleistungen. 🎜
  2. 🎜Consul-template wird verwendet, um den Status von Diensten in Consul in Echtzeit zu überwachen, und generiert Nginxmit eine eigene Vorlagendatei > Konfigurationsdatei. 🎜
  3. 🎜Nginx verwendet seine eigene Konfigurationsdatei und die im zweiten Schritt generierte Konfigurationsdatei für den Lastausgleich. 🎜
🎜Nginx-Installation🎜
  1. 🎜Installieren Sie die neueste Version von Nginx, um sicherzustellen, dass Nginx code> Nur Version 1.9.0 oder höher 🎜
  2. 🎜1.9.0 oder höher unterstützt die 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. 🎜🎜
    🎜
  3. 🎜Mein Nginx wird im Verzeichnis /etc/nginx installiert🎜
  4. 🎜Nachdem die Installation abgeschlossen ist, verwenden Sie nginx - tÜberwachen Sie, ob es erfolgreich ist. 🎜
🎜Consul-template🎜
🎜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 nginxein > 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.thriftDer 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen