Consul集群部署

大纲:

关于consul
consul的架构
部署服务器分配
安装部署
启动agent
启动consul server
启动consul client
把client 节点加入consul 集群
查看集群成员
查看集群信息
注册服务
更新服务
更新服务
查询服务
启用webui(尚未成功)

关于consul
consul是一个开源工具,它提供了服务发现,服务检测,健康检查的功能。支持跨机房的数据中心之间的基础设施服务的发现和检测。它安装简单,开箱即用。

consul的架构
consul的架构如下如图:(来自官方文档)

Consul是一个分布式、高可用的系统。为Consul提供服务的每一个节点都运行一个Consul Agent。作为一个Agent不需要提供服务发现或者键值数据的存取,Agent负责检查节点上的服务及节点本身的健康状况。
Agent与一个或多个Consul Server进行通信,Consul Server会进行数据的存储,多个Server之间会进行复制。Server们会选举一个Leader。基础设施中需要发现其它服务或节点的组件可以查询任何一个Consul Server或者Consul Agent。Agent会自动向Server进行查询。每个数据中心运行一个Consul Server的集群。当作出一个跨数据中心的服务发现或配置请求时,本地的Consul Server直接将请求发送到远程数据中心并返回结果。

部署服务器分配

节点名称 IP地址 类型
consul-server01 192.168.209.131 Server
consul-server02 192.168.209.134 Server
consul-server03 192.168.209.135 Server
consul-client01 192.168.209.132 Client
consul-client02 192.168.209.133 Client

实际环境中可根据需要来增减server节点和client节点。

安装部署
在所有服务节点和client节点上面建立consul服务的数据目录和配置文件目录.
mkdir -p /tmp/consul #consul服务的数据目录
mkdir -p /etc/consul.d #consul服务的配置文件目录

从官方地址下载consul软件包:
wget https://releases.hashicorp.com/consul/1.4.0/consul_1.4.0_linux_amd64.zip

consul的安装包是个二进制文件,解压之后放到指定目录会即可使用。如果没有放在PATH环境变量指定的路径下,要在PATH环境变量中添加。

安装验证
consul -v

启动agent
consul安装完成之后,必须要启动agent, agent运行集群的所有节点上面,它有两种server和client两种运行模式。如果以server模式启动,则该节点作为服务端,如果以client模式启动,则该节点作为客户节点,
consul集群对客户节点没有限制,对服务节点有限制,至少三个或者以上,一般3至五个节点。

启动服务节点

consul agent -server -ui -rejoin -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server01 -bind=192.168.209.131 -config-dir=/etc/consul.d/

consul agent -server -ui -rejoin -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server02 -bind=192.168.209.134 -config-dir=/etc/consul.d/

consul agent -server -ui -rejoin -bootstrap-expect=3 -data-dir=/tmp/consul -node=consul-server03 -bind=192.168.209.135 -config-dir=/etc/consul.d/

consul命令以及参数说明(详情请参考官方文档):
agent: 该指令用来运行agent服务,维护成员的重要信息,运行检查,服务查询,服务宣布。
-server: 以服务模式启动
-ui: 启用web UI界面。
-rejoin: 如果节点离开集群,尝试重新连接引入。
-bootstrap-expect:指定数据中心里服务节点的数量,当服务节点的数量少于这个值的时候,集群就会失败。
-data-dir:指定consul服务的状态以及相关数据的存储目录。
-node: 指定节点名称,不指定默认是主机名。
-bind: 指定consul服务绑定的IP地址。
-config-dir:指定consul服务的配置文件目录。

启动客户节点
consul agent -data-dir=/tmp/consul -node=consul-client01 -bind=192.168.209.132 -enable-script-checks=true -config-dir=/etc/consul.d
consul agent -data-dir=/tmp/consul -node=consul-client02 -bind=192.168.209.133 -enable-script-checks=true -config-dir=/etc/consul.d
不指定服务模式的标识(-server,-client)的情况下,是以client模式启动的。

把客户端节点加入集群(在所有服务节点执行)
consul join consul-client01 consul-client02

实际环境中可根据client节点的数量,在命令consul join之后增减节点名称。

查看集群成员
consul members

查看集群信息
consul info


注册服务:
在consul集群中注册服务有两种方式,一种是通过编写服务的配置文件,一般是json格式的。另一种就是通过HTTP API注册。

以json格式的配置文件注册服务:
例如:
echo ‘{"service": {"name": "web", "tags": ["rails"], "port": 80}}‘

/etc/consul.d/web.json

这里以json格式的形式把服务的相关信息写入web.json的文件,服务名称为:web, 标签名称为:rails, 端口号:80

以HTTP API的形式注册服务:
curl -X PUT -d ‘{"Datacenter": "dc1", "Node": "consul-client01", "Address": "192.168.209.132", "Service": {"name": "tomcat", "tags": ["tomcat"], "Port": 8080}}‘ http://127.0.0.1:8500/v1/catalog/register

更新服务
在服务节点执行: consul reload

查询服务
在consul集群中查询服务可以使用DNS和HTTP API查询。
使用DNS查询:
在DNS API中,服务的DNS名字是 NAME.service.consul. 虽然是可配置的,但默认的所有DNS名字会都在consul命名空间下.这个子域告诉Consul,我们在查询服务,NAME则是服务的名称.
对于我们上面注册的Web服务.它的域名是 web.service.consul :

dig @DNS服务器地址 -p DNS服务器地址端口号 服务域名

例如查询上面注册的服务:
dig @127.0.0.1 -p 8600 web.service.consul

在以上的结果中,名称为web的服务在192.168.209.132,192.168.209.133,192.168.209.131都注册。

使用HTTP API查询

curl -s 127.0.0.1:8500/v1/catalog/service/web | python -m json.tool



启用consul web ui
使用如下命令:
Server agent -server -ui
添加了-ui参数后http服务和8500端口都正常,但是无法访问,正在研究中,待后续解决。

原文地址:http://blog.51cto.com/zjhrunnnnggo/2332938

时间: 2024-08-30 08:26:31

Consul集群部署的相关文章

实战中的asp.net core结合Consul集群&Docker实现服务治理

0.目录 整体架构目录:ASP.NET Core分布式项目实战-目录 一.前言 在写这篇文章之前,我看了很多关于consul的服务治理,但发现基本上都是直接在powershell或者以命令工具的方式在服务器上面直接输入consul agent .... 来搭建启动consul集群,一旦把命令工具关掉,则consul无法再后台启动,尤其是在linux系统中. 如果在window系统中,采用bat文件到时可以做成开机自启,或者在linux中把命令做成一个service 服务文件来启动就可以实现后台运

Docker 容器部署 Consul 集群

一.docker安装与启动1.1安装docker[[email protected] /]# yum -y install docker-io 1.2更改配置文件[[email protected] /]# vi /etc/sysconfig/dockerother-args列更改为:other_args="--exec-driver=lxc --selinux-enabled" 1.3启动docker服务[[email protected] /]# service docker st

服务发现之美:Consul集群搭建

近几年随着Docker容器技术.微服务等架构的兴起,人们开始意识到服务发现的必要性.微服务架构简单来说,是一种以一些微服务来替代开发单个大而全应用的方法, 每一个小服务运行在自己的进程里,并以轻量级的机制来通信, 通常是 HTTP RESTful API.微服务强调小快灵, 任何一个相对独立的功能服务不再是一个模块, 而是一个独立的服务.那么,当我们需要访问这个服务时,如何确定它的地址呢?这时就需要服务发现了. Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发

Docker Swarm集群部署应用

在Docker Swarm集群部署应用 我们过去使用docker run的命令创建容器, 把前面替换成docker service create就行了. 建议搭建一个registry,为所的docker主机提供镜像下载,否则你需要在每个docker主机本地存在容器镜像. 所以搭建一个私有仓库,由私有仓库提供所需要的镜像, 本实验环境中用node1同时作为registry. 拉取本地私有仓库registry,查看registry镜像 基础环境 全部为CentOS7系统,Docker 版本为1.12

Docker应用系列(三)| 构建Consul集群

本示例基于Centos 7,在阿里云的三台机器上部署consul集群,假设目前使用的账号为release,拥有sudo权限. 由于Docker官方镜像下载较慢,可以开启阿里云的Docker镜像下载加速器,可参考此文进行配置. 假设三台主机的ip分别为: 主机一:192.168.0.1 主机二:192.168.0.2 主机三:192.168.0.3 三台主机的安装步骤相似,以主机一为例: 1. 安装docker服务: sudo yum install -y docker 2. 启动docker服务

RabbitMQ(6) 集群部署

单节点部署 rabbitmq单节点部署比较简单,可以使用apt-get等工具快速安装部署. wget -O- https://www.rabbitmq.com/rabbitmq-release-signing-key.asc | sudo apt-key add - echo 'deb http://www.rabbitmq.com/debian/ {distriubtion} main' | sudo tee /etc/apt/sources.list.d/rabbitmq.list sudo

8分钟学会Consul集群搭建及微服务概念

原文:8分钟学会Consul集群搭建及微服务概念 Consul介绍: Consul 是由 HashiCorp 公司推出的开源软件,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发现框 架.分布一致性协议实现.健康检查.Key/Value 存储.多数据中心方案,不再需要依赖其他工具(比如 ZooKeeper 等),使用起来也较为简单. Consul的如何实现的? Consul 用 Golang 实现,因此具有天然可移植性(支

linux安装consul集群

一.集群规划 consul借助agent来运行,类似elk的logstash agent 或 zabbix监控系统的agent , 每个需要被发现的服务上,通过consul agent client 来收集服务本身的信息,然后向consul agent server汇报, consul server 可以集群部署. 规划一下: 序号 节点ip 节点名称 角色 1 193.168.30.207 server-207 server 2 193.168.30.208 server-208 server

Zeebe服务学习3-Raft算法与集群部署

1.背景Zeebe集群里面保证分布式一致性问题,是通过Raft实现的,其实这个算法用途比较广泛,比如Consul网关,也是通过Raft算法来实现分布式一致性的. 首先简单介绍一下Raft: 在学术界,解决分布式一致性最耀眼的算法是Paxos,同时,这个算法也是最晦涩.而Raft算法就是基于这个背景被提出来,相对Paxos,Raft比较容易上手. 2.Raft算法介绍 集群每个节点都有三个状态:Follower,Leader,Candidate(Leader候选人)三个状态之间是可以互换的. 集群