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配置如下:

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也是可以的

写入本地文件是这样的:

转载于:https://www.cnblogs.com/wangzhisdu/p/7762715.html

consul集群搭建,配合nginx完成服务动态发现和健康检查相关推荐

  1. Consul集群搭建

    转载自  Consul集群搭建 概述 作为服务发现的几种产品,比较可以查看这里.Consul官方也提供了几种产品之间的比较,点击查看. 服务发现产品 Consul有很多组件,但总体来说,它是一个发现和 ...

  2. 8分钟学会Consul集群搭建及微服务概念

    Consul介绍: Consul 是由 HashiCorp 公司推出的开源软件,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul 的方案更"一站式" ...

  3. Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建十一(Nginx负载均衡篇)

    Zookeeper+Hadoop+Hbase+Hive+Kylin+Nginx集群搭建十一(Nginx负载均衡篇) 十三.Nginx负载均衡 1.Nginx安装环境 2.编译 3.启动测试 4.ngi ...

  4. Nacos 快速开始、版本选择、预备环境准备、下载源码或者安装包、从 Github 上下载源码方式、下载编译后压缩包方式、配置nacos、配置集群、启动服务器、服务注册发现和配置管理、关闭服务器

    1.Nacos 快速开始 1.1.版本选择 1.2.预备环境准备 1.3.下载源码或者安装包 1.3.1.从 Github 上下载源码方式 1.3.2.下载编译后压缩包方式 1.3.3.配置nacos ...

  5. hadoop集群搭建过程中不适用hostname发现slave,而是通过ip

    需求 搭建hadoop集群时,默认使用hostname发现集群 如果不配置hostname的话,报错日志: Unresolved datanode registration: hostname can ...

  6. Consul服务注册发现与健康检查

    一.Consul概述 consul是一个开源的使用go语言开发的服务发现.配置管理中心服务.内置了服务注册与发现框 架.分布一致性协议实现.健康检查.Key/Value存储.多数据中心方案,不再需要依 ...

  7. 基于Docker的Consul服务发现集群搭建

    在去年的.NET Core微服务系列文章中,初步学习了一下Consul服务发现,总结了两篇文章.本次基于Docker部署的方式,以一个Demo示例来搭建一个Consul的示例集群,最后给出一个HA的架 ...

  8. Consul4-linux安装consul以及集群搭建

    前面几篇关于consul的文章简单的介绍了windows下安装consul以及consul作为注册中心和配置中心的简单使用,基于前面的基础,这里介绍下载linux下安装consul以及结合docker ...

  9. HBase详解(对hbase集群搭建、读写流程、hbase的javaApi等细致入微的讲解与保姆级的图解)

    学HBase的意义是什么 我本想用MySQL来与HBase作比较,但发现他们两者毫无可比性,因为两者运用领域不同,各自有各自的优点,就好比爬山穿登山鞋,潜水穿脚蹼一般. 一门技术的兴起,一个优秀的开源 ...

最新文章

  1. 转载:页面加载swf插件:swfobject
  2. Nginx调度器(反向代理),TCP/UDP调度器
  3. jQuery插件:jqGrid使用(二)
  4. 【转】线段树题目 汇总 讲解(by not only success)
  5. ​关于深度学习、NLP和计算机视觉的30个顶级Python库
  6. linux缓存文件用户权限错误,CVE-2019-11244漏洞到底该如何修复?--关于缓存文件权限设置...
  7. 熊猫数据集_对熊猫数据框使用逻辑比较
  8. 收藏 | 图像分割2020总结:结构,损失函数,数据集和框架
  9. android文件系统挂载过程,有线挂载Android4.2文件系统
  10. 026 模块3-random库的使用
  11. 关于python的文献综述_什么是论文文献综述
  12. LOJ#2339. 「WC2018」通道(边分治+虚树)
  13. linux文件加解密,linux 系统下对文件进行加解密的方法参考总结
  14. mysql储存长文本_mysql 存储长文本
  15. 进制转换C语言实现(十进制转换为任意进制)
  16. java ajax教程_Jquery ajax基础教程
  17. 35幅非常漂亮的夜景摄影作品欣赏
  18. Win10(Win7)通过注册表(regedit)添加、修改、删除系统环境变量、或系统服务(services.msc)
  19. 地图中的矢量POI兴趣点
  20. 程序员年薪20万、30万、40万都是如何生活的?

热门文章

  1. 蓝桥杯 ADV-100 算法提高 第二大整数
  2. 【数据库】E-R图向关系模型转换的规则
  3. 1106. Lowest Price in Supply Chain (25)-PAT甲级真题(dfs,bfs,树的遍历)
  4. mysql for update死锁_Mysql 数据库死锁过程分析(select for update)
  5. linux安装mongodb并创建用户
  6. Spring@Import注解的三种用法
  7. BZOJ1433[ZJOI2009]假期的宿舍——二分图最大匹配
  8. 述 SQL 中的 distinct 和 row_number() over() 的区别及用法
  9. win7下安装tomcat
  10. mysql merg引擎学习