consul简介_consul什么时候出来的-程序员宅基地

技术标签: 微服务  

consul简介

Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。 Consul是分布式的、高可用的、可横向扩展的。它具备以下特性 :

  • 服务发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
  • 健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
  • 键/值存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
  • 多数据中心:无需复杂的配置,即可支持任意数量的区域。
安装
# 这里以 Linux系统为例:
$ wget https://releases.hashicorp.com/consul/1.4.2/consul_1.4.2_linux_amd64.zip

$ unzip consul_1.4.2_linux_amd64.zip
$ mv consul /usr/local/bin/
Consul 的角色

client: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群.

server: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯. 每个数据中心的 server 数量推荐为 3 个或是 5 个.

运行 Consul代理

完成Consul的安装后,必须运行agent. agent可以运行为server或client模式.每个数据中心至少必须拥有一台server . 建议在一个集群中有3或者5个server.部署单一的server,在出现失败时会不可避免的造成数据丢失.

其他的agent运行为client模式.一个client是一个非常轻量级的进程.用于注册服务,运行健康检查和转发对server的查询.agent必须在集群中的每个主机上运行.

启动 Consul Server
#node1:
$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n1 -bind=192.168.110.155 -ui  -config-dir /etc/consul.d -rejoin -join 192.168.110.155 -client 0.0.0.0
#运行cosnul agent以server模式
-server : 定义agent运行在server模式
-bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用
-data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
-ui: 启动web界面
-config-dir::配置文件目录,里面所有以.json结尾的文件都会被加载
-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
#node2:
$ consul agent -server -bootstrap-expect 2 -data-dir /tmp/consul -node=n2 -bind=192.168.110.169 -ui  -rejoin -join 192.168.110.155

-server : 定义agent运行在server模式
-bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用
-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-ui: 启动web界面
-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-config-dir::配置文件目录,里面所有以.json结尾的文件都会被加载
-client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
-join 192.168.110.121 : 启动时加入这个集群

/tmp/consul与**/etc/consul.d**需要自己创建

启动 Consul Client
#node3:
$ consul agent  -data-dir /tmp/consul -node=n3 -bind=192.168.110.157 -config-dir /etc/consul.d -rejoin -join 192.168.110.155

运行cosnul agent以client模式,-join 加入到已有的集群中去。
查看集群成员
consul members
停止Agent
  • Ctrl-C

  • consul leave
    
注册服务

为Consul配置创建一个目录.Consul会载入配置文件夹里的所有配置文件.在Unix系统中通常类似 /etc/consul.d (.d 后缀意思是这个路径包含了一组配置文件).

mkdir /etc/consul.d

编写服务定义配置文件,假设我们有一个名叫web的服务运行在 10000端口.另外,我们将给他设置一个标签.这样我们可以使用他作为额外的查询方式:

{
    
  "service": {
                                          #服务
	 "name": "web",									#名称
	 "tags": ["master"],                            #标记
	 "address": "127.0.0.1",						#ip
	 "port": 10000,									#端口
	 "checks": [
	   {
    
	     "http": "http://localhost:10000/health",
	     "interval": "10s"							#检查时间
	   }
	 ]
  }
}
测试程序
package main
import (
	"fmt"
	"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
    
	fmt.Println("hello Web3! This is n3或者n2")
	fmt.Fprintf(w, "Hello Web3! This is n3或者n2")
}
func healthHandler(w http.ResponseWriter, r *http.Request) {
    
	fmt.Println("health check! n3或者n2")
}
func main() {
    
	http.HandleFunc("/", handler)
	http.HandleFunc("/health", healthHandler)
	http.ListenAndServe(":10000", nil)
}
Consul架构

在这里插入图片描述
CLIENT表示consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER【通过HTTP和DNS接口请求server】,本身是不持久化这些信息。
SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的
SERVER-LEADER:中间那个SERVER下面有LEADER的字眼,表明这个SERVER是它们的老大,它和其它SERVER不一样的一点是,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hbshhb/article/details/91488511

智能推荐

jQuery.fn.extend()方法_jquery fn.extend-程序员宅基地

文章浏览阅读176次。jQuery.fn.extend()方法 实例添加两个方法到jQuery原型($.fn)<label><input type="checkbox" name="foo"> Foo</label> <label><input type="checkbox" name="bar"&gt_jquery fn.extend

1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案微信小程序篇(域名备案)_stm32域名访问-程序员宅基地

文章浏览阅读320次。如果自己的域名有没备案使用域名访问http的时候会报错微信小程序如果要发布,也需要有备案过的云服务器和域名我的不能详细写了,因为已经备案过了,展示的信息不一样了,我拷贝过来别人写的 <ignore_js_op> 再往下,就根据提示让你填,你就填就..._stm32域名访问

如何做到iphone数据恢复_iphone格式化后数据还能恢复吗-程序员宅基地

文章浏览阅读3.4k次。近期小编我收到不少用户咨询误删除了苹果手机数据之后,应该如何恢复到问题。要知道,苹果手机最经典的就是他的ios系统,这套系统比较闭合,什么都是自成体系。所以有时候也让很多朋友担心,万一iphone数据丢失了,itun1youmeilaide及备份,该怎么办才好呢?安卓手机能用的数据恢复办法,苹果也能用么?一般来说,选择专业数据恢复技术苹果iphone手机数据恢复软件:http://ww_iphone格式化后数据还能恢复吗

反射如何打破封装性_打破产品建议的复杂性-程序员宅基地

文章浏览阅读83次。反射如何打破封装性当前系统的真正问题(The Real Issue With the Current Sytems)With the rise of e-commerce in this era, a new frontier has opened up. It’s called product recommendations. It’s a no brainers, you recommend..._封装 复杂

NLP 文本预处理 Python 代码_python文本预处理代码csdn-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏11次。在获得文本之后 将所有字母转换为小写或大写 目录在获得文本之后将所有字母转换为小写或大写将数字转换为单词或删除数字删除标点、重音符号和其他音调符号删除空格扩展缩写词删除停止词、稀疏词和特定词文本规范化---单词减为词干、词根或词干的过程词性标记分块是一种自然的语言过程,用于识别组成部分把句子(名词、动词、形容词等)联系起来具有离散语法意义的顺..._python文本预处理代码csdn

com.sun.mail.smtp.SMTPSendFailedException: 553 Mail from must equal authorized user_com.sun.mail.smtp.smtpsenderfailedexception: 553 m-程序员宅基地

文章浏览阅读8.6k次。com.sun.mail.smtp.SMTPSendFailedException: 553 Mail from must equal authorized user1.问题SMTP邮件发送失败异常 :553,邮件发信方必须与已认证用户相同错误来自于:使用org.springframework.mail.SimpleMailMessage发送邮件时,没有setFrom时抛出的异..._com.sun.mail.smtp.smtpsenderfailedexception: 553 mail from must equal author

随便推点

全球15个最顶级的技术类博客站点_世界顶级计算机技术网站-程序员宅基地

文章浏览阅读1.4k次。中文原文:http://publish.it168.com/2007/0525/20070525022301.shtml看自:http://www.williamlong.info/archives/919.html英文原文:http://www.computerworld.com/action/article.do?command=printArticleBasic&articleId=_世界顶级计算机技术网站

银河麒麟V10操作系统安装putty和cutecom和网络调试助手(mNetAssist)_putty软件怎么用麒麟-程序员宅基地

文章浏览阅读5.3k次。银河麒麟V10操作系统安装putty和cutecom和网络调试助手(mNetAssist)安装Puttysudo apt-get install putty安装Cutecomsudo apt-get install cutecom安装网络调试助手需要先下载安装包mNetAssist-release-amd64.debsudo dpkg -i mNetAssist-release-amd64.deb..._putty软件怎么用麒麟

电子协会 C语言 1级 1 、 计算(a+b)/c 的值_c语言(a+b)/c-程序员宅基地

文章浏览阅读243次。给定 3 个整数 a、b、c,计算表达式(a+b)/c 的值,/是整除运算。(-10,000 < a,b,c< 10,000, c 不等于 0)输入仅一行,包括三个整数 a、b、c, 数与数之间以一个空格分开。输出一行,即表达式的值。_c语言(a+b)/c

图像视频滤镜算法---颜色滤镜_图像滤镜算法-程序员宅基地

文章浏览阅读8.9k次,点赞8次,收藏39次。 承接上一篇滤镜初识,本文将介绍第一种滤镜:颜色滤镜。颜色滤镜颜色滤镜即调色滤镜,也是最常见的滤镜,任何通过调节图像像素值的亮度、对比度、饱和度、色相等等方法,得到的不同于原图像颜色的效果,都统称为颜色滤镜。我们来做一个颜色增强滤镜,以此说明,方便大家更好的理解。如下图所示,我们对一副图在PS中进行饱和度调整(饱和度提高41):那么,我们在这个过程中,算法实际上做了..._图像滤镜算法

Android Lottie使用集成_android集成copylotit-程序员宅基地

文章浏览阅读2k次。Lottie是什么 Lottie是Airbnb 开源的一个项目,我在知道了这个项目后感觉真的遇见了新大陆一样 想必android开发的程序猿们都或多或少的为动画的实现苦恼过,或者都曾认为,动画这个实现在android的代码里总感觉会消耗系统的性能,那么今天说的这个Lottie,就解决了所有的烦恼,一起来看实现方法吧!走起来!!!!!首先说一下,动画效果是由UI 或者设计通过AE来_android集成copylotit

sql语句优化之一:尽量使用索引避免全表扫描_尽量避免在 where 子句中使用 != 或者 <> 操作符,查询引用会放弃索引而进行全表扫-程序员宅基地

文章浏览阅读1.1w次,点赞4次,收藏22次。1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: selec_尽量避免在 where 子句中使用 != 或者 <> 操作符,查询引用会放弃索引而进行全表扫