上一篇文章 <C# HttpClient 使用 Consul 发现服务> 解决了内部服务之间的调用问题, 对外提供网关服务还没有解决, 最后我选择了 nginx-upsync-module 作为服务发现和转发的工具,

  现在 .net core 已经有很多包含权鉴、熔断的网关工具了, nginx-upsync-module 只提供了服务发现(支持Consul, 不需要重启nginx)与转发的功能, 功能少性能强, 如果不满意 ocelot 的性能, 可以试一试.

  一个WebApi最好只提供一个服务, 所以在这个示例中, 我准备了两个项目 SayHelloService 和 WeatherForecastService, 这两个服务均会注册到consul;

  nginx 通过 nginx-upsync-module 发现提供 WeatherForecastService 的实例

  WeatherForecastService 通过 ConsulDiscovery 发现提供 SayHelloService 的实例

  所以 nginx  收到请求后转发到 WeatherForecastService, WeatherForecastService 再调用 SayHelloService

  0. 环境

  CentOS Linux release 7.7.1908 (Core)   IP地址: 192.168.0.51 , 测试阶段建议关闭防火墙和SELinux

  consul_1.7.2_linux_amd64.zip(自行下载)

  nginx-1.17.10.tar.gz(自行下载)

  nginx-upsync-module-master.zip (示例代码中 或 https://github.com/weibocom/nginx-upsync-module )

  示例代码 (链接)

  开发机: .net core 3.1,  IP地址192.168.0.3

  推荐使用 MobaXterm 作为 Linux 的SSH工具, 可以很方便的上传文件

  1. 编译nginx

  为简单起见, 可以直接 进入su模式

  将nginx-1.17.10.tar.gz 和 nginx-upsync-module-master.zip 上传到 /usr/local/src   (哈哈, 这里多半会遇到权限问题), 然后解压

tar -zxvf nginx-1.17..tar.gz
unzip nginx-upsync-module-master.zip

  编译

yum -y install gcc gcc-c++ automake zlib zlib-devel openssl openssl--devel pcre pcre-devel
cd nginx-1.17./
./configure --add-module=../nginx-upsync-module-master
make && make install

  nginx 就编译到 /usr/local/nginx 了

  3. 运行consul

mkdir /usr/local/consul

  将 consul 执行程序上传到 /usr/local/consul

chmod +x consul
./consul agent -server -data-dir=data -bind=192.168.0.51 -client=0.0.0.0 -bootstrap-expect -ui

  4. 配置nginx.conf

  vi /usr/local/nginx/conf/nginx.conf

#user  nobody;
worker_processes ; events {
worker_connections ;
} http {
include mime.types;
default_type application/octet-stream; keepalive_timeout ; upstream weatherforecast{
server 127.0.0.1:; ## nginx 要求必须有这一行
## 连接consul server 获取动态 upstream 配置负载均很信息 间隔0.5秒获取consul配置信息
upsync 127.0.0.1:/v1/catalog/service/WeatherForecastService upsync_timeout=6m upsync_interval=500ms upsync_type=consul_services strong_dependency=off;
## 拉取的服务列表保存起来, 这样的话, 即使consul失效了, 也可暂用这些信息
upsync_dump_path /tmp/weatherforecast_consul.conf;
} server {
listen ;
server_name localhost; location / {
proxy_pass http://weatherforecast;
index index.html index.htm;
}
}
}

  启动nginx

cd /usr/local/nginx/sbin
./nginx

  5. 准备 SayHelloService 和 WeatherForecastService

  代码就不在这里展示了, 直接到 github 下载, 然后使用 "发布" 生成程序, 然后上传呢到 Linux

  需要注意的是

  A. 因为是nginx作为网关对外提供服务, SayHelloService 和 WeatherForecastService 只需要绑定 127.0.0.1 即可

  B. 默认SayHelloService 的 appsettings.json 指明了 ServiceIP=127.0.0.1, ServicePort=5000

  WeatherForecastService的 appsettings.json 指明了 ServiceIP=127.0.0.1, ServicePort=5002

  启动的时候绑定的urls 要与其一致

cd /home/zhouke/SayHelloService
dotnet SayHelloService.dll --urls="http://localhost:5000"
cd /home/zhouke/WeatherForecastService
dotnet WeatherForecastService.dll --urls="http://localhost:5002"

End

Consul+upsync+Nginx实现动态负载均衡的更多相关文章

  1. 基于Consul+Upsync+Nginx实现动态负载均衡

    基于Consul+Upsync+Nginx实现动态负载均衡 1.Consul环境搭建 下载consul_0.7.5_linux_amd64.zip到/usr/local/src目录 cd /usr/l ...

  2. Consul+upsync+Nginx实现动态负载均衡 摘自https://blog.csdn.net/qq_29247945/article/details/80787014

    传统感念:每次修改完nginx配置文件,要重启nginx 动态感念:每次修改完nginx配置信息,不需要重启,nginx实时读取配置信息. Nginx: 反向代理和负载均衡 Consul:是用go编写 ...

  3. 【Nginx】基于Consul+Upsync+Nginx实现动态负载均衡

    一.Http动态负载均衡 什么是动态负载均衡 动态负载均衡实现方案 常用服务器注册与发现框架 二.Consul快速入门 Consul环境搭建 三.nginx-upsync-module nginx-u ...

  4. Nginx 实现动态负载均衡(Nginx-1.10.1 + Consul v0.6.4)

    一直也没有找到合适的类似Socat + Haproxy 的组合能用在Nginx,后来发现了Nginx的几个模块,但是也存在各种不足. 而且Nginx 在大流量的情况下nginx -s reload 是 ...

  5. 《nginx 三》实现nginx的动态负载均衡——实战

    Http动态负载均衡 什么是动态负载均衡 传统的负载均衡,如果Upstream参数发生变化,每次都需要重新加载nginx.conf文件, 因此扩展性不是很高,所以我们可以采用动态负载均衡,实现Upst ...

  6. 动态负载均衡(Nginx+Consul+UpSync)环境搭建

    首先 安装好 Consul upsync 然后: 1.配置安装Nginx 需要做配置,包括分组之类的,创建目录,有些插件是需要存放在这些目录的 groupadd nginx useradd -g ng ...

  7. 动态负载均衡(Nginx+Consul+UpSync)

    Http动态负载均衡 什么是动态负载均衡 传统的负载均衡,如果Upstream参数发生变化,每次都需要重新加载nginx.conf文件, 因此扩展性不是很高,所以我们可以采用动态负载均衡,实现Upst ...

  8. Consul+upsync+Nginx 动态负载均衡

    1,动态负载均衡 传统的负载均衡,如果修改了nginx.conf 的配置,必须需要重启nginx 服务,效率不高.动态负载均衡,就是可配置化,动态化的去配置负载均衡. 2,实现方案 1. Consul ...

  9. 通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布

    前提 前段时间顺利地把整个服务集群和中间件全部从UCloud迁移到阿里云,笔者担任了架构和半个运维的角色.这里详细记录一下通过Nginx.Consul.Upsync实现动态负载均衡和服务平滑发布的核心 ...

随机推荐

  1. 手把手教你用Node.js爬虫爬取网站数据

    个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! 开始之前请先确保自己安装了Node.js环境,还没有安装的的童鞋请自行百度 ...

  2. 【20180129】java进程经常OOM,扩容swap。

    导读:线上一台服务器专门做为公司内部apk打包服务,由于app的业务和功能与时俱增,apk打包需要依赖的资源越来越多,最近这几天每次apk打包的时候都会由于OOM导致打包失败.由于apk打包业务并不是 ...

  3. 通用权限管理系统组件 (GPM - General Permissions Manager)

    有的公司开发人员只那么几个,一个人支撑整个公司所有的IT系统实在有点累,不想自己写权限系统了,自己琢磨不也是要花时间和精力,要为此付出多少时间和汗水阿,细细的皱纹不知要多多少呢,重复建设不是白白浪费生 ...

  4. 图论--2-SAT--POJ 3905 Perfect Election

    Perfect Election Time Limit: 5000MS         Memory Limit: 65536K Total Submissions: 964         Acce ...

  5. 图论--网络流--最大流 HDU 3572 Task Schedule(限流建图,超级源汇)

    Problem Description Our geometry princess XMM has stoped her study in computational geometry to conc ...

  6. XCTF练习题-WEB-webshell

    XCTF练习题-WEB-webshell 解题步骤: 1.观察题目,打开场景 2.根据题目提示,这道题很有可能是获取webshell,再看描述,一句话,基本确认了,观察一下页面,一句话内容,密码为sh ...

  7. Java——Java泛型

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 一.泛型概述 1.定 ...

  8. [hdu5448 Marisa’s Cake]多边形面积,公式化简

    题意:给一个凸多边形,求任选若干点形成的多边形的面积和. 思路: 按一定方向(顺时针或逆时针)对多边形的顶点进行编号,则多边形的面积计算公式为:f1 x f2 + f2 x f3 + ... fn-1 ...

  9. codingame

    无聊登了一下condingame,通知说有本周谜题,正好刚撸完bfs,想尝试下. 题目链接:https://www.codingame.com/ide/17558874463b39b9ce6d4207 ...

  10. printf小结

    下午健身前和lxt兄弟讨论了一个关于 printf 输出的问题,恰巧以前见过类似的,回来写一个收获总结. 首先看一个这样一个例子 #include<cstdio> int i; int m ...