consul: 集群搭建和数据中心通信

基于 docker-compose.yml 搭建


1 )docker-compose.yml 的配置

version: '3'
services:server1:image: consul:latestcommand: "agent -server -config-file=/consul/config/consul.json -node=consul-server1 -bootstrap-expect=5"volumes:- ./data/server1:/consul/data- ./config:/consul/confignetworks:- light_networkserver2:image: consul:latestcommand: "agent -server -config-file=/consul/config/consul.json -node=consul-server2 -join=server1"volumes:- ./data/server2:/consul/data- ./config:/consul/configdepends_on:- server1networks:- light_networkserver3:image: consul:latestcommand: "agent -server -config-file=/consul/config/consul.json -node=consul-server3 -join=server1"volumes:- ./data/server3:/consul/data- ./config:/consul/configdepends_on:- server1networks:- light_networkserver4:image: consul:latestcommand: "agent -server -config-file=/consul/config/consul.json -node=consul-server4 -join=server1"volumes:- ./data/server4:/consul/data- ./config:/consul/configdepends_on:- server1networks:- light_networkserver5:image: consul:latestcommand: "agent -server -config-file=/consul/config/consul.json -node=consul-server5 -join=server1"volumes:- ./data/server5:/consul/data- ./config:/consul/configdepends_on:- server1networks:- light_networkclient1:image: consul:latestcommand: "agent -config-file=/consul/config/consul.json -node=consul-client1 -join=server1"volumes:- ./data/client1:/consul/data- ./config:/consul/configdepends_on:- server1- server2- server3- server4- server5networks:- light_networkclient2:image: consul:latestcommand: "agent -config-file=/consul/config/consul.json -node=consul-client2 -join=server1"volumes:- ./data/client2:/consul/data- ./config:/consul/configdepends_on:- server1- server2- server3- server4- server5networks:- light_networknetworks:light_network:external: true
  • 这里是简洁版的,最快搭建方式,这里创建了5台服务器,2台客户端
  • 这里挂载了consul 的数据,暂且忽略日志的配置,给consul 配置意义不是很大
  • 相关data目录的创建,可以再 server1 下使用命令来创建,这里省略了配置
  • 之后,2台客户端可以在nginx上配置一个负载均衡来提供一个统一的地址
  • 这里不暴露接口,是因为假设有一个nginx集群也在网络之内,基于nginx来暴露
  • 这里共用配置文件,但数据文件,每个都独立
  • 网络也是,基于 light_network,也是提前创建的,这里不再赘述

2 )consul.json

{  "datacenter": "x-project-dc1","data_dir": "/consul/data","log_level": "INFO","client_addr": "0.0.0.0","bind_addr": "0.0.0.0","ui": true
}
  • 这里定义了 datacenter, 定义了服务端和客户端通用的配置
  • 不同的配置,都写在 command 配置中
  • 注意,服务端和客户端使用同一个 datacenter,否则将会出现错误

3 )运行起来并查看

  • $ docker compose up -d
  • $ docker compose ps -a
  • 如果 之前在同一个网络,或已打通的网络中已经配置了 两个客户端的nginx代理负载,假设暴露的是 8500
  • 那么访问 localhost:8500 即可访问
  • 这时候,单个的数据中心已经搭建完毕
  • 其他配置方案,不再举例,最终达成目的即可

4 )查看具体成员信息

  • docker exec -it consul-client1-1 consul members

    Node            Address          Status  Type    Build   Protocol  DC             Partition  Segment
    consul-server1  172.28.0.2:8301  alive   server  1.11.1  2         x-project-dc1  default    <all>
    consul-server2  172.28.0.3:8301  alive   server  1.11.1  2         x-project-dc1  default    <all>
    consul-server3  172.28.0.5:8301  alive   server  1.11.1  2         x-project-dc1  default    <all>
    consul-server4  172.28.0.4:8301  alive   server  1.11.1  2         x-project-dc1  default    <all>
    consul-server5  172.28.0.6:8301  alive   server  1.11.1  2         x-project-dc1  default    <all>
    consul-client1  172.28.0.7:8301  alive   client  1.11.1  2         x-project-dc1  default    <default>
    consul-client2  172.28.0.8:8301  alive   client  1.11.1  2         x-project-dc1  default    <default>
    
  • 这时候,可以看到 5台 server, 2台 client

5 )源码地址

  • https://github.com/cluster-deploy/cluster-consul

多数据中心配置


1 ) 概述

  • 为了实现跨数据中心的通信和复制,您需要配置Consul的WAN Gossip层

  • 这通常涉及到设置gossip_wan相关的配置项

  • 然而,在单机部署的场景下,通常不需要显式配置WAN Gossip层

  • 因为每个数据中心内部只有一个Consul服务器节点

  • 但如果您计划将来扩展集群或连接多个数据中心,则需要配置WAN Gossip层

  • 对于当前的两台机器和单机部署的场景,每台机器上的Consul实例已经是其数据中心内的唯一服务器节点,因此它们不会通过WAN Gossip层进行通信

  • 但如果未来您想要连接这两个数据中心,您需要在每个Consul的配置文件中添加WAN Gossip相关的配置

  • 例如指定WAN Gossip的地址列表(gossip_wan)和WAN Gossip的端口(默认为8302)

  • 如果您将来想要连接dc1和dc2,您可能需要 dc1 的 server.json 中添加类似以下的配置

    "gossip_wan": {  "address": "机器A的WAN IP地址",  "port": 8302  
    },  
    "retry_join_wan": ["机器B的WAN IP地址"]
    
  • 同样的,并在 dc2 的 server.json 中添加指向dc1的配置,这里不再赘述

  • 注意,上述配置中的“WAN IP地址”指的是机器在广域网中可访问的IP地址

  • 在实际环境中,您需要根据网络架构和安全性要求来配置这些地址

2 )关于 server.json 与 client.json 中的多数据中心配置

  • 在多数据中心的Consul配置中,client和server的配置会有所不同,具体取决于它们在架构中的角色和功能。

  • 对于server节点,配置gossip_wan和retry_join_wan通常是必要的。

    • gossip_wan用于配置WAN(广域网)Gossip池,这是跨数据中心之间通信的关键部分
    • 它确保数据中心之间的Consul服务器能够相互发现和通信。retry_join_wan则用于指定在WAN环境中尝试加入的Consul服务器地址列表,以及在首次尝试失败时进行重试
  • 然而,对于client节点,情况可能有所不同

    • Client节点通常不需要跨数据中心通信,它们主要与本地数据中心的server节点通信
    • 因此,在大多数情况下,client节点不需要配置gossip_wan和retry_join_wan
    • 它们主要关注与本地server节点的连接和注册服务
  • 注意,具体的配置取决于你的网络架构和需求

    • 在某些特殊情况下,你可能需要在client节点上启用某些跨数据中心的通信功能
    • 这时,你可能需要相应地配置gossip_wan和retry_join_wan
  • 总之,是否需要在client和server上配置gossip_wan和retry_join_wan取决于你的具体需求和架构

  • 在大多数情况下,server节点需要这些配置来确保跨数据中心的通信,而client节点则主要关注与本地server节点的通信

3 ) 具体配置示例

{"datacenter": "my-datacenter","data_dir": "/consul/data","log_level": "INFO","node_meta": {"role": "production"},"server": true"ui": true,"telemetry": {  "prometheus_retention_time": "30d",  "disable_hostname": true  },  "gossip_config": {  "name": "wan",  "bind": "0.0.0.0",  "port": 8302,  "probe_interval": "10s",  "probe_timeout": "5s",  "suspicion_mult": 7,  "gossip_interval": "1s",  "udp_flood_interval": "100ms",  "encrypt": "", // 这里可以放置gossip的加密密钥,如果启用了加密的话  "tls": {  "enabled": false,  "ca_file": "",  "ca_path": "",  "cert_file": "",  "key_file": "",  "verify_incoming": false,  "verify_outgoing": false  }  },  "retry_join_wan": [  "provider=aws tag_key=ConsulCluster tag_value=production",  "192.168.1.10",  "192.168.1.11",  "192.168.1.12"  ],  "retry_interval_wan": "30s",  "retry_max_wan": 3  
}
  • 上述示例仅供参考,随着 consul 架构升级,可能一些配置会失效
  • 如果需要区分客户端和服务端的配置,可以使用环境变量配置,具体不再赘述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue结合Elempent-Plus/UI穿梭框更改宽度以及悬浮文本显示

由于分辨率不同会导致文本内容显示不全&#xff0c;如下所示&#xff1a; 因此需要 1、悬浮到对应行上出现悬浮信息 实现代码如下所示&#xff1a; 这里只演示Vue3版本代码&#xff0c;Vue2版本不再演示 区别就在插槽使用上Vue3使用&#xff1a;#default“”&#xff1b;Vu…

vitepress系列-04-规整sideBar左侧菜单导航

规整左侧菜单导航 新建navConfig.ts 文件用来管理左侧导航菜单&#xff1a; 将于其他的配置分开&#xff0c;避免config.mts太大 在config目录下&#xff0c;新建 sidebarModules文件目录用来左侧导航菜单 按模块进行分类&#xff1a; 在config下新建sidebarConfig.ts文件&…

【随笔】Git 高级篇 -- 整理提交记录(上)cherry-pick(十五)

&#x1f48c; 所属专栏&#xff1a;【Git】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大…

Android 如何通过屏幕大小来适配不同大小的图片

可以使用Android中的dp(密度无关像素)单位来设置不同屏幕密度下的图片大小。dp是Android中的一种尺寸单位&#xff0c;它与屏幕密度无关&#xff0c;只与字体大小有关。在开发过程中&#xff0c;可以使用dp来设置布局和控件的大小&#xff0c;以便在不同的屏幕密度下保持一致的…

阻塞/非阻塞IO、同步/异步IO的区别

阻塞/非阻塞IO、同步/异步IO的区别 阻塞/非阻塞IO和同步/异步IO是描述IO操作&#xff08;输入/输出操作&#xff09;的两种不同方式&#xff0c;它们在处理IO操作时具有不同的特性和应用场景。 阻塞/非阻塞IO 阻塞IO和非阻塞IO主要关注的是程序在等待IO操作完成时的行为。 阻…

Python爬虫入门指南

随着大数据时代的到来&#xff0c;网络爬虫技术变得越来越重要。Python作为一种功能强大的编程语言&#xff0c;非常适合用来编写爬虫程序。本文将带领大家入门Python爬虫&#xff0c;从基础知识讲起&#xff0c;逐步深入实践。 一、爬虫基础知识 网络爬虫&#xff0c;又称为…

书生·浦语大模型 第二节:Demo实践

书生浦语大模型 第二节&#xff1a;Demo实践 视频链接&#xff1a;Demo实践视频 文档链接&#xff1a;教程文档 一、实践内容&#xff1a; 部署InternLM2-Chat-1.8B模型进行智能对话部署实战营优秀作品 八戒-Chat-1.8B 模型通过 InternLM2-Chat-7B 运行 Lagent 智能体 Demo…

C++分析程序各模块耗时-perf火焰图

C分析程序各模块耗时-perf火焰图 1. 简介2. 安装3. 测试示例4. 从火焰图可以获得的信息5. 生成火焰图常见问题 Reference: Perf Wiki【性能】perf 火焰图分析软件性能瓶颈【火焰图&#x1f525;】Linux C/C性能优化分析工具Perf使用教程 perf: Linux profiling with perform…

POLY - Survival Melee Weapons

一个轻便、有趣且灵活的低多边形资源包,非常适合原型设计或添加到低多边形世界中。超过50种近战武器、刀、斧、棍棒、棍棒等。 此套餐非常适合第三人称或自上而下的观看。 除此之外,资产还包括开发生存游戏可能需要的任何细节。 整个包是以多边形风格创建的,可以与其他多边…

分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现GWO-LSSVM灰狼算法优化最小二乘支持向量机数据…

消费增值:革新你的消费观念,让每一分钱都充满无限可能

你是否曾感叹&#xff0c;每次消费都如同流水般逝去&#xff0c;钱就这样无声无息地消失&#xff1f;今天&#xff0c;我要为你揭示一种革新性的消费观念——消费增值。这不仅仅满足你的日常需求&#xff0c;更能让你的每一分钱都如同种子般&#xff0c;在未来开出绚烂的花朵&a…

从细节讲解单轴测径仪系列!

摘要&#xff1a;单轴测径仪是从一个方向对产品外径进行在线检测的设备&#xff0c;应用于各种线缆电缆、橡胶塑料、金属管、纸管、丝等的生产线。 关键词&#xff1a;单轴测径仪,测径仪,在线测径仪 引言 在各种产品的生产线上&#xff0c;外径的测量通过使用测径仪已实现了高精…

聚焦行业技术云隆机械将莅临2024第13届生物发酵展

参展企业介绍 上海云隆机械有限公司本公司主要经营制造&#xff1a;板式杀菌系列、管式杀菌系列、CIP清洗系统、胶体磨系列、分散乳化机系列、容积式转子泵和高压均质机序列设备。承接设计&#xff1a;乳制品、果汁饮料、蜂产品、冰淇淋、调味品、矿泉水、纯净水等食品工程项目…

07 | Swoole 源码分析之 Channel 通道模块

原文首发链接&#xff1a;Swoole 源码分析之 Channel 通道模块 大家好&#xff0c;我是码农先森。 引言 通道&#xff0c;用于协程间通讯&#xff0c;支持多生产者协程和多消费者协程。底层自动实现了协程的切换和调度。 通道与 PHP 的 Array 类似&#xff0c;仅占用内存&am…

Hive安装配置

1 在conf目录下vim 创建hive-site.xml <?xml version"1.0"?> <?xml-stylesheet type"text/xsl" href"configuration.xsl"?> <configuration><property><name>javax.jdo.option.ConnectionURL</name>&l…

Open3D (C++) 计算点云的特征值特征向量

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 针对整个点云 P = { p i } i

互联网架构实践心得 (六)—给飞机换引擎和安全意识十原则

文章目录 给飞行中的飞机换引擎安全意识十原则开发层面产品层面运维层面给飞行中的飞机换引擎 所谓给飞行中的飞机(或飞驰的汽车)换引擎,说的是我们需要对一个正在飞速发展的系统进行大幅度的架构改造,比如把 All-in-one 的架构改造成微服务架构,尽可能减少或者消除停服的…

华为USG6000v

1、安全区域 一个及或多个接口的集合 默认的安全区域 Trust --- 优先级85&#xff0c;一般连接内网 Untrust --- 优先级5&#xff0c; 一般连接外网 Dmz --- 优先级50&#xff0c;一般连接服务器、 Local --- 优先级100&#xff0c;防火墙接口所在区的区域 2…

力扣 --组合

给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2&#xff1a; 输入&#xff1a;n 1, k …

2024.4.7作业

//登陆界面 this->setWindowTitle("传奇霸业"); this->setWindowIcon(QIcon("C:\\Users\\l1693\\Desktop\\pictures\\1.png")); this->resize(400,300); this->setFixedSize(400,300); //登录界面修饰 //底图 QLabel *lab5 new QLabel(this);…