consul集群搭建,配合nginx完成服务动态发现和健康检查
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 –data-dir /tmp/consul –bind=10.10.49.193 –ui –client 0.0.0.0 &
i. server: 以server身份启动。
ii. bootstrap-expect:集群要求的最少server数量,当低于这个数量,集群即失效。经测试,低于这个数量也不影响访问
iii. data-dir:data存放的目录,更多信息请参阅consul数据同步机制
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 -data-dir /tmp/consul -node=consul1 -bind=ip1 -ui -client=0.0.0.0 &
./consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=consul2 -bind=ip2 -join=ip1 -ui -client=0.0.0.0 &
./consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=consul3 -bind=ip3 -join=ip1 -ui -client=0.0.0.0 &
-join 加入一个集群
3、使用
3.1 nginx&upstream配置
consul是针对nginx的upstream所做的一项改善,地址池不再需要手动配置,而是从consul的数据中心抓取。新的upstream配置如下:
upstream tomcat_http_server {
server 127.0.0.1:;
upsync 10.10.49.193:/v1/kv/upstreams/tomcat_http_server upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
upsync_dump_path /usr/local/nginx/conf/server/server_test.conf;
check interval= rise= fall= timeout= type=http default_down=false;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
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也是可以的

写入本地文件是这样的:

consul集群搭建,配合nginx完成服务动态发现和健康检查的更多相关文章
- Ocelot+Consul 集群搭建实践
博客园已经有很多大神写过consul集群搭建了.大家都在玩,那我也不能托后退呢 不过自己研究下还是好的.毕竟每个人遇到的问题的不同 研究过才能说自己玩过consul,文章有部分名词解释是收集网络 Co ...
- 8分钟学会Consul集群搭建及微服务概念
Consul介绍: Consul 是由 HashiCorp 公司推出的开源软件,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与 ...
- Consul集群搭建 2Server+ 3Client
环境说明: 192.168.202.177 consul-server01 192.168.202.177 consul-server02192.168.202.174 mysql server no ...
- Consul集群搭建
一.集群搭建 准备三台机器 需要开启的端口,8300, 8301, 8500, 8600 机器1: 172.16.106.201 ./consul agent -server -bootstrap-e ...
- consul集群搭建以及ACL配置
由于时间匆忙,要是有什么地方没有写对的,请大佬指正,谢谢.文章有点水,大佬勿喷这篇博客不回去深度的讲解consul中的一些知识,主要分享的我在使用的时候的一些操作和遇见的问题以及解决办法.当然有些东西 ...
- Hadoop3集群搭建之——配置ntp服务
上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 下篇: Hadoop3集群搭建之——hive安装 Hadoop3集群搭建之——hbase安装及简 ...
- Consul 集群搭建
搭建集群:.启动node1机器上的Consul (node1机器上执行) consul agent -data-dir /tmp/node1 -node=node1 -bind=192.168.0.1 ...
- windows下Nacos集群搭建与nginx集成
前言: nacos集群至少需要三个(一般为奇数个)nacos实 例,其前面顶nginx,外界入口从nginx入 一.windows下Nacos集群搭建 将Nacos的解压包复制分成3份,分别是: na ...
- hadoop集群搭建--CentOS部署Hadoop服务
在了解了Hadoop的相关知识后,接下来就是Hadoop环境的搭建,搭建Hadoop环境是正式学习大数据的开始,接下来就开始搭建环境!我们用到环境为:VMware 12+CentOS6.4 hadoo ...
随机推荐
- python与中文的那点事
目录 python与中文的那点事 1. utf-8/gbk/unicode/ASCII 2.各种编码之间的转换 3. 统计字符串中数字,字母,汉字的个数 python与中文的那点事 在学习python ...
- Oracle Index 索引无效原因
索引无效原因 最近遇到一个SQL语句的性能问题,修改功能之前的运行时间平均为0.3s,可是添加新功能后,时间达到了4~5s.虽然几张表的数据量都比较大(都在百万级以上),但是也都有正确创建索引,不知道 ...
- Linux常用基本命令( rmdir, rm, mv )
1,rmdir,一个很鸡肋的命令,只能删除空目录 ghostwu@dev:~/linux/cp$ ls .txt .txt a a2 a3 ghostwu@dev:~/linux/cp$ rmdir ...
- HDU3416(KB11-O spfa+最大流)
Marriage Match IV Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- maven插件 按配置加载不同环境配置文件进行打包(maven-war-plugin)
1.配置多种不同环境 如(本地local,开发dev,测试test 环境等) <profiles> <profile> <id>local</id> & ...
- 设计模式(15)--Interpreter(解释器模式)--行为型
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义: 解释器模式是类的行为模式.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解 ...
- js的style.display小问题
在元素添加class样式隐藏display:none; 使用console.log(xx.style.display);//空值
- ActiveReports 报表中 RDF 文件解析
AcitveReport 提供两种报表模板,XML(RPX)模板和Code-Based 模板.两者都可以用于设计报表. 但是 RDF 格式文件我们大多不是很了解.许多客户在提到 RDF 格式时显得无所 ...
- ES6 箭头函数下的this指向
在javscript中,this 是在函数运行时自动生成的一个内部指针,它指向函数的调用者. 箭头函数有些不同,它的this是继承而来, 默认指向在定义它时所处的对象(宿主对象),而不是执行时的对象. ...
- PC客户端开发细节记录:保存GUID到VARIANT
有两个 API 可以实现保存 GUID 到 VARIANT InitVariantFromGUIDAsBuffer 以字节数组形式保存,保存类型为 VT_ARRAY | VT_UI1,相当于字节拷贝, ...