Consul的介绍
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。 Consul是分布式的、高可用的、可横向扩展的。
Consul特性
- 服务发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易,一些外部服务,例如saas提供的也可以一样注册。
- 健康检查:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面。
- 键/值存储:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
- 多数据中心:无需复杂的配置,即可支持任意数量的区域。
Consul 的角色
client
: 客户端, 无状态, 将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群.
server
: 服务端, 保存配置信息, 高可用集群, 在局域网内与本地客户端通讯, 通过广域网与其他数据中心通讯. 每个数据中心的 server 数量推荐为 3 个或是 5 个.
Consul安装
Consul官网下载地址:https://www.consul.io/downloads.html
linux
可以配置放在mv consul /usr/local/bin/
验证consul
,输出提示帮助说明安装完成。
Consul运行
agent可以运行为server或client模式。
每个数据中心至少必须拥有一台server . 建议在一个集群中有3或者5个server。
client模式.一个client是一个非常轻量级的进程.用于注册服务,运行健康检查和转发对server的查询.
启动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 : 启动时加入这个集群
启动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
查看集群成员
consul members
ֹͣAgent
consul leave
注册服务
可以通过提供服务定义文件或者调用HTTP API来注册一个服务.
定义文件注册服务
mkdir /etc/consul.d
.d
后缀意思是这个路径包含了一组配置文件
配置案例
{ "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架构简介
CLIENTCLIENT
表示consul
的client
模式,就是客户端模式。是consul
节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER
【通过HTTP
和DNS
接口请求server
】,本身是不持久化这些信息。
SERVERSERVER
表示consul
的server
模式,其他功能和CLIENT
一样,不同的是,它会把所有的信息持久化的本地。
SERVER-LEADERLEADER SERVER
需要负责同步注册的信息给其它SERVER
,同时负责各个节点的健康监测。