consul异地多数据中心以及集群部署方案
目的
实现consul 异地多数据中心环境部署,使得一个数据中心的服务可以从另一个数据中心的consul获取已注册的服务地址

环境准备
两台 linux服务器,外网可以互相连通,都需要开放服务器的8500,8300,8301(可选择开放或者不开放),8302端口
为了简化流程,我们每台服务器上只部署一个consul server ,不部署集群

端口 用途
8500 图形界面
8300 不同server之间请求获取数据
8301 局域网集群内部通信
8302 广域网集群内部通信
部署过程
安装consul
下载安装包
在 opt 目录下

mkdir consul

如果下载1.5.0 的版本

curl --silent --remote-name https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_linux_amd64.zip
curl --silent --remote-name https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_SHA256SUMS
curl --silent --remote-name https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_SHA256SUMS.sig

如果下载速度过慢,可以选择在官网下载后,上传到服务器
https://www.consul.io/downloads.html

下载 web-ui安装包
下载图形界面安装包,并解压

wget https://releases.hashicorp.com/consul/0.8.1/consul_0.8.1_web_ui.zip
mkdir -p /opt/consul/web
unzip consul_0.8.1_web_ui.zip -d /opt/consul/web/

安装
只需要解压下载下来的文件即可

unzip consul_1.5.0_linux_amd64.zip

我们会得到一个 consul 文件,将这个文件移动到 /usr/local/bin 目录下

mv consul /usr/local/bin

运行配置
首先新建conf,data,run 文件夹,分别存放配置文件,数据,运行信息等
mkdir -p /opt/consul/conf
mkdir -p /opt/consul/data
mkdir -p /opt/consul/run

在conf文件夹下新建配置文件 consul会自动加载指定的conf文件夹下所有.json结尾的配置文件
cd conf
vim server.json

配置文件内容为:

{
"datacenter": "dc2",
"data_dir": "/opt/consul/data",
"log_level": "INFO",
"node_name": "consul-server02",
"server": true,
"bootstrap_expect": 1,
"bind_addr": "当前机器内网地址",
"advertise_addr": "当前机器外网地址",
"client_addr": "0.0.0.0",
"ui_dir": "/opt/consul/web",
"retry_join": ["当前机器外网地址","另一数据中心外网地址"],
"retry_interval": "30s",
"enable_debug": false,
"rejoin_after_leave": true,
"start_join": ["当前机器外网地址","另一数据中心外网地址"],
"enable_syslog": true,
"syslog_facility": "local0"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
在consul文件夹下新建,编写启动脚本 start.sh
vim start.sh

脚本文件内容为:

nohup consul agent -server -bootstrap -syslog
-ui-dir=/opt/consul/web
-data-dir=/opt/consul/data
-config-dir=/opt/consul/conf
-pid-file=/opt/consul/run/consul.pid
-disable-host-node-id & > ./nohup.out

分配可执行权限

chmod 751 start.sh

运行
执行 start.sh

./start.sh

然后访问 机器外网地址:8500 的UI界面,可以看到如下界面

以上安装部署过程在另一台服务器上执行相同操作,为了防止出现未知错误,建议保证两台服务器的consul版本一致

配置多数据中心
两台服务器各自安装成功之后,需要将两台服务器关联起来,执行

consul join -wan xxx.xxx.xxx.xxx 后面为需要关联服务器的地址

执行结果

两台服务器分别执行之后,就已经关联成功了,可以互相访问对方的服务,可以通过以下命令来查看关联成员

consul members -wan

结果,可以看到两台机器的服务地址以及状态

这个时候再访问对应服务的UI界面,可以在右上角看到关联的数据中心

我们通过切换不同的数据中心,就可以查看对应数据中心的已注册的服务,相应的,也可以通过接口请求来获取数据

http://xxx:8500/ui/#/dc2/services
http://xxx:8500/ui/#/dc1/services

额外: consul集群配置
大致安装过程和多数据中心一致,区别在于

机器是内网的多台机器,无需开放 8302 端口
配置文件中 retry_join 和 start_join 数组配置为各个集群服务器的地址
advertise_addr 无需配置
bootstrap_expect 值改为集群服务器数量
保证数据中心名称一致
使用 consul join xxx.xxx.xxx.xxx 来关联各个服务
使用 consul members 查看集群
配置项说明和配置文件解释
启动命令

-server : 定义agent运行在server模式
-bootstrap-expect :在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap共用
-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-ui-dir: 提供存放web ui资源的路径,该目录必须是可读的
-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载
-client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0
1
2
3
4
5
6
7
8
配置命令(运行时指定会覆盖配置文件中对应命令)

-advertise:通知展现地址用来改变我们给集群中的其他节点展现的地址,一般情况下-bind地址就是展现地址
-bootstrap:用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader。
-bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap公用
-bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0
-client:consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1
-config-file:明确的指定要加载哪个配置文件
-config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载
-data-dir:提供一个目录用来存放agent的状态,所有的agent允许都需要该目录,该目录必须是稳定的,系统重启后都继续存在
-dc:该标记控制agent允许的datacenter的名称,默认是dc1
-encrypt:指定secret key,使consul在通讯时进行加密,key可以通过consul keygen生成,同一个集群中的节点必须使用相同的key
-join:加入一个已经启动的agent的ip地址,可以多次指定多个agent的地址。如果consul不能加入任何指定的地址中,则agent会启动失败,默认agent启动时不会加入任何节点。
-retry-join:和join类似,但是允许你在第一次失败后进行尝试。
-retry-interval:两次join之间的时间间隔,默认是30s
-retry-max:尝试重复join的次数,默认是0,也就是无限次尝试
-log-level:consul agent启动后显示的日志信息级别。默认是info,可选:trace、debug、info、warn、err。
-node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名
-protocol:consul使用的协议版本
-rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。
-server:定义agent运行在server模式,每个集群至少有一个server,建议每个集群的server不要超过5个
-syslog:开启系统日志功能,只在linux/osx上生效
-ui-dir:提供存放web ui资源的路径,该目录必须是可读的
-pid-file:提供一个路径来存放pid文件,可以使用该文件进行SIGINT/SIGHUP(关闭/更新)agent
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
配置文件相关属性

acl_datacenter:只用于server,指定的datacenter的权威ACL信息,所有的servers和datacenter必须同意ACL datacenter
acl_default_policy:默认是allow
acl_down_policy:
acl_master_token:
acl_token:agent会使用这个token和consul server进行请求
acl_ttl:控制TTL的cache,默认是30s
addresses:一个嵌套对象,可以设置以下key:dns、http、rpc
advertise_addr:等同于-advertise
bootstrap:等同于-bootstrap
bootstrap_expect:等同于-bootstrap-expect
bind_addr:等同于-bind
ca_file:提供CA文件路径,用来检查客户端或者服务端的链接
cert_file:必须和key_file一起
check_update_interval:
client_addr:等同于-client
datacenter:等同于-dc
data_dir:等同于-data-dir
disable_anonymous_signature:在进行更新检查时禁止匿名签名
disable_remote_exec:禁止支持远程执行,设置为true,agent会忽视所有进入的远程执行请求
disable_update_check:禁止自动检查安全公告和新版本信息
dns_config:是一个嵌套对象,可以设置以下参数:allow_stale、max_stale、node_ttl 、service_ttl、enable_truncate
domain:默认情况下consul在进行DNS查询时,查询的是consul域,可以通过该参数进行修改
enable_debug:开启debug模式
enable_syslog:等同于-syslog
encrypt:等同于-encrypt
key_file:提供私钥的路径
leave_on_terminate:默认是false,如果为true,当agent收到一个TERM信号的时候,它会发送leave信息到集群中的其他节点上。
log_level:等同于-log-level
node_name:等同于-node
ports:这是一个嵌套对象,可以设置以下key:dns(dns地址:8600)、http(http api地址:8500)、rpc(rpc:8400)、serf_lan(lan port:8301)、serf_wan(wan port:8302)、server(server rpc:8300)
protocol:等同于-protocol
recursor:
rejoin_after_leave:等同于-rejoin
retry_join:等同于-retry-join
retry_interval:等同于-retry-interval
server:等同于-server
server_name:会覆盖TLS CA的node_name,可以用来确认CA name和hostname相匹配
skip_leave_on_interrupt:和leave_on_terminate比较类似,不过只影响当前句柄
start_join:一个字符数组提供的节点地址会在启动时被加入
statsd_addr:
statsite_addr:
syslog_facility:当enable_syslog被提供后,该参数控制哪个级别的信息被发送,默认Local0
ui_dir:等同于-ui-dir
verify_incoming:默认false,如果为true,则所有进入链接都需要使用TLS,需要客户端使用ca_file提供ca文件,只用于consul server端,因为client从来没有进入的链接
verify_outgoing:默认false,如果为true,则所有出去链接都需要使用TLS,需要服务端使用ca_file提供ca文件,consul server和client都需要使用,因为两者都有出去的链接
watches:watch一个详细名单

consul异地多数据中心以及集群部署方案的更多相关文章

  1. (1)Consul在linux环境的集群部署

    1.Consul概念 1.1什么是Consul? Consul是一种服务网格解决方案,是HashiCorp公司推出的开源组件,由Go语言开发,部署起来很容易,只需要极少的可执行程序和配置.同时Cons ...

  2. 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)

    基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)   前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...

  3. Redis 中常见的集群部署方案

    Redis 的高可用集群 前言 几种常用的集群方案 主从集群模式 全量同步 增量同步 哨兵机制 什么是哨兵机制 如何保证选主的准确性 如何选主 选举主节点的规则 哨兵进行主节点切换 切片集群 Redi ...

  4. 开发的服务集群部署方案,以etcd为基础(java)

    当前有很多服务集群部署,但是对于我们自己开发的服务系统怎么样能够解决部署问题,对大家很麻烦和笨重. 首先,我想说对于我们国内,小公司小系统比较多.大型系统毕竟少数,向阿里云看齐的不多.其实所谓的需要集 ...

  5. MongoDB分片集群部署方案

    前言 副本集部署是对数据的冗余和增加读请求的处理能力,却不能提高写请求的处理能力:关键问题是随着数据增加,单机硬件配置会成为性能的瓶颈.而分片集群可以很好的解决这一问题,通过水平扩展来提升性能.分片部 ...

  6. 基于Centos7xELK+Kafka集群部署方案

    本次集群部署使用ELK版本统一为6.8.10,kafka为2.12-2.51 均可在官网下载 elasticsearch下载地址:https://www.elastic.co/cn/downloads ...

  7. 高可用的K8S集群部署方案

    涉及到的内容 LVS HAProxy Harbor etcd Kubernetes (Master Worker) 整体拓补图 以上是最小生产可用的整体拓补图(相关节点根据需要进行增加,但不能减少) ...

  8. Mysql基于Mysql Cluster+MysqlRouter的集群部署方案

    http://note.youdao.com/noteshare?id=a61c4a6ff2b76e5305430eb66eb116e2&sub=4B4B6E8D0E2849F9B0DFB67 ...

  9. 万台规模下的SDN控制器集群部署实践

    目前在网络世界里,云计算.虚拟化.SDN.NFV这些话题都非常热.今天借这个机会我跟大家一起来一场SDN的深度之旅,从概念一直到实践一直到一些具体的技术. 本次分享分为三个主要部分: SDN & ...

随机推荐

  1. dt系统中tag如何使用like与%来进行模糊查询

    在destoon中,如果一个品牌的详细显示页,如果要显示与品牌相关的供应的话,可以通过查询标题中带有品牌关键字的这一条件来进行查询,但是经过测试发现不能正确解析, 然后查看文件的源文件,发现 {tag ...

  2. javascript Object and new object() object --构造函数

  3. js里调用函数时,函数名带括号与不带括号的区别

    function test(){ return 1;}var a=test;console.log(a);//输出[Function: test]var b=test();console.log(b) ...

  4. django-缓存django-redis

    https://django-redis-chs.readthedocs.io/zh_CN/latest/ 安装 django-redis 最简单的方法就是用 pip : pip install dj ...

  5. flask + websocket实现简单的单聊和群聊

    单聊 from flask import Flask,request,render_template from geventwebsocket.handler import WebSocketHand ...

  6. python的any()函数

    any()函数的参数是一个可迭代对象,其中的一个元素有一个为真,则any()函数返回真,除非全部为假的时候才返回假. aaa=[,,,] print(any(aaa)) 返回:false

  7. 分析第一个Android程序

    项目结构切换Project, 项目真实目录结构 { 1.    .gradle和idea 两个目录放置的都是Android Studio 自动生成的一些文件,我们无需关心,也不要去手动编辑. 2.AP ...

  8. robot framework中如何为每个测试用例,测试集准备数据或销毁数据

    Suite Setup:在这个测试集的所有测试用例开始测试之前运行(类似于junit的@BeforeClass) Suite Teardown:在这个测试集的所有测试用例结束之后运行(类似于junit ...

  9. LeetCode 1099. Two Sum Less Than K

    原题链接在这里:https://leetcode.com/problems/two-sum-less-than-k/ 题目: Given an array A of integers and inte ...

  10. LeetCode 708. Insert into a Cyclic Sorted List

    原题链接在这里:https://leetcode.com/problems/insert-into-a-cyclic-sorted-list/ 题目: Given a node from a cycl ...