먼저 전체 프레임워크의 아키텍처가 어떤 모습인지 살펴보겠습니다. 여기에는 Consul
및 Nginx
를 전달하는 3개의 서비스 공급자와 3개의 서비스 호출자가 있습니다. > 및 Consul-template
을 사용하여 로드 밸런싱을 수행합니다. 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
설명 이 예는 RPC 로드 밸런싱을 위한 것입니다. RPC는 tcp 프로토콜이므로 Nginx는 tcp 로드 밸런싱을 지원하도록 tcp 모듈을 구성해야 합니다. 🎜
Consul
클러스터는 서비스 등록, 여러 서비스 인스턴스 등록 및 RPC
제공에 사용됩니다. > 서비스. 🎜Consul-template
은 Consul
에서 서비스 상태를 실시간으로 모니터링하는 데 사용되며 다음을 사용하여 Nginx
를 생성합니다. 자체 템플릿 파일 > 구성 파일. 🎜Nginx
는 로드 밸런싱을 위해 자체 구성 파일과 두 번째 단계에서 생성된 구성 파일을 사용합니다. 🎜Nginx
를 보장하려면 최신 버전의 Nginx
를 설치하세요. code> 1.9.0 이상 버전에서만 TCP
포워딩을 지원한다고 합니다. 설치가 완료된 후 --with-stream
매개변수가 있으면 TCP
가 이미 지원됨을 나타냅니다. 그렇지 않은 경우 설치를 위한 매개변수를 다시 컴파일하고 추가하십시오. 🎜🎜/etc/nginx
디렉터리에 설치됩니다🎜🎜이 문서는 로드 밸런싱을 목표로 하며 Consul 클러스터 구성을 소개하지 않습니다. 🎜🎜1. 해당 시스템 버전 파일을 다운로드합니다🎜🎜2. 압축을 풀고
PATH
경로에 복사합니다. 🎜rrreee🎜3. 파일 🎜🎜4.config.hcl
은 주로 consul
서버의 주소를 포함하여 consul-template
의 시작 매개변수를 구성하는 데 사용됩니다. 템플릿 파일의 위치, 생성된 구성 파일의 위치 등 consul
및 template
블록을 제외한 다른 매개변수는 선택사항입니다. 🎜🎜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.conf
에 consul-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 중국어 웹사이트의 기타 관련 기사를 참조하세요!