consul集群搭建教程 - 单机器集群

news2024/10/6 12:35:05

简言

1. 上一篇博客我们讲了consul多机器集群的部署,consul集群搭建教程 - 多机集群_YZF_Kevin的博客-CSDN博客

2. 很多同学没有多个机器,只想在单台机器上实验下consul集群,所以这篇博客我们讲单台机器的consul集群部署

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

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

搭建集群步骤

1. 打开网址 https://releases.hashicorp.com/consul/下载consul的安装包,下载到 /usr/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 nod1    存放consul节点1的数据

    执行命令 mkdir nod2    存放consul节点2的数据

    执行命令 mkdir nod3    存放consul节点3的数据

最终如下图

4.  进入目录/usr/bin/consul_1.15.1/node1,创建config.json,内容如下

{
  "datacenter": "dc1",
  "data_dir": "/usr/bin/consul_1.15.1/node1",
  "log_level": "INFO",
  "server": true,
  "node_name": "node1",
  "ui": true,
  "bind_addr": "192.168.5.47",
  "client_addr": "192.168.5.47",
  "advertise_addr": "192.168.5.47",
  "bootstrap_expect": 3,
  "ports":{
    "http": 8500,
    "dns": 8600,
    "server": 8300,
    "serf_lan": 8301,
    "serf_wan": 8302
    }
}

这里逐个字段解析一下

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

"data_dir": "/usr/bin/consul_1.15.1/node1" 也就是本文件所在的目录,表consul的数据存放路径,启动时默认所有以.json结尾的文件都会读

"log_level": "INFO"  指定consul的日志级别为INFO

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

"node_name": "node1"  本consul节点的名字,该名字在集群内不重复即可。这里暂用node1表第一个consul节点服务

"ui": true  使用consul自带的UI界面

"bind_addr": "192.168.5.47"  内部集群通信,本consul节点绑定的地址,这里设为本机IP

"client_addr": "192.168.5.47"  绑定的客户端接口地址,客户端可以通过该地址连接到本consul

"advertise_addr": "192.168.5.47"  内部集群通信时广播出去的IP地址,不设置时默认使用bind_addr属性的IP作为集群内广播

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

"ports" 字段内部

"http": 8500  提供http服务的端口

"grpc_tls": 8503  consul1.14新添加,用于GRPC加密

"dns": 8600  提供dns服务的端口

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

"serf_lan": 8301  集群通信端口,用在LAN网

"serf_wan": 8302  数据中心通信端口,用在WAN网

5. 启动节点1的consul,运行命令 nohup /usr/bin/consul agent -config-file=/usr/bin/consul_1.15.1/node1/config.json >/usr/bin/consul_1.15.1/node1/consul.log 2>&1 & 

再运行命令 ps axu |grep consul  可以看到consul已经启动起来了,如下图

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

 7. 进入目录/usr/bin/consul_1.15.1/node2,创建config.json,内容如下

    注意:data_dir目录改成了node2的目录,节点名字改为node2,IP没变,端口都增加了10,比如node1的8500,node2这里就改成了8510等等

{
  "datacenter": "dc1",
  "data_dir": "/usr/bin/consul_1.15.1/node2/",
  "log_level": "INFO",
  "server": true,
  "node_name": "node2",
  "ui": true,
  "bind_addr": "192.168.5.47",
  "client_addr": "192.168.5.47",
  "advertise_addr": "192.168.5.47",
  "bootstrap_expect": 3,
  "ports":{
    "http": 8510,
    "grpc_tls": 8513,
    "dns": 8610,
    "server": 8310,
    "serf_lan": 8311,
    "serf_wan": 8312
    }
}

8. 启动节点2的consul,运行命令 nohup /usr/bin/consul agent -config-file=/usr/bin/consul_1.15.1/node2/config.json -retry-join=192.168.5.47:8301 >/usr/bin/consul_1.15.1/node2/consul.log 2>&1 &

解释下 -retry-join=192.168.5.47:8301 是为了让本节点node2加入到node1的集群中

再运行命令 ps axu |grep consul  可以看到consul已经启动起来了,如下图

9. 进入目录/usr/bin/consul_1.15.1/node3,创建config.json,内容如下

    注意:data_dir目录改成了node3的目录,节点名字改为node3,IP没变,端口再次增加了10,比如node2的8510,node3这里就改成了8520等等

{
  "datacenter": "dc1",
  "data_dir": "/usr/bin/consul_1.15.1/node3/",
  "log_level": "INFO",
  "server": true,
  "node_name": "node3",
  "ui": true,
  "bind_addr": "192.168.5.47",
  "client_addr": "192.168.5.47",
  "advertise_addr": "192.168.5.47",
  "bootstrap_expect": 3,
  "ports":{
    "http": 8520,
    "grpc_tls": 8523,
    "dns": 8620,
    "server": 8320,
    "serf_lan": 8321,
    "serf_wan": 8322
    }
}

10. 启动节点3的consul,运行命令 nohup /usr/bin/consul agent -config-file=/usr/bin/consul_1.15.1/node3/config.json -retry-join=192.168.5.47:8301 >/usr/bin/consul_1.15.1/node3/consul.log 2>&1 &

同样的 -retry-join=192.168.5.47:8301 是为了让本节点node3加入到node1的集群中

再运行命令 ps axu |grep consul  可以看到consul已经启动起来了,至此3个consul节点都开起来了,如下图

 11. 在浏览器上输入地址 http://192.168.5.47:8500,consul会自动转到 192.168.5.47:8500/ui/dc1/services 可以看到此时consul集群已经成功开起来了

运行命令 /usr/bin/consul members -http-addr=192.168.5.47:8500 可以查看集群内所有的节点

 点击左侧的Nodes,可以查看集群内所有的consul节点,而且node1被选举为leader节点

 12. 为了测试consul集群的高可用,也就是自动选举功能,我们模拟主节点异常断掉时的情况

然后在浏览器上输入地址 http://192.168.5.47:8510    因为我们关掉的是主节点,也就是192.168.5.47:8500的节点,UI肯定是打不开了,所以我们这次查看第二个node节点,也就是192.168.5.47:8510的地址。可以看到consul集群仍在,重新选举了node2作为新的leader

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

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

相关文章

mapreduce打包提交执行wordcount案例

文章目录 一、源代码1. WordCountMapper类2. WordCountReducer类3. WordCountDriver类4. pom.xml 二、相关操作和配置1. 项目打包2. 带参测试3. 上传打包后的jar包和测试文档4. 增大虚拟内存5.启动集群6.在hdfs上创建输入文件夹和上传测试文档Hello.txt7. 利用jar包在hdfs实现文…

TX-LCN:分布式事务框架

文章目录 概念LCN模式创建父工程parent创建子工程TxManager: 管理事务创建子工程: Eureka Server 注册中心创建子工程: book: 被远程调用方创建子工程: student: 远程调用方 TCC模式在lcn的基础上创建子工程: redistest在student 调用 redistest 概念 TX-LCN由两大模块组成&am…

设计模式:行为型模式 - 策略模式

文章目录 1.概述2.结构3.案例实现4.优缺点5.使用场景6.JDK源码解析 1.概述 先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。 作为一个程序猿,开发需要选择一款开发工具,当然…

基于SpringBoot医养中心管理系统

有需要请私信或看评论链接哦 可远程调试 SpringBoot医养中心管理系统 一 介绍 基于SpringBoot医养中心管理系统-登录角色分为用户和管理员。用户登录后可查看个人信息/家人情况,生活情况和收费标准。管理员登录后台可进行账号管理,健康管理&#xff0c…

如何在Android面试中脱颖而出,高频Android面试题解析,帮你快速拿到Offer

Android面试就“小技巧” 了解自己的技能水平:在面试前,确保你对所面试的职位的技能要求有足够的了解,并检查自己的技能水平是否符合这些要求。熟悉面试流程:了解面试过程中可能会遇到的问题,并为每个问题准备好回答。…

itop-3568开发板驱动学习笔记(20)中断线程化

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录 中断线程化简介中断线程化 API中断线程化实验 中断线程化简介 中断线程化也是中断下文的一种方式,与工作队列和软中断不同的是,中断线程只用于这个中断,当发生中断的时候…

Java基于POI动态合并单元格

Java使用poi导出excel 前言1.Excel和POI对象对应关系:2.POI创建Excel的步骤 一、引入依赖二、示例1.准备数据2.创建Excel工作簿对象3.给excel创建表头4.填充数据5.浏览器访问下载excel6.完整代码 前言 有个需求需要后端将数据导出为excel。并且excel中需要合并单元格…

linux安装java1.8

前言 安装java1.8是为了适配pyspark, 出现错误:pyspark.sql.utils.IllegalArgumentException: Unsupported class file major version 55\56\57\60 通过“java -version”看一下java版本,发现版本是java11,应该安装1.8才对 1、…

GaussDB工作级开发者认证—第二章GaussDB数据库应用程序开发指引

一. 驱动概述 GaussDB客户端接入认证,GaussDB支持以下三种认证方式:基于主机的认证口令认证SSL加密 二. JDBC接口介绍 1. JDBC概述 Java数据库连接(JDBC)是Java标准,它提供了从Java连接到关系数 据库的接口&#x…

C++智能指针shared_ptr详解

智能指针shared_ptr详解 一、简介二、底层原理2.1、引用计数2.2、shared_ptr的构造和析构2.3、shared_ptr的共享和拷贝2.4、循环引用问题 三、shared_ptr的使用3.1、创建一个shared_ptr3.2、共享一个shared_ptr3.3、使用删除器3.4、解除关联 四、使用示例总结 一、简介 C智能指…

软件测试拿了几个20K offer,分享一波面经

1、你的测试职业发展是什么?  测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年积累测试经验,按如何做好测试工程师的要点去要求自己,不…

MySQL笔记-函数,约束

本文标签 : 数据库函数 约束 目录 一、函数 1.字符串函数. 2.数值函数. 3.日期函数. 4.流程函数 二、约束 1.概述 2.约束演示 3.外键约束 1.概念 : 2. 实现: 3.删除/更新行为: 三、总结 一、函数 1.字符串函数. 实现: -- 函数演示 ---- 语法: select 函数(参数);-- …

跨域和网关通俗小白理解

跨域 跨域就是协议域名端口不同的服务器不能互相请求,企业级解决办法一般是通过Nginx反向代理实现 我们服务,线上都是通过S3服务器的Nginx反向代理解决跨域问题,因为Nginx和服务端沟通属于服务器之间的问题,不像浏览器有同源策略…

哇塞,炫云的智能优化太厉害啦!渲染费用竟然大幅降低了!

你有没有遇到过因为设置参数错误而导致云渲染费用突然飙升的情况呢?或者不知道自己设置的参数是否过高?现在,这些问题都可以轻松解决了,因为炫云的渲染质量功能非常智能和人性化。根据不同用户需求,它将参数优化分为五…

二进制部署nacos、docker部署nacos、k8s部署nacos、helm部署nacos

目录 前言Nacos支持三种部署模式官方文档二进制部署nacos(单机模式)安装jdk创建数据库及用户名下载安装包并解压导入nacos的表结构修改配置文件,启动nacos,登录nacos 二进制部署nacos(cluster模式)安装jdk&…

干货 | 什么是高频电解电容,它有普通电解电容有什么区别?

高频电解电容是一种常见的电容器,它在高频电路中发挥着重要的作用。与普通电解电容不同,高频电解电容能够更好地适应高频电路的需求,具有更高的频率响应和更低的ESR(等效串联电阻)。 电解电容重要性:电解电…

射频功率放大器在超声换能器声场特性校准中的应用

实验名称:基于水听器法的超声换能器声场特性校准技术的研究 研究方向:超声换能器 测试目的: 超声无损检测是无损检测领域重要的技术之一,而换能器作为超声检测中的关键部件,广泛应用于工业检测和医用超声成像领域。其性…

opencv配置安装

opencv配置安装 1、安装方式 https://blog.csdn.net/qq_45022687/article/details/120241068 根据这个网址的配置进行安装 2、解编译 mutex/thread等 似乎因为mingw的问题,#include 等直接引入线程无法直接引用,这导致了原有代码中直接使用mutex/thread的部分需要…

关于ARM核心板、一体板、底板的知识分享

嵌入式处理器模组,又称嵌入式核心板,或为CPU模组/核心板/SOM(System on Module),它是包含处理系统的核心电子部件的子电路板,集成了主芯片、存储器(eMMC/Nand Flash)、运行内存(DDR)…

太神奇了,1984 年的电脑也能跑 Chat-GPT

新加坡的逆向计算爱好者 Yeo Kheng Meng 发布了一个 “doschgpt” ChatGPT 客户端,这个客户端适用于上世纪八十年代的 MS-DOS 系统。 目前这个 DOS 系统的 ChatGPT 客户端已成功在 1984 年的 IBM 5155 便携式 PC 上运行,这台机子配备 4.77Mhz 主频的 In…