点赞
评论
收藏
分享
举报
consul集群搭建,配合nginx完成服务动态发现和健康检查
发表于2020-09-03 16:54

浏览 3k

 1、概述

1.1 介绍

consul是一个服务发现和配置共享的服务软件,结合nginx的主动健康检查模块nginx_upstream_check_module和服务发现模块nginx-upsync-module,实现一套服务动态发现机制。nginx的upstream不再通过手动配置,而是定时向consul发送请求,获取consul数据中心的配置文件,动态更新upstream地址池。

1.2 术语

consul:是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件

nginx_upstream_check_module:nginx主动健康检查模块

nginx-upsync-module:nginx服务发现模块

2、安装

2.1 nginx

nginx需要编译两个模块:

nginx_upstream_check_module:nginx主动健康检查模块

https://github.com/xiaokai-wang/nginx_upstream_check_module

nginx-upsync-module:nginx服务发现模块

https://github.com/weibocom/nginx-upsync-module

2.2 consul

官网 https://www.consul.io

下载consul,linux 64位

下载解压即可,产生一个consul可执行文件。

./consul 列出一些常用指令。

2.3 consul启动

./consul agent -server –bootstrap-expect 1 –>i.  server: 以server身份启动。

ii.  bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。经测试,低于这个数量也不影响访问

iii. >iv.  node:节点id,在同一集群不能重复。

v.   bind:监听的ip地址。

vi.  client 客户端的ip地址

vii.  &  :在后台运行,此为linux脚本语法

viii. ui:启动webui,端口8500

访问ip:8500/ui,出现如下页面,则启动成功

2.4 consul其它命令

关闭

./consul leave

查看成员

./consul members

2.5 启动consul集群

以上介绍的都是以单机模式启动,实战中consul多以集群模式存在,建议server节点数为3~5个。以下以3台为例,分别为ip1、ip2、ip3:

./consul agent -server -bootstrap-expect 2 ->./consul agent -server -bootstrap-expect 2 ->./consul agent -server -bootstrap-expect 2 ->-join 加入一个集群

3、使用

3.1 nginx&upstream配置

consul是针对nginx的upstream所做的一项改善,地址池不再需要手动配置,而是从consul的数据中心抓取。新的upstream配置如下:

复制代码
1 upstream tomcat_http_server {
2         server 127.0.0.1:11111;
3         upsync 10.10.49.193:8500/v1/kv/upstreams/tomcat_http_server upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
4         upsync_dump_path /usr/local/nginx/conf/server/server_test.conf;
5  
6         check interval=1000 rise=2 fall=2 timeout=3000 type=http default_down=false;
7         check_http_send "HEAD / HTTP/1.0\r\n\r\n";
8         check_http_expect_alive http_2xx http_3xx;
9 }        
复制代码

server 127.0.0.1:11111是占位机器,这个配置必须要有不然校验配置文件不通过。

upsync配置语法:

upsync $consul/etcd.api.com:$port/v1/kv/upstreams/$upstream_name/ [upsync_type=consul/etcd] [upsync_interval=second/minutes] [upsync_timeout=second/minutes] [strong_dependency=off/on]

默认upsync_interval=5s upsync_timeout=6m strong_dependency=off

10.10.49.193:8500/v1/kv/upstreams/tomcat_http_server为同步地址;upsync_timeout同步超时时间;upsync_interval同步间隔;upsync_type同步类型,默认为consul;strong_dependency,配置为on时,每次启动或重启nginx,都会强制去consul拉一次upstream servers。

upsync_dump_path将拉取到的upstreams地址池写入一个文件;

此处想要多说两句,即使consul中途挂掉,nginx仍然可以从upsync_dump_path配置的文件中取到数据,继续分发流量,只是此时upstream池变为静态了,跟之前的情形一样,启停重启nginx等操作并没有问题。所以consul单节点配置中心的可用性也是很高的。

upsync更多指令请阅读

https://github.com/weibocom/nginx-upsync-module#upsync

check代表健康检查;interval检查间隔,单位为毫秒;rise成功该次数后,标记为up;fall失败该次数后,标记为down;timeout;type包括tcp、ssl_hello、http、mysql、ajp、fastcgi;default_down设置后端server的初始状态;

默认配置interval=30000 fall=5 rise=2 timeout=1000 default_down=true type=tcp

check_http_send 健康检查发送的请求包;

check_http_expect_alive 这些状态代表后端server是活着的;

check更多指令请阅读

https://github.com/xiaokai-wang/nginx_upstream_check_module

3.2 查询健康检查状态

健康检查模块提供了一个接口check_status,用于检查consul数据中心配置的所有server的健康检查状态。需要在nginx稍作配置:

在80端口下,配置nstatus的接口:

location /nstatus {
        check_status;
        access_log off;
}

访问consul节点的ip/nstatus

3.3 consul配置

输入【http://ip:8500/ui】进入consulweb控制台

进入consu首页,点击进入【KEY/VALUE】,此处即为配置upstream的位置。

Key以“/”结尾,则创建了一个文件夹,否则创建了一个key。

 

此处的文件夹路径即为upsync指令请求的路径。

 

value默认值为{"weight":1, "max_fails":2, "fail_timeout":10},所以不配置value也是可以的

写入本地文件是这样的:


已修改于2023-03-01 15:57
创作不易,留下一份鼓励
守望

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(1)

按点赞数排序

按时间排序

图片有点模糊,可以更新清晰的吗?

想本地构建下这个环境,请问涉及的资源是?

赞同

1

回复举报

发表于2020-09-27 10:35



回复Nginspher
回复
关于作者
守望
这家伙很懒还未留下介绍~
89
文章
0
问答
17
粉丝
相关文章
感谢您参加NGINX开源社区基础培训系列课程(第二季),以下为本系列培训的课件和录像,希望您能通过此培训学有所得,祝学习进步!>课程演讲稿下载:-7月09日:NGINX对哪些头部HTTP另眼相看-7月16日:如何高效地均衡应用层负载-7月23日:怎样向客户端隐藏应用层错误-7月30日:应用端如何实时控制NGINX>视频回顾:-7月09日:NGINX对哪些头部HTTP另眼相看-7月16日:如何高效地均衡应用层负载-7月23日:怎样向客户端隐藏应用层错误-7月30日:应用端如何实时控制NGINX>访问NGINX开源社区:nginx-cn.net>NGINX官方微信群(扫码入群)>后续活动概览NGINX开源社区基础培训系列课程(第三季)主讲人:NGINX顶级技术专家陶辉老师主题:深入剖析NGINXHTTP缓存课程安排:8月每周四晚8:00-9:00-8月06日:NGINX如何控制客户端缓存?-8月13日:NGINX缓存使用中易陷入的误区-8月20日:NGINX缓存的淘汰算法-8月27日:NGINX缓存的工作原理适合人群:NGINX用户,爱好者,开发者课程形式:线上学习,
点赞 8
浏览 3.9k
Kubernetes已成为容器化应用系统受到在其生产环境中。在本博文中,我们通过NGINXIngressControllerforKubernetes 并三个指标性能测试的结果介绍 NGINX和Kubernetes 决定应用。中wrk 40Gb到。Controller静态内容NGINXWeb服务器以下的硬件计算机网络客户端1个英特尔XL71040GbEQSFP+主要节点1个英特尔XL71040GbEQSFP+辅助节点1个英特尔10GbX540AT2所用软件用 版本4.1.0,按照相关取自 版本1.4.3(包括NGINX开源版本1.15.8 版本1.13.1全OpenSSL版本1.1.0gFlannel我们运行了测试三项性能指标: ●  每秒可处理的请求数(取固定时间段内平均值)。的Controller将请求代理到上游Pod,以获取客户端请求的静态内容。静态内容是一个。每秒SSL/TLS事务(TPS) Controller支
点赞 0
浏览 1k
原文作者:LibbyMeren原文链接:支持开源,打造更安全的世界:F5NGINX宣布赞助Let'sEncrypt和OpenSSL-NGINX转载来源:NGINX官方网站F5NGINX的目标不仅是构建赋能现代应用和平台运营实践的优秀开源软件,而且还致力于创造更加安全的技术世界。技术已经愈加成为我们日常生活中不可或缺的一部分。我们在为自己的付出感到骄傲的同时,也认识到网络安全需要大家共同守护。很荣幸向大家宣布,我们赞助了两个关系着全球技术安全的开源项目——Let'sEncrypt和OpenSSL。Let'sEncryptLet'sEncrypt让数字证书的获取和部署实现了真正意义上的免费,降低了安全防护的门槛。更具体地说,Let’sEncrypt的使命是推动HTTPS的广泛采用,构建更安全的万维网。为了实现这个目标,Let'sEncrypt运营着全球规模最大的证书颁发机构,为超过2.6亿个网站提供安全保护,并通过将原本繁琐的手动步骤(例如支付、Web服务器配置、电子邮件验证和证书更新)自动化来简化证书管理。毫不夸张地说,Let
点赞 0
浏览 1.1k