基于Docker + Consul + Nginx + Consul-Template的服务负载均衡实现

本文介绍了如何利用Docker部署Consul集群,使用Nginx作为反向代理,并借助Consul-Template动态生成Nginx配置,实现实时的服务负载均衡和反向代理。详细步骤包括Consul在Docker上的部署,Nginx的配置和启动,以及Consul-Template的安装和使用。通过这个方案,当服务上下线时,Nginx配置能自动更新,确保流量正确路由。
摘要由CSDN通过智能技术生成

1.consul在docker上的部署可以看这篇文章consul 服务发现 集群 docker 版_小卒曹阿瞒的博客-CSDN博客

2. 本机安装nginx做反向代理,并启动nginx,监听80端口

sudo apt-get install nginx

Nginx如果指定默认加载/etc/nginx/nginx.conf的配置文件。如果要查看加载的是哪个配置文件,可以用这个命令sudo nginx -t或者ps -ef | grep nginx

然后通过这种方式安装的,会自动创建服务,会自动在/etc/init.d/nginx新建服务脚本,然后就可以使用sudo service nginx {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}的命令启动。

3.本机安装consul-template

用于自动生成nginx配置文件。下载地址:Consul-Template Versions | HashiCorp Releases 

然后启动

sudo consul-template -template="/home/wer/nginx.conf.ctmpl:/etc/nginx/sites-enabled/consul.conf:nginx -s reload" -consul-retry -vault-retry &

nginx.conf.ctmpl是模板文件用来生成nginx的 consul.conf的,需要手动创建,以下是里面的内容

{{range services}} {{$name := .Name}} {{$service := service .Name}}
upstream {{$name}} {
least_conn;
zone upstream-{{$name}} 256k;
{{range $service}}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=60;
{{else}}server 127.0.0.1:65535; # force a 502{{end}}
} {{end}}

server {
listen 80 default_server;

{{range services}} {{$name := .Name}}
location /{{$name}} {
proxy_pass http://{{$name}}/;
}
{{end}}
}

1./home/wer/nginx.conf.ctmpl是模板文件路径

2./etc/nginx/sites-enabled/consul.conf nginx的consul.conf文件会这里生成

3.确认nginx.conf 文件中,include 了 sites-enabled目录, 即,在http {} 代码块的最后,加上 include sites-enabled/*;

4. nginx s reload 是nginx的热加载命令。如果你在使用nginx的时候,使用的root启动,那在运行 consul-template 命令时,也需要使用root运行。consul-template命令,可以保证服务上下线的过程中,nginx配置热更新,及时加入和剔除不可用的服务

4.如何使用

api网上搜一大堆不用多说

curl -X POST 127.0.0.1/testconsul2view/add  -d '{}'

去请求本地的nginx,nginx做反向代理,获取指定的名字里的ip然后转发给这个服务

testconsul2是我注册的服务名字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小卒曹阿瞒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值