专栏名称: 亿级流量网站架构
开涛技术点滴
目录
相关文章推荐
老刘说NLP  ·  GraphRAG是否总是有效?9大代表方案在 ... ·  昨天  
码农翻身  ·  Excel终于要完蛋了吗? ·  13 小时前  
程序猿  ·  北大“韦神”粉丝超千万,家属回应牙齿缺失 ·  23 小时前  
程序猿  ·  还有人手动画图?一键生成 Draw.io ... ·  23 小时前  
程序员的那些事  ·  程序员:在 8 ... ·  5 天前  
51好读  ›  专栏  ›  亿级流量网站架构

使用Nginx实现HTTP动态负载均衡—《亿级流量网站架构核心技术》

亿级流量网站架构  · 公众号  · 程序员  · 2017-03-27 21:07

正文

请到「今天看啥」查看全文



1.首先,upstream服务启动,我们通过管理后台向Consule注册服务。

2.我们需要在Nginx机器上部署并启动Consul-template Agent,其通过长轮询监听服务变更。

3.Consul-template监听到变更后,动态修改upstream列表。

4.Consul-template修改完upstream列表后,调用重启Nginx脚本重启Nginx。

整个实现过程还是比较简单的,不过,实际生产环境要复杂得多。我们使用了Consul0.7.0和Consul-template0.16.0来实现。


Consul-Server

首先我们要启动Consul-Server。

./consul agent -server -bootstrap-expect 1-data-dir /tmp/consul  -bind 0.0.0.0-client 0.0.0.0

此处需要使用data-dir指定Agent状态存储位置,bind指定集群通信的地址,client指定客户端通信的地址(如Consul-template与Consul通信)。在启动时还可以使用-ui-dir ./ui/指定Consul Web UI目录,实现通过Web UI管理Consul,然后访问如http://127.0.0.1:8500即可看到控制界面。


使用如下HTTP API注册服务。

curl -X PUT http://127.0.0.1:8500/v1/catalog/register -d'{"Datacenter": "dc1", "Node":"tomcat", "Address":"192.168.1.1","Service": {"Id" :"192.168.1.1:8080", "Service": "item_jd_tomcat","tags": ["dev"], "Port": 8080}}'

curl -X PUT http://127.0.0.1:8500/v1/catalog/register -d'{"Datacenter": "dc1", "Node":"tomcat", "Address":"192.168.1.2","Service": {"Id" :"192.168.1.1:8090", "Service": "item_jd_tomcat","tags": ["dev"], "Port": 8090}}'

Datacenter指定数据中心,Address指定服务IP,Service.Id指定服务唯一标识,Service.Service指定服务分组,Service.tags指定服务标签(如测试环境、预发环境等),Service.Port指定服务端口。


通过如下HTTP API摘除服务。

curl -X PUThttp://127.0.0.1:8500/v1/catalog/deregister -d '{"Datacenter":"dc1", "Node": "tomcat", "ServiceID" :"192.168.1.1:8080"}'


通过如下HTTP API发现服务。

curlhttp://127.0.0.1:8500/v1/catalog/service/item_jd_tomcat


可以看到,通过这几个HTTPAPI可以实现服务注册与发现。更多API请参考 https://www.consul.io/docs/agent/http.html


Consul-template

接下来我们需要在Consul-template机器上添加一份配置模板item.jd.tomcat.ctmpl。

upstream item_jd_tomcat {

server 127.0.0.1:1111; #占位server,必须有一个server,否则无法启动

{{range service"dev.item_jd_tomcat@dc1"}}

server {{.Address}}:{{.Port}} weight=1;

{{end}}

}

service指定格式为:标签.服务@数据中心,然后通过循环输出Address和Port,从而生成Nginx upstream配置。


启动Consul-template。







请到「今天看啥」查看全文