当前位置: 代码迷 >> 综合 >> consul 安装部署
  详细解决方案

consul 安装部署

热度:70   发布时间:2023-12-18 05:46:49.0

一、概述

consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如ZooKeeper等)。服务部署简单,只有一个可运行的二进制的包。每个节点都需要运行agent,他有两种运行模式server和client。每个数据中心官方建议需要3或5个server节点以保证数据安全,同时保证server-leader的选举能够正确的进行


   客户端模式(client)

 consul的client模式,就是客户端模式。是consul节点的一种模式,这种模式下,所有注册到当前节点的服务会被转发到SERVER,本身是不持久化这些信息

 服务端模式(server)

SERVER表示consul的server模式,表明这个consul是个server,这种模式下,功能和CLIENT都一样,唯一不同的是,它会把所有的信息持久化的本地,这样遇到故障,信息是可以被保留的

集群模式 (server-leader)

consul 集群主节点,它需要负责同步注册的信息给其它的SERVER,同时也要负责各个节点的健康监测

raft(raft 节点数据一致性算法)

server节点之间的数据一致性保证,一致性协议使用的是raft,而zookeeper用的paxos,etcd采用的也是raft

 服务发现协议

consul采用http和dns协议,etcd只支持http

服务注册

consul支持两种方式实现服务注册,一种是通过consul的服务注册http API,由服务自己调用API实现注册,另一种方式是通过json个是的配置文件实现注册,将需要注册的服务以json格式的配置文件给出。consul官方建议使用第二种方式

服务发现

consul支持两种方式实现服务发现,一种是通过http API来查询有哪些服务,另外一种是通过consul agent 自带的DNS(8600端口),域名是以NAME.service.consul的形式给出,NAME即在定义的服务配置文件中,服务的名称。DNS方式可以通过check的方式检查服务

服务间的通信协议

 Consul使用gossip协议管理成员关系、广播消息到整个集群,他有两个gossip  pool(LAN pool和WAN pool),LAN pool是同一个数据中心内部通信的,WAN pool是多个数据中心通信的,LAN pool有多个,WAN pool只有一个


二 .consul集群安装

官网下载地址:consul下载地址

直接下载zip包,解压后只有一个可执行的文件consul,将consul添加到系统的环境变量里面即安装完成

#unzip consul_1.2.3_linux_amd64.zip

#cp -a consul  /usr/bin

consul必须启动agent才能使用,有两种启动模式server和client,还有一个官方自带的ui。server用与持久化服务信息,集群官方建议3或5个节点。client只用与于server交互。ui可以查看集群情况的

环境准备:(服务端)

3个server节点:192.168.1.101,192.168.1.102,192.168.1.103

cn1:

#consul agent  -bootstrap-expect 2  -server   -data-dir /data/consul0 -node=cn1 -bind=192.168.1.102 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1 

cn2:

#consul agent    -server  -data-dir /data/consul0 -node=cn2 -bind=192.168.1.101 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -join 192.168.1.102

cn3:

#consul agent  -server  -data-dir /data/consul0 -node=cn3 -bind=192.168.1.100 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -join 192.168.1.102

参数解释:

-bootstrap-expect:集群期望的节点数,只有节点数量达到这个值才会选举leader。

-server: 运行在server模式

-data-dir:指定数据目录,其他的节点对于这个目录必须有读的权限

-node:指定节点的名称

-bind:为该节点绑定一个地址

-config-dir:指定配置文件,定义服务的,默认所有一.json结尾的文件都会读

-enable-script-checks=true:设置检查服务为可用

-datacenter: 数据中心没名称,

-join:加入到已有的集群中

客户端:

客户端2个节点:192.168.1.199,192.168.1.198

#consul agent   -data-dir /data/consul0 -node=cn4 -bind=192.168.1.199 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -join 192.168.1.202

client节点可以有多个,自己根据服务指定即可。

ui:

#consul agent  -ui  -data-dir /data/consul0 -node=cn4 -bind=192.168.1.198  -client 192.168.1.198   -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -join 192.168.1.202

 -ui:使用自带的ui,

-ui-dir:指定ui的目录,使用自己定义的ui

-client:指定web  ui、的监听地址,默认127.0.0.1只能本机访问。

集群创建完成后:

使用一些常用的命令检查集群的状态:

#consul  info

可以在raft:stat看到此节点的状态是Fllower或者leader

#consul members

Node Address Status Type Build Protocol DC Segment
cn1 192.168.1.102:8301 alive server 1.0.2 2 dc1 <all>
cn2 192.168.1.101:8301 alive server 1.0.2 2 dc1 <all>
cn3 192.168.1.100:8301 alive client 1.0.2 2 dc1 <default>

新加入一个节点有几种方式;

1、这种方式,重启后不会自动加入集群

#consul  join  192.168.1.202

2、#在启动的时候使用-join指定一个集群

#consul agent  -ui  -data-dir /data/consul0 -node=cn4 -bind=192.168.1.198 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -join 192.168.1.202

3、使用-startjoin或-rejoin

#consul agent  -ui  -data-dir /data/consul0 -node=cn4 -bind=192.168.1.198 -config-dir /etc/consul.d -enable-script-checks=true  -datacenter=dc1  -rejoin


consul 实例注销/注册

注册实例

curl -X PUT -d '{"id": "redis-xxx","name": "redis-xxx","address": "127.0.0.1","port": 9121,"tags": ["test"],"checks": [{"http": "http://127.0.0.1:9121/","interval": "5s"}]}' http://127.0.0.1:8500/v1/agent/service/register

curl -X PUT -d '{"id": "exporter","name": "exporter","address": "192.168.2.133","port": 31247,"tags": ["test"],"checks": [{"http": "http://192.168.2.133:31247/","interval": "5s"}]}' http://119.3.242.247:32011/v1/agent/service/register

参数:可以通过查看应用启动时consul 注册信息

注销实例
curl -X PUT http://119.3.242.247:32011/v1/agent/service/deregister/redis-xxx

curl -X PUT http://119.3.242.247:32011/v1/agent/service/deregister/exporter

 

consul 注销相关问题参考博客

http://blog.didispace.com/consul-deregister/

查看consul节点信息

curl 127.0.0.1:8500/v1/catalog/nodes

api

https://www.consul.io/api/

 


 

 

 

  相关解决方案