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架构简介
CLIENT
CLIENT
表示consul
的client
模式,就是客户端模式。是consul
节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER
【通过HTTP
和DNS
接口请求server
】,本身是不持久化这些信息。
SERVER
SERVER
表示consul
的server
模式,其他功能和CLIENT
一样,不同的是,它会把所有的信息持久化的本地。
SERVER-LEADER
LEADER SERVER
需要负责同步注册的信息给其它SERVER
,同时负责各个节点的健康监测。
端口
TCP/8300:8300 端口用于服务器节点。客户端通过该端口 RPC 协议调用服务端节点。
TCP/UDP/8301:8301 端口用于单个数据中心所有节点之间的互相通信,即对 LAN 池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如领导选举事件)。
TCP/UDP/8302:8302 端口用于单个或多个数据中心之间的服务器节点的信息同步,即对 WAN 池信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。
8500:8500 端口基于 HTTP 协议,用于 API 接口或 WEB UI 访问。
8600:8600 端口作为 DNS 服务器,它使得我们可以通过节点名查询节点信息。