使用背景
客户端的调用一个微服务,在调用过程中,为了完成一次请求,代码需要知道服务实例的网络位置(IP 地址和端口),需要动态感知服务的服务健康度是否可用,负载均衡等相关问题,既然有这些问题,那么服务发现就是解决这些问题的。
consul 简介
那么consul是啥?consul就是提供服务发现的工具,下面是简单的介绍
那么consul是啥?consul就是提供服务发现的工具。
* 服务发现:consul通过DNS或者HTTP接口使服务注册和服务发现变的很容易
* health checking:健康检测使consul可以快速的告警在集群中的操作。和服务发现的集成,可以防止服务转发到故障的服务上面
* key/value storage:一个用来存储动态配置的系统。提供简单的HTTP接口,可以在任何地方操作。
* multi-datacenter:支持多数据中心无需复杂的配置,即可支持任意数量的区域
consul的几个概念
1. Consul Cluster由部署和运行了Consul Agent的节点组成。 在Cluster中有两种角色:Server和 Client。
2. Server和Client的角色和Consul Cluster上运行的应用服务无关, 是基于Consul层面的一种角色划分.
3. Consul Server: 用于维护Consul Cluster的状态信息, 实现数据一致性, 响应RPC请求。官方建议是: 至少要运行3个或者3个以上的Consul Server。 多个server之中需要选举一个leader, 这个选举过程Consul基于Raft协议实现. 多个Server节点上的Consul数据信息保持强一致性。 在局域网内与本地客户端通讯,通过广域网与其他数据中心通讯。Consul Client: 只维护自身的状态, 并将HTTP和DNS接口请求转发给服务端。
4. Consul 支持多数据中心, 多个数据中心要求每个数据中心都要安装一组Consul cluster,多个数据中心间基于gossip protocol协议来通讯, 使用Raft算法实现一致性
5.使用端口
8300:TCP # Server RPC :agent server 使用的,用于处理其他agent发来的请求
8301:TCP and UDP # Serf LAN: 所有的agent都要使用这个端口,用于处理LAN中的gossip,
8302:TCP and UDP # Serf WAN:agent Server使用的,处理WAN中的与其他server的gossip
8400:TCP # 所有agent都要使用的端口,用于处理从CLI来的RPC。
8500:TCP # 所有agent都要使用的端口,用于处理HTTP API。
8600:TCP and UDP # 用于处理 DNS 查询。
Consul安装
安装环境: mac:64bit(查看mac位数:打开终端–>”uname -a”)
consul安装很简单,从官网 https://www.consul.io/downloads.html 进行下载就好,将consul_1.0.6_darwin_amd64.zip 文件解压后执行
sudo scp consul /usr/local/bin/
查看是否安装成功
直接在安装目录下执行consul命令即可,出现如下结果,表示安装成功。
Consul 开发模式启动
./consul agent -dev
-dev(该节点的启动不能用于生产环境,因为该模式下不会持久化任何状态),该启动模式仅仅是为了快速便捷的启动单节点consul 该节点处于server模式 该节点是leader 该节点是一个健康节点
Consul 集群方式启动
Server (启动3个节点)
consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node=1 -client 0.0.0.0 -ui (192.168.0.1)
consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node=2 -client 0.0.0.0 -ui (192.168.0.2)
consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -node=3 -client 0.0.0.0 -ui (192.168.0.3)
Agent(启动2个节点)
consul agent -data-dir /tmp/consul -node=4 -join 192.168.0.1
consul agent -data-dir /tmp/consul -node=5 -join 192.168.0.1
命令的常用选项,如下:
-data-dir : 指定agent储存状态的数据目录,必填选项对于server尤其重要,因为他们必须持久化集群的状态
-config-dir:指定service的配置文件和检查定义所在的位置
-dev:该参数配置下,不会有任何持久化操作,即不会有任何数据写入到磁盘
-node:指定节点在集群中的名称,该名称在集群中必须是唯一的(默认采用机器的host)
-server :指定节点为server,每个数据中心(DC)的server数推荐至少为1,至多为5
-join :将节点加入到集群
-datacenter :指定机器加入到哪一个数据中心中
-client :指定节点为client,指定客户端接口的绑定地址,包括:HTTP、DNS、RPC,默认是127.0.0.1,只允许回环接口访问
-bootstrap-expect :该命令通知consul server我们现在准备加入的server节点个数,该参数是为了延迟日志复制的启动直到我们指
定数量的server节点成功的加入后启动。
常见问题:
1.启动集群后,不能访问UI管理界面,查看client 是否没有配置,默认只能127.0.0.1
2.如果机器有多个网卡的时候,需要用 -bind :绑定IP地址,才能正常启动
3.部署在生产环境可以用 nohup consul agent -config-dir=/etc/consul.d > /data/consul/data/consul.log & 方式启动