consul集群搭建教程 - 多机集群

news2025/4/26 17:55:34

简言

1. 使用consul单节点有宕机,数据丢失的风险,为了安全,使用consul集群更靠谱

2. consul的各个版本下载地址在 Consul Versions | HashiCorp Releases

3. 本文使用consul的版本是consul1.15.1,所以请下载名字为 consul_1.15.1_linux_amd64.zip 的文件即可

4. 本次教程用到了三台机器,分别是 192.168.5.101,192.168.5.46,192.168.5.47

准备操作(注意:三台机器上都需要执行)

1. 打开网址 Consul Versions | HashiCorp Releases 下载consul的安装包,下载到 /usr/local/bin 目录,如下图

 2. 运行命令 unzip consul_1.15.1_linux_amd64.zip 解压到当前目录,consul就是我们要使用的bin文件了。运行命令 consul --version 查看版本确实是v1.15.1, 如下图

 3. 运行命令  mkdir consul_1.15.1 创建目录 consul_1.15.1,我们的目的是把本次实验的东西都放在这个目录下

    进入到刚才创建的目录 consul_1.15.1

    执行命令 mkdir data  创建data目录,用以存放consul的数据

    执行命令 mkdir config 创建config目录,用以存放consul使用的配置文件

最终如下图

开始搭建集群

步骤1. 在机器 192.168.5.101 上的目录 /usr/local/bin/consul_1.15.1,新建文件 cluster.sh    内容如下

nohup ../consul agent -server -data-dir=./data -node=server1 -bind=192.168.5.101 -client=192.168.5.101 -advertise=192.168.5.101 -bootstrap-expect=3 -datacenter=datacenter1 -ui -enable-script-checks=true -config-dir=./config -server-port=8300 -serf-lan-port=8301 -serf-wan-port=8302 -http-port=8500 -dns-port=8600 > consul.log 2>&1 &

这里逐个属性解释下

nohup    linux常用命令,表连接服务器的终端退出后,本次启动的进程不中断

agent     以代理模式启动

-server   以server模式启动,不设置时默认以client模式启动,仅client模式不能提供服务,必须搭配server模式的consul才行

-data-dir=./data 表consul的数据存放在当前目录下的data文件夹,默认所有以.json结尾的文件都会读

-node=server1  本consul节点的名字,该名字在集群内不重复即可。这里暂用server1表第一个consul节点服务

-bind=192.168.5.101 内部集群通信,本consul节点绑定的地址

-client=192.168.5.101 绑定的客户端接口地址,客户端可以通过该地址连接到本consul

-advertise=192.168.5.101 内部集群通信时广播出去的IP地址,不设置时默认使用bind属性的IP作为集群内广播

-bootstrap-expect=3 表consul集群期望的consul节点数量,consul会等待这么多个consul节点可用时才会开始搭建集群,选举leader节点

datacenter=datacenter1 指定数据中心的名字,不设置时默认为dc,不同的cosul节点可以共用同一个数据中心

-ui   使用consul自带的UI界面

-enable-script-checks=true  设置检查服务为可用

-config-dir=./config 指定本consul进程使用的配置文件的路径

-server-port=8300  选取Leader节点(raft协议通信)和提供RPC调用时,consul节点之间的通信端口

-serf-lan-port=8301 集群通信端口,用在LAN网

-serf-wan-port=8302 数据中心通信端口,用在WAN网

-http-port=8500 提供http服务的端口

-dns-port=8600 提供dns服务的端口

> consul.log 意思是把进程的标准输出重定向到consul.log文件,没有该文件时会自动新建

2>&1 意思是进程的标准错误和进程的标准输出一样,也就是同样重定向到consul.log文件

&     linux常用命令,表后台执行,这样进程的输出不要输出到当前终端上

步骤2. 执行命令 bash ./cluster.sh 启动本机consul节点,然后 ps aux |grep consul 查看consul进程,可以看到consul进程已经启动成功,如下图,73627即consul节点进程

 步骤3.在浏览器上输入地址 http://192.168.5.101:8500,consul会自动转到 192.168.5.101:8500/ui/datacenter1/services 可以看到此时consul返回了错误,“No cluster leader”,意为consul进程启动成功了,但是没有leader节点,不能提供任何服务

步骤4. 在机器 192.168.5.46 上同样执行步骤1 ,步骤2,只是要先对cluster.sh修改

    4.1 把cluster.sh中的 -node 的值改为serve2 

    4.2 把所有的ip(-bind,-client,-advertise)都修改成192.168.5.46

    4.3 增加 -join=192.168.5.101:8301 意思是加入到机器192.168.5.101的consul集群中

    其他内容可不变,如下

nohup ../consul agent -server -data-dir=./data -node=server2 -bind=192.168.5.46 -client=192.168.5.46 -advertise=192.168.5.46 -join=192.168.5.101:8301 -bootstrap-expect=3 -datacenter=datacenter1 -ui -enable-script-checks=true -config-dir=./config -server-port=8300 -serf-lan-port=8301 -serf-wan-port=8302 -http-port=8500 -dns-port=8600 > consul.log 2>&1 &

然后执行 bash ./cluster 启动consul,再ps查看下,以确保consul进程真的启动成功了

特别注意:此时在浏览器中输入地址 192.168.5.101:8500 或者 192.168.5.46:8500 查看,一样失败,因为consul节点数只有2个,不足我们指定的 -bootstrap-expect=3 ,所以consul尚未进行集群选举,没有leader节点

步骤5.  在机器 192.168.5.47 上同样执行步骤1 , 步骤2,只是要先对cluster.sh修改

    5.1 把cluster.sh中的 -node 的值改为serve3 

    5.2 把所有的ip(-bind,-client,-advertise)都修改成192.168.5.47

    5.3 增加 -join=192.168.5.101:8301 意思是加入到机器192.168.5.101的consul集群中

    其他内容可不变,如下

nohup ../consul agent -server -data-dir=./data -node=server3 -bind=192.168.5.47 -client=192.168.5.47 -advertise=192.168.5.47 -join=192.168.5.101:8301 -bootstrap-expect=3 -datacenter=datacenter1 -ui -enable-script-checks=true -config-dir=./config -server-port=8300 -serf-lan-port=8301 -serf-wan-port=8302 -http-port=8500 -dns-port=8600 > consul.log 2>&1 &

然后执行 bash ./cluster 启动consul,再ps查看下,以确保consul进程真的启动成功了

 步骤6: 再次在浏览器上输入地址 http://192.168.5.101:8500,consul会自动转到 192.168.5.101:8500/ui/datacenter1/services 可以看到此时consul集群已经组建成功,如下图

点击左侧列表的Nodes,可以查看所有的consul节点,如下图,其中sever1为leader节点

步骤7:查看consul集群状态

7.1 查看集群内的成员 consul members -http-addr=你的consul地址    如下图

可以看到,集群内有3个节点 ,能看到节点名字,IP地址,健康状态,节点类型等等

7.2 查看本consul节点的状态 consul info -http-addr=你的consul地址    如下图(图是后来截的,此时leader节点已经被切换到192.168.5.47机器了)

 可以查看本consul节点版本号,是否是bootstrap模式,是否是leader节点,真正leader节点的IP地址,raft协议相关(同步量,数据快照,任期号,节点状态(leader还是follower)等等

步骤8.  测试集群选举,我们把机器192.168.5.101的consul进程关掉, 在浏览器上输入地址 http://192.168.5.101:8500 会看到已经无法连接通了,如下图

 我们再在浏览器上输入地址 http://192.168.5.46:8500 即另一个机器的consul地址,可以看到consul集群仍在,新的leader节点已经选举成功,这次是切换成了 192.168.5.47,如下图

 说明3个consul节点的集群,当consul主节点出问题时,剩下的2个consul节点会自动选举出新的leader节点

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

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

相关文章

GitHub开源神器,已获3k star!让你的 ChatGPT 不再报错!感受丝滑般体验!

点击上方“Github爱好者社区”,选择星标 回复“资料”,获取小编整理的一份资料 作者:GG哥 来源:GitHub爱好者社区(github_shequ) 这是GitHub爱好者社区第 71 篇原创文章 Hello,大家好&#xff0…

基于springboot的大学生租房系统源码论文数据库

3.1系统功能 现在无论是在PC上还是在手机上,相信全国所有地方都在进行大学生租房管理。随着经济的不断发展,系统管理也在不断增多,大学生租房系统就是其中一种,很多人会登录到相关的租房系统查看租房信息,还能查看房屋…

高效提升电池寿命和安全性 | 基于ACM32 MCU的BMS应用方案

电池管理系统(BMS)通过监控电池的状态,智能化管理及维护各个电池单元,从而防止电池出现过充电和过放电。优质的电池管理系统能够最大限度地延长电池整体使用寿命,有效保障设备安全。 BMS电池管理概述 BMS&#xff0c…

Linux使用Jenkins搭配Gitee自动化部署Vue项目

目录 一、环境准备二、Jenkins配置Node2.1 下载NodeJS插件2.2 配置node 三、新建任务-Vue项目四、配置Nginx 一、环境准备 Jenkins: Node:安装配置教程 建三个软链接,不然Jenkins会找不到 ln -s /usr/local/node-v14.18.2-linux-x64/bin/…

CDH 集成 Flink-1.14.3 过程与踩坑记录

一、资源准备与配置 1.1 项目文件下载与配置 #下载 flink-parcel 项目文件 [roothadoop105 ~]# git clone https://github.com/pkeropen/flink-parcel.git [roothadoop105 ~]# cd flink-parcel/ #编辑下载地址,看自己需求哪个版本 [roothadoop105 flink-parcel]# …

【后续】使用nvm替换nvmw作为nodejs的版本切换(亲测)

文接上篇,使用nvm替换nvmw作为nodejs的版本切换(亲测) 如图各种乱码,在vscoe中也是出现 真的好烦啊。看到提示的还是之前nvmw不能执行的各种报错。 XXX不是内部或外部命令,也不是可运行的程序或批处理文件。 决定&am…

【编译】JITAOT介绍与优劣

文章目录 JIT优劣 AOT优劣 二者区别来源 AOT 去年发布的 .NET 7 中引入了该功能,只是在 .NET 8 中进一步进行了改进。新版本中通过 Native AOT 发布的“Hello, World”应用程序体积进一步缩小,只有 .NET 7 的一半。 以 CoreCLR 为例,不做 AOT…

Linux进程信号(上)

目录 一:信号引入 二:信号保存方式 三:信号处理方式 四:查看Linux信号 五:信号捕捉 六:信号产生 一:终端按键产生信号 二:系统函数产生信号 2.1:kill(&#xff…

安全测试:配置管理潜在威胁

一、配置管理威胁有哪些 明文信息传输漏洞敏感信息泄露默认或可猜解用户账户会话重放攻击测试验证码缺陷http方法测试 二、明文信息传输和存储漏洞 漏洞描述: 页面中没有对传输的用户名和密码等敏感信息进行加密后传输。用户密码后台存储是否加密。 产生原因&a…

MySQL安装版步骤

百度网盘有安装版、解压包安装包以及visual插件 链接:https://pan.baidu.com/s/1XXvWa40FYX5mtqofW_knIg 提取码:ky2q 下载地址https://downloads.mysql.com/archives/installer/ 双击下载好的exe文件,选择Custom自定义安装,点…

内联函数-取决于编译器

内联函数 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调用建立栈帧的开销,内联函数提升程序运行的效率。 内联函数完美解决了宏函数上述所以缺点,但是不是所有函数都要搞成内联函数&#…

CentOS7(一)安装和基础配置

文章目录 一、CentOs 7 下载与安装二、安装过程三、安装Ohmyzsh1、基础软件安装2、编辑 install.sh4、修改仓库地址5、修改shell6、编辑主题和插件7、刷新配置8、创建用户级别配置文件 四、研发环境配置四、centos不能访问github,速度慢五、防火墙相关六、wget 下载…

Scala中的Map 集合详解

目录 一、不可变长Map集合 1.map的声明与遍历 2.map的常用方法:get、getOrElse、keys、values、、: 二、可变长Map集合 三、Map的其他方法 key -> value 的语法形式实际上是用库中的隐式转换实现的,实际调用了 Map.apply 方法。Map.a…

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测

多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测 目录 多维时序 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多变量时间序列预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-…

我看谁没看过

vue在新窗口打开页面方法 const { href } this.$router.resolve({path: "/officePlatform/addPrompt"});window.open(href, "_blank"); 添加圆形标志 h3::before {content: "";display: inline-block;width: 13px;height: 13px;background: va…

易点易动设备管理平台帮助化工企业实现设备高效管理

在现代化工企业中,设备管理和能耗监控是至关重要的。易点易动设备管理平台通过整合设备台账、巡检、维修、保养、备件管理、设备监控和能耗监控功能,为化工企业提供了一套全面、高效的解决方案。本文将详细介绍易点易动设备管理平台如何帮助化工企业实现…

JVM字节码分析

文章目录 1、类文件结构1.1、 魔数1.2、 版本1.3 、常量池1.4、 访问标识与继承信息1.5、 Field 信息1.6、 Method 信息1.7 、附加属性 2、字节码指令2.1、javap工具2.2、图解方法执行流程2.2.1 常量池载入运行时常量池2.2.2 方法字节码载入方法区2.2.3 main线程开始运行&#…

windows下另一种傻瓜式从零部署cuda环境的方式

前言 最近因为连续部署了两个深度学习环境,实在嫌烦了,于是摸索出一条简便的方式希望让人人都可以傻瓜式的快速部署,首先确保你的硬盘具有20G以上的空间,这里以部署torch的gpu版和让onnxruntime使用cuda加速为例,让我…

PDF.js源码使用总结

1、官网地址 pdf.js官网(http://mozilla.github.io/pdf.js/) pdf.js源码(https://github.com/mozilla/pdf.js) 版本选择:点击Tags 2、选择对应版本zip包下载、解压 在进行npm install之前 (注意:node.js…

【c++初阶】:引用

c入门 一.概念二.使用三.应用四.常引用五.引用与指针 一.概念 c语言中我们常用指针找地址,但在c中,忽略了指针(当然也可以使用指针)。常用引用这个概念。 二.使用 可以看到这里的b和c本质上都是a,只是不同的称呼罢了。…