>  기사  >  운영 및 유지보수  >  Consul-template+Nginx를 사용하여 Thrift Consul 로드 밸런싱을 구현하는 방법

Consul-template+Nginx를 사용하여 Thrift Consul 로드 밸런싱을 구현하는 방법

王林
王林앞으로
2023-05-15 08:19:10796검색

전체 아키텍처

먼저 전체 프레임워크의 아키텍처가 어떤 모습인지 살펴보겠습니다. 여기에는 ConsulNginx를 전달하는 3개의 서비스 공급자와 3개의 서비스 호출자가 있습니다. > 및 Consul-template을 사용하여 로드 밸런싱을 수행합니다. 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

설명 이 예는 RPC 로드 밸런싱을 위한 것입니다. RPC는 tcp 프로토콜이므로 Nginx는 tcp 로드 밸런싱을 지원하도록 tcp 모듈을 구성해야 합니다. 🎜
  1. 🎜Consul 클러스터는 서비스 등록, 여러 서비스 인스턴스 등록 및 RPC제공에 사용됩니다. > 서비스. 🎜
  2. 🎜Consul-templateConsul에서 서비스 상태를 실시간으로 모니터링하는 데 사용되며 다음을 사용하여 Nginx를 생성합니다. 자체 템플릿 파일 > 구성 파일. 🎜
  3. 🎜Nginx는 로드 밸런싱을 위해 자체 구성 파일과 두 번째 단계에서 생성된 구성 파일을 사용합니다. 🎜
🎜Nginx 설치🎜
  1. 🎜 Nginx를 보장하려면 최신 버전의 Nginx를 설치하세요. code> 1.9.0 이상 버전에서만 TCP 포워딩을 지원한다고 합니다. 설치가 완료된 후 --with-stream 매개변수가 있으면 TCP가 이미 지원됨을 나타냅니다. 그렇지 않은 경우 설치를 위한 매개변수를 다시 컴파일하고 추가하십시오. 🎜🎜
    🎜
  2. 🎜My Nginx는 /etc/nginx 디렉터리에 설치됩니다🎜
  3. 🎜설치가 완료된 후 nginx - t성공 여부를 모니터링합니다. 🎜
🎜Consul-template🎜
🎜이 문서는 로드 밸런싱을 목표로 하며 Consul 클러스터 구성을 소개하지 않습니다. 🎜
🎜1. 해당 시스템 버전 파일을 다운로드합니다🎜🎜2. 압축을 풀고 PATH 경로에 복사합니다. 🎜rrreee🎜3. 파일 🎜🎜4.config.hcl은 주로 consul 서버의 주소를 포함하여 consul-template의 시작 매개변수를 구성하는 데 사용됩니다. 템플릿 파일의 위치, 생성된 구성 파일의 위치 등 consultemplate 블록을 제외한 다른 매개변수는 선택사항입니다. 🎜🎜5.Consul 블록 구성 Consul 서버 주소 및 포트 🎜rrreee🎜6.template 블록은 템플릿의 경로와 위치를 구성합니다. 생성된 파일, 그리고 파일을 생성한 후 실행해야 하는 명령입니다. 여기서 구성 파일을 다시 로드하려면 nginx가 필요하므로 set 명령은 nginx -s reload🎜rrreee🎜7.template.ctmpl로 작성됩니다. , 여기에는 서버 주소와 포트 번호만 필요하므로 템플릿 파일은 다음과 같습니다. 🎜rrreee🎜8. consul-template consul-template -config=./config.hcl을 시작합니다. code>🎜<blockquote>🎜config.hcl 구성 파일을 사용하면 consul-template -consul-addr=172.20.132.196:8500 -template=./template.ctmpl:./nginx.conf🎜🎜 9. 초기 <code>nignx.conf 파일은 비어 있습니다. 시작 후 내용은 🎜rrreee
🎜 서비스가 Consul에 성공적으로 등록되었는지 확인하세요. 서버 주소와 포트가 구성되었습니다. 🎜
🎜10 nginx설치 디렉터리의 nginx.confconsul-template에서 생성된 구성 파일 를 추가합니다. > include /etc/nginx/consul-template/nginx.conf;🎜
🎜생성된 구성 파일은 nginx 자체 구성 파일의 콘텐츠를 복제할 수 없다는 점에 유의하세요! ! ! 🎜
🎜11. 서비스 인스턴스를 시작하고 생성된 nginx.conf 파일을 확인하면 서비스 목록이 upstream cloudsocket{}에 동적으로 추가되는 것을 확인할 수 있습니다. > 서비스가 들어오고 나갈 때 그에 따라 동적 변경 사항이 추가됩니다. 🎜rrreee🎜하나 더 시작하면 서비스 목록이 2개가 됩니다🎜rrreee🎜12.thrift클라이언트는 호출할 때 Nginx의 주소와 포트만 구성하면 됩니다. 서비스 주소와 포트를 구성할 필요가 없습니다. Nginx가 자동으로 이를 전달합니다. 🎜

위 내용은 Consul-template+Nginx를 사용하여 Thrift Consul 로드 밸런싱을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제