怎么用Consul-template+Nginx实现Thrift Consul负载均衡
发布时间 - 2023-05-15 00:00:00 点击率:次整体架构
我们先看下整个框架的架构是什么样子的,这里我们有三个服务提供者和三个服务调用者,它们通过 consul 和 nginx,以及 consul-template 来实现负载均衡。
说明 本例子是进行 RPC 的负载均衡,RPC 是 tcp协议,所以 Nginx 要配置 tcp 模块,支持 tcp 负载均衡。
Consul集群 用于服务注册,注册多个服务实例,对外提供RPC服务。Consul-template用于实时监测Consul中服务的状态,配合自身一个模板文件,生成Nginx的配置文件。Nginx使用自身的配置文件和第二步生成的配置文件,进行负载均衡。
Nginx安装
安装最新版
Nginx,保证Nginx版本在 1.9.0 以上1.9.0 版本以上才支持
TCP转发,据说不是默认安装了该模块,安装完成可以查询一下,如果有--with-stream参数,表示已经支持TCP。如果没有就重新编译增加参数安装。我的 Nginx 安装在
/etc/nginx目录下安装完成使用
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服务器的地址,模板文件的位置,生成的配置文件的位置等等。除了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会自动做转发。
# nginx
# 架构
# include
# consul
# rpc
# 负载均衡
# 配置文件
# 只需要
# 就可以
# 多个
# 不需要
# 如果没有
# 可以看到
# 可选
# 不作
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
制作电商网页,电商供应链怎么做?
如何续费美橙建站之星域名及服务?
如何在云虚拟主机上快速搭建个人网站?
英语简历制作免费网站推荐,如何将简历翻译成英文?
JavaScript如何实现错误处理_try...catch如何捕获异常?
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
详解Oracle修改字段类型方法总结
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
Laravel如何使用withoutEvents方法临时禁用模型事件
Laravel如何升级到最新版本?(升级指南和步骤)
JS弹性运动实现方法分析
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
Laravel如何配置任务调度?(Cron Job示例)
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
如何制作一个表白网站视频,关于勇敢表白的小标题?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
高防服务器租用指南:配置选择与快速部署攻略
Laravel定时任务怎么设置_Laravel Crontab调度器配置
制作企业网站建设方案,怎样建设一个公司网站?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
网站制作价目表怎么做,珍爱网婚介费用多少?
如何实现建站之星域名转发设置?
如何用VPS主机快速搭建个人网站?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Thinkphp 中 distinct 的用法解析
Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】
动图在线制作网站有哪些,滑动动图图集怎么做?
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
Laravel怎么进行数据库事务处理_Laravel DB Facade事务操作确保数据一致性
linux写shell需要注意的问题(必看)
Laravel如何实现事件和监听器?(Event & Listener实战)
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
昵图网官网入口 昵图网素材平台官方入口
nodejs redis 发布订阅机制封装实现方法及实例代码
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
在线制作视频网站免费,都有哪些好的动漫网站?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Laravel怎么判断请求类型_Laravel Request isMethod用法
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
node.js报错:Cannot find module 'ejs'的解决办法
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
魔毅自助建站系统:模板定制与SEO优化一键生成指南
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
Laravel如何为API编写文档_Laravel API文档生成与维护方法
lovemo网页版地址 lovemo官网手机登录


ce@centos145 ~]$ mv ./consul-template /usr/sbin/consul-template