搭建 consul 集群
=============================
consul 命令行工具
=============================
consul 支持 Windows/Linux 等多种平台, 一般生产环境部署在 Linux, 下载包中仅有一个可执行程序, 所有的服务都通过命令行开启.
D:\my_program\consul\consul_1.2.3_windows_amd64>consul
Usage: consul [--version] [--help] <command> [<args>] Available commands are:
agent Runs a Consul agent
catalog Interact with the catalog
connect Interact with Consul Connect
event Fire a new event
exec Executes a command on Consul nodes
force-leave Forces a member of the cluster to enter the "left" state
info Provides debugging information for operators.
intention Interact with Connect service intentions
join Tell Consul agent to join cluster
keygen Generates a new encryption key
keyring Manages gossip layer encryption keys
kv Interact with the key-value store
leave Gracefully leaves the Consul cluster and shuts down
lock Execute a command holding a lock
maint Controls node or service maintenance mode
members Lists the members of a Consul cluster
monitor Stream logs from a Consul agent
operator Provides cluster-level tools for Consul operators
reload Triggers the agent to reload configuration files
rtt Estimates network round trip time between nodes
snapshot Saves, restores and inspects snapshots of Consul server state
validate Validate config files/directories
version Prints the Consul version
watch Watch for changes in Consul
常用的命令有:
consul agent #开启 server agent 或 client agent
consul reload #在不重启本机的 agent 的情况下, 让 agent 重新加载配置文件.
consul members #查看集群中的成员节点
consul join #将指定的agent加到指定的集群中
consul leave #将指定的agent从所属的集群中退出, 同时关闭该agent
--------------------------
consul agent 命令
--------------------------
consul agent 参数也有很多, 下面是一些重要参数:
-server 参数, 节点作为 server 角色, 不加该参数的话, 表明节点工作在 client 模式下.
-bootstrap-expect=<int> 参数, 表明该 datacenter 中期望的引导节点个数,当设定该参数后, consul 直到 server 数量到达该设定值后, 才会引导整个集群,该标记不能和 bootstrap 共用, 引导节点不需要太多, 1 到 3 个就可以了.
-bootstrap 参数, 参数"-bootstrap"表示在 datacenter 中只能有一个 server 处于 bootstrap 模式并使自己成为 leader 角色, 该参数不能和 bootstrap-expect 参数公用.
-bind=<IP> 参数, 输入本节点的IP, 该IP用于集群内部的通讯, 集群中所有节点都应能访问该 IP, 默认为 0.0.0.0. 一般不需要修改. 如果有多张网卡的话, consul 将不允许使用 0.0.0.0, 需要我们指定一个真实的网卡 IP.
-node=<节点名称>, 用来设定 agent 在集群中的名称, 默认为该节点的 hostname
-join=<IP>, 将节点加到指定的集群, IP地址为集群中其他agent的IP, 可以传入多个 -join 参数. 默认agent启动时不会加入任何节点, 后续需要使用 consul join 命令加入到集群中.
-config-dir=<目录>, 设定配置文件目录, 其下所有的.json 文件都会被自动加载.
-data-dir=<目录>, 设定 data 存放路径, client和server类的agent都需要指定.
-client=<IP>, 参数后面接一个 ip 地址, 代表将来开放给客户端访问的地址, 用来提供 Http/DNS/RPC 服务, 默认是 127.0.0.1, 只运行本地访问, 如果要开放访问, 需要设定为 0.0.0.0
-ui 参数, 开启默认的 Web UI
-advertise-wan=<IP>, 用于多数据中心集群, 边缘节点server agent需要设置一个公网IP, 这样多个数据中心集群可以相互通讯.
-dev 参数, 代表运行在开发模式下, 在该模式下, consul不做任何数据持久化, 非常适合做 demo.
-retry-join="IP list" 参数, 加入集群失败后, 持续尝试加入集群, 可以设置多个IP, 比如 -retry-join="192.168.1.11 192.168.1.12"
consul除了支持命令行参数的方式外, 还支持json格式的参数, consul json 配置文件的详细说明, 可参考:
https://deepzz.com/post/the-consul-of-discovery-and-configure-services.html#toc_9 和 https://www.tuicool.com/articles/EzE7NfY
两个示例:
示例1: 开启一个server agent 的示例, 192.168.1.1 为一个Windows 机器.
consul agent -server -bootstrap-expect=1 -node=s1 -bind=192.168.1.1 -client=0.0.0.0 -data-dir=D:\consul_data -ui
说明: -bind 参数一般情况下取值为 0.0.0.0, 如果有多张网卡的话, consul 将不允许使用 0.0.0.0, 需要我们指定一个真实的网卡 IP.
示例2: 在第一个 server 启动后, 其他 agent 启动的时候, 可以使用 -join 参数加入到集群中.
比如下面是在 192.168.1.200 Windows机器上, 启动一个客户端 agent, 并加入到上述 server 集群中.
consul agent -node=c1 -bind=192.168.1.200 -join 192.168.1.1 -data-dir=D:\consul_data -ui
--------------------------
consul leave 和 join 命令
--------------------------
一个 consul agent 可以加到一个或多个consul集群中, 如果一个agent 没有加入到任何一个集群中, 它将是一个孤立的节点, 也就是说它是一个孤立的集群. 想加入一个存在的集群, 只需要知道一个存在的节点, 这个存在的节点既可以是server类agent, 也可以是client类 agent.
consul leave -http-addr=192.168.1.11:8500
# 上面命令是将 192.168.1.11 agent 优雅地关闭, 也就是 192.168.1.11 agent将退出参与的所有集群,
# 这个操作不需要在 192.168.1.11 本机执行. consul join -http-addr=192.168.1.11:8500 192.168.1.12,
# 上面命令将 192.168.1.11 agent 加到 192.168.1.12 所处的集群中,这个操作不需要在 192.168.1.11 本机执行.
--------------------------
consul catalog 命令
--------------------------
consul catalog datacenters, 列出数据中心
consul catalog nodes , 列出节点
consul catalog nodes -service=redis ,列出指定服务的节点
consul catalog services , 列出服务
=============================
Windows 下的开发环境
=============================
Windows 下开发环境的命令如下, 非常简单.
consul agent -dev -client 0.0.0.0
-dev 参数, 代表运行在开发模式下, 在该模式下, consul不做任何数据持久化.
-client 参数后面接一个 ip 地址, 代表将来开放给客户端访问的地址, 用来提供 Http/DNS/RPC 服务, 默认是 127.0.0.1, 只运行本地访问, 如果要开放访问, 需要设定为 0.0.0.0
命令执行后, consul 将监听多个端口, 其中 8500 端口是 webUI 服务, 可以通过 http://127.0.0.1:8500 验证 consul 运行的的情况.
=============================
Linux 下的开发环境
=============================
在 Linux 下, 我使用 docker 容器运行 consul, 下载次新版 1.2.3
# pull image
docker pull consul:1.2. # 验证一下版本信息
docker run --rm consul:1.2. consul version # 开启开发模式
docker run -d \
--name consul_dev \
--net=host \
-p : \
-p : \
-p : \
-p : \
consul:1.2. \
consul agent -dev -client 0.0.0.0
因为是通过容器来运行, 所以需要将端口都暴露出来, 容器网络模式选用 host 模式, 并开放其他机器访问该 consul 服务.
=============================
consul 集群
=============================
consul 集群中至少一个 server 角色的 agent, 但显然这个集群本身并不是高可用架构. 正常集群需要 3~5 个 server, 我分别在三台虚拟机通过 docker 容器开启 server agent. Windows 主机工作在 client agent 模式下.
下面是集群的规划清单:
Linux | vm1 | server 模式 | 192.168.1.11
Linux | vm2 | server 模式 | 192.168.1.12
Linux | vm3 | server 模式 | 192.168.1.13
--------------------------
vm1 server agent 启动
--------------------------
在 vm1 上 启动一个server, 特别说明的为容器分配一个匿名的 volume 用来映射容器中的 /consul/data 目录, 该目录保存 consul 的 data, 脚本文件如下:
#file: /var/lib/boot2docker/consul_vm1.sh
docker rm consul_vm1
docker run -d \
--name consul_vm1 \
--net host \
-p : \
-p : \
-p : \
-p : \
-v /consul/data \
consul:1.2. \
consul agent \
-server \
-ui \
-datacenter=dc1 \
-bootstrap-expect= \
-data-dir=/consul/data \
-node=consul_vm1 \
-bind=192.168.1.11 \
-client=0.0.0.0
通过 ui 检查
http://192.168.1.11:8500/
# 通过 consul members 命令检查:
docker run --rm consul:1.2. consul members -http-addr=192.168.1.11:
docker run --rm consul:1.2.3 consul members
直接执行不带参数的consul members 会报错, 因为默认情况下, consul 会通过 127.0.0.1:8500 获取成员清单, 而我们用的是 eth1 这个网卡IP 192.168.1.11启动的consul, 所以不能用 loopback lo 网卡的 127.0.0.1 IP 查询, 上面命令会报错"tcp 127.0.0.1:8500: connect: connection refused", 需要使用下面命令查询:
--------------------------
vm2 server agent 启动
--------------------------
在 vm2 启动 consul 容器的命令基本和 vm1 相同, 不同的地方有:
* 增加了 -join 参数, 加入的 vm1 的集群中.
* 删除了 -bootstrap-expect=1
* 修改了 对应了 -bind 参数IP
* 修改了容器名 和 consul node 名
#file: /var/lib/boot2docker/consul_vm2.sh
docker rm consul_vm2
docker run -d \
--name consul_vm2 \
--net host \
-p : \
-p : \
-p : \
-p : \
-v /consul/data \
consul:1.2. \
consul agent \
-server \
-ui \
-datacenter=dc1 \
-data-dir=/consul/data \
-node=consul_vm2 \
-bind=192.168.1.12 \
-client=0.0.0.0 \
-join=192.168.1.11
--------------------------
vm3 server agent 启动
--------------------------
在 vm3 启动 consul 容器的命令基本和 vm2 相同, 除了IP和名称不同外, 仅仅是删除了 -join 参数, 我们将在后面通过join命令加入集群.
#file: /var/lib/boot2docker/consul_vm3.sh
docker rm consul_vm3
docker run -d \
--name consul_vm3 \
--net host \
-p : \
-p : \
-p : \
-p : \
-v /consul/data \
consul:1.2. \
consul agent \
-server \
-ui \
-datacenter=dc1 \
-data-dir=/consul/data \
-node=consul_vm3 \
-bind=192.168.1.13 \
-client=0.0.0.0 \
# 手工将 192.168.1.13 agent 加到 192.168.1.12 所在的集群中:
docker run --rm consul:1.2. consul join -http-addr=192.168.1.13: 192.168.1.12 # 另外, 手工关闭 192.168.1.13 agent 的命令为:
docker run --rm consul:1.2. consul leave -http-addr=192.168.1.13:
=============================
参考
=============================
Consul -- 分布式配置中心
https://340starobserver.github.io/2018/03/08/Consul-Cluster/
Consul 使用手册
http://www.liangxiansen.cn/2017/04/06/consul/
consul 支持多数据中心的服务发现与配置共享工具
https://deepzz.com/post/the-consul-of-discovery-and-configure-services.html
搭建 consul 集群的更多相关文章
- 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现
庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介 在第七篇文章<庐山真面目之七微服务架构Consul ...
- vagrant+docker搭建consul集群开发环境
HashiCorp 公司推出的Consul是一款分布式高可用服务治理与服务配置的工具.关于其配置与使用可以参考这篇文章 consul 简介与配置说明. 一般,我们会在多台主机上安装并启动 consul ...
- Docker学习-Docker搭建Consul集群
1.环境准备 Linux机器三台 网络互通配置可以参考 https://www.cnblogs.com/woxpp/p/11858257.html 192.168.50.21 192.168.50.2 ...
- 搭建consul 集群
1. 准备工作 a) 启动三台虚拟机 s1:10.1.7.141 s2:10.1.7.139 s3:10.1.7.138 b) 每台机器上在 /home新建文件夹 mkdir ...
- CentOS7 搭建 Consul 集群
环境准备: ssh shell工具: 远程连接 三个CentOS示例: 部署集群 配置好各个实例之间的网络访问,以及ssh免密登录. 下载&上传: 1.下载 Consul: Download ...
- docker上搭建consul集群全流程
consul简介: consul是提供服务发现.简单配置管理.分区部署的服务注册发现解决方案.主要特性:服务发现\健康检查\基于Key-Value的配置\支持TLS安全通讯\支持多数据中心部署 con ...
- 使用Docker搭建consul集群+registrator实现服务自动注册。
准备工作:10.173.16.83 master10.172.178.76 node110.171.19.139 node210.162.204.252 node3 一.安装consul-cluste ...
- 微服务之:从零搭建ocelot网关和consul集群
介绍 微服务中有关键的几项技术,其中网关和服务服务发现,服务注册相辅相成. 首先解释几个本次教程中需要的术语 网关 Gateway(API GW / API 网关),顾名思义,是企业 IT 在系统边界 ...
- Linux中Consul集群部署
分配三台虚拟机: 192.168.5.125 192.168.5.128 192.168.5.129 在每台虚拟机上创建 /usr/consul 文件件 命令: mkdir /usr/consul ...
随机推荐
- Java 枚举 的学习
在JDK5.0之后,引进了一种与C语言相通的枚举类型. 所谓枚举类型就是指含有一组具有固定值, 并且容量有限的数据集合. 例如,定义一个星期的枚举类型, 从周一到周日是具有固定大小和固定值的集合 pu ...
- 如何将Drawable转为Bitmap?
本文选自StackOverflow(简称:SOF)精选问答汇总系列文章之一,本系列文章将为读者分享国外最优质的精彩问与答,供读者学习和了解国外最新技术.本文将讲解如何将Drawable转为Bitmap ...
- rsync服务部署
构建rsync远程同步----------同步源----------------发起端-------------192.168.1.1 192.168.1.101.配置IP地址并保证互通2.确定备份源 ...
- cf1000E We Need More Bosses (tarjan缩点+树的直径)
题意:无向联通图,求一条最长的路径,路径长度定义为u到v必须经过的边的个数 如果把强联通分量都缩成一个点以后,每个点内部的边都是可替代的:而又因为这是个无向图,缩完点以后就是棵树,跑两遍dfs求直径即 ...
- js 刷新
方法一: location.reload 重新加载 location.reload(); 如果该方法没有规定参数,或者参数是 false,它就会用 HTTP 头 If-Modified-Since 来 ...
- MySQL使用普通用户访问返回ERROR 1698 (28000): Access denied for user 'root'@'localhost'
这个问题最开始查资料都说要改密码,密码不对.其实不是这个样子都. 解决方法 修改/etc/mysql/my.cnf,添加以下内容 [mysqld] skip-grant-tables 重启mysql服 ...
- 【CSS 技能提升】 :before和:after的使用
前几天的晚上较全面的去看了下css的一些文档和资料,大部分的样式运用都没什么大问题了,只是有些许较陌生,但是也知道他们的存在和实现的是什么样式.今天主要想在这篇学习笔记中写的也不多,主要是针对:bef ...
- [luogu1341][无序字母对]
luogu1341 思路 欧拉回路和欧拉路的裸题,首先判断是否存在欧拉路或者欧拉回路.当且仅当途中每个点的度数都为偶数时,存在欧拉回路.当且仅当图中度数为奇数的点的个数为2时,存在欧拉路.如果存在欧拉 ...
- springmvc启动问题
1.resource项目 freemarker.template.TemplateNotFoundException: Template not found for name "index/ ...
- java 一个类调用另一个类的方法
在要调用的类B中对调用类A实例化(在B中:A a = new A();a.function();)