=============================
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 集群的更多相关文章

  1. 庐山真面目之十二微服务架构基于Docker搭建Consul集群、Ocelot网关集群和IdentityServer版本实现

    庐山真面目之十二微服务架构基于Docker搭建Consul集群.Ocelot网关集群和IdentityServer版本实现 一.简介      在第七篇文章<庐山真面目之七微服务架构Consul ...

  2. vagrant+docker搭建consul集群开发环境

    HashiCorp 公司推出的Consul是一款分布式高可用服务治理与服务配置的工具.关于其配置与使用可以参考这篇文章 consul 简介与配置说明. 一般,我们会在多台主机上安装并启动 consul ...

  3. Docker学习-Docker搭建Consul集群

    1.环境准备 Linux机器三台 网络互通配置可以参考 https://www.cnblogs.com/woxpp/p/11858257.html 192.168.50.21 192.168.50.2 ...

  4. 搭建consul 集群

    1.   准备工作 a)      启动三台虚拟机 s1:10.1.7.141 s2:10.1.7.139 s3:10.1.7.138 b)      每台机器上在 /home新建文件夹 mkdir ...

  5. CentOS7 搭建 Consul 集群

    环境准备: ssh shell工具: 远程连接 三个CentOS示例: 部署集群 配置好各个实例之间的网络访问,以及ssh免密登录. 下载&上传: 1.下载 Consul: Download ...

  6. docker上搭建consul集群全流程

    consul简介: consul是提供服务发现.简单配置管理.分区部署的服务注册发现解决方案.主要特性:服务发现\健康检查\基于Key-Value的配置\支持TLS安全通讯\支持多数据中心部署 con ...

  7. 使用Docker搭建consul集群+registrator实现服务自动注册。

    准备工作:10.173.16.83 master10.172.178.76 node110.171.19.139 node210.162.204.252 node3 一.安装consul-cluste ...

  8. 微服务之:从零搭建ocelot网关和consul集群

    介绍 微服务中有关键的几项技术,其中网关和服务服务发现,服务注册相辅相成. 首先解释几个本次教程中需要的术语 网关 Gateway(API GW / API 网关),顾名思义,是企业 IT 在系统边界 ...

  9. Linux中Consul集群部署

    分配三台虚拟机: 192.168.5.125 192.168.5.128 192.168.5.129 在每台虚拟机上创建  /usr/consul 文件件  命令: mkdir /usr/consul ...

随机推荐

  1. TypeError: __init__() got an unexpected keyword argument 't_command'

    python  .\manage.py migrate 报错如下 λ python .\manage.py migrateTraceback (most recent call last): File ...

  2. BZOJ2839集合计数

    题目描述 一个有N个元素的集合有2^N个不同子集(包含空集),现在要在这2^N个集合中取出若干集合(至少一个),使得 它们的交集的元素个数为K,求取法的方案数,答案模1000000007.(是质数喔~ ...

  3. sublime text3 插件的安装

    ctrl + shift +p 打开搜索框界面 安装: 输入install package并回车,再在列表中选中所需要安装的插件,你会发现左下角正在显示安装.安装成功后,一般会打开插件说明. 卸载: ...

  4. JIRA和Confluence更改JVM内存大小解决访问打开缓慢问题

    原因: 根据主机物理内存不同,默认的java虚拟机内存也会不同(一个较低值),有时候不够用,可以修改默认设置,改善内存不足导致的问题. 操作步骤: JIRA 1. 打开至相应目录: ~]# cd  / ...

  5. centos7安装mysql5.6(rpm包安装)

    应用场景:日常需求安装数据库——MySQL. 安装环境:① 最小化安装的centos7.2(同版本RHEL7适用): ② MySQL 5.6: 具体步骤: 1. 下载mysql 5.6并解压(官网有时 ...

  6. SFTP多文件上传,删除

    公司项目中需要把项目的相关文件上传到服务器的tomcat中,需要在项目中进行以下几步操作: 1.添加项目信息,包括名称,描述,服务器ip,sftp的用户名,密码,端口号等,存在配置,部署,删除等操作 ...

  7. Ubuntu更改主目录文件名为英文

    Ubuntu的语言设置成中文之后,自己主目录下的桌面.下载.文档等文件夹全部为中文汉字,使用终端时,输入十分不方便.需要把文件夹改成英文,而不更改系统语言. 在终端中输入以下命令 export LAN ...

  8. 都是分号惹的祸 ORA-00911

    使用JMeter连接oracle数据库,访问JDBC 请求,执行结果提示:ORA-00911: ??Ч??? 意思为无效的字符错误 说明了在执行的的SQL语句中出现了无效字符,所以在AQL语句无法通过 ...

  9. DAY1初识Python----变量及命名规则,注释,数据类型,常量,交互

     1.认识和了解python  python是一门解释型语言,弱类型语言 2.python发展史   2008年 2.X,3.X 3.第一个python程序  python语句可以写在命令行中,进行编 ...

  10. java的零拷贝机制

    转:https://blog.csdn.net/zhouhao88410234/article/details/77574689?fps=1&locationNum=9 为何要懂零拷贝原理?因 ...