etcd集群搭建

etcd构建自身高可用集群主要有三种形式:

  • 静态发现: 预先已知etcd集群中有哪些节点,在启动时通过--initial-cluster参数直接指定好etcd的各个节点地址
  • etcd动态发现:

静态配置前提是在搭建集群之前已经提前知道各节点的信息,而实际应用中可能存在预先并不知道各节点ip的情况, 这时可通过已经搭建的etcd来辅助搭建新的etcd集群。通过已有的etcd集群作为数据交互点,然后在扩展新的集群时 实现通过已有集群进行服务发现的机制。比如官方提供的:discovery.etcd.io DNS动态发现: 通过DNS查询方式获取其他节点地址信息

环境准备

集群数量此次使用3台CentOS 7系列机器,其实就是7.3,7.4,7.5,为啥没用7.2呢,因为不兼容。

节点名称节点IP
master192.168.0.100
node1192.168.0.101
node2192.168.0.102

前提

搭建etcd集群时需要将防火墙关闭,否则节点间无法通信,使用以下命令关闭防火墙和禁止开机启动。

systemctl stop firewalld.service //关闭防火墙
systemctl disable firewalld.service //禁止开机启动

安装etcd

在CentOS上软件安装很简单,直接使用yum命令

yum install etcd -y

配置etcd集群

etcd的配置文件为:/etc/etcd/etcd.conf,三台环境的配置如下:

master的配置:

        

#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_NAME="master"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.100:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.100:2379,http://192.168.0.100:4001"
ETCD_INITIAL_CLUSTER="master=http://192.168.0.100:2380,node1=http://192.168.0.101:2380,node2=http://192.168.0.102:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

node1的配置:

#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_NAME="node1"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.101:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.101:2379,http://192.168.0.101:4001"
ETCD_INITIAL_CLUSTER="master=http://192.168.0.100:2380,node1=http://192.168.0.101:2380,node2=http://192.168.0.102:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

node2的配置:

#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_NAME="node2"
#
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.102:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.102:2379,http://192.168.0.102:4001"
ETCD_INITIAL_CLUSTER="master=http://192.168.0.100:2380,node1=http://192.168.0.101:2380,node2=http://192.168.0.102:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

各个配置的说明如下:

ETCD_DATA_DIR:数据存储目录
ETCD_LISTEN_PEER_URLS:与其他节点通信时的监听地址列表,通信协议可以是http、https
ETCD_LISTEN_CLIENT_URLS:与客户端通信时的监听地址列表
ETCD_NAME:节点名称
ETCD_INITIAL_ADVERTISE_PEER_URLS:节点在整个集群中的通信地址列表,可以理解为能与外部通信的ip端口
ETCD_ADVERTISE_CLIENT_URLS:告知集群中其他成员自己名下的客户端的地址列表
ETCD_INITIAL_CLUSTER:集群内所有成员的地址,这就是为什么称之为静态发现,因为所有成员的地址都必须配置
ETCD_INITIAL_CLUSTER_TOKEN:初始化集群口令,用于标识不同集群
ETCD_INITIAL_CLUSTER_STATE:初始化集群状态,new表示新建

测试集群

配置完后,在三台环境上启动etcd服务,

systemctl start etcd

然后查看集群节点信息,

[root@CentOS-7-3 ~]# etcdctl member list
9148b70e8c09dda7: name=master peerURLs=http://192.168.0.100:2380 clientURLs=http://192.168.0.100:2379,http://192.168.0.100:4001 isLeader=true
94da6adc7e389c7b: name=node1 peerURLs=http://192.168.0.101:2380 clientURLs=http://192.168.0.101:2379,http://192.168.0.101:4001 isLeader=false
cab12768ca3506a9: name=node2 peerURLs=http://192.168.0.102:2380 clientURLs=http://192.168.0.102:2379,http://192.168.0.102:4001 isLeader=false

接下来我们简单测试一下功能,在master上设置一个键值,在其余两台环境上查询该键值。

假设我们设置这样一个键值对 hello:world

[root@CentOS-7-3 ~]# etcdctl set  hello world
world[root@CentOS-7-4 ~]# etcdctl get hello
world[root@CentOS-7-5 ~]# etcdctl get hello
world

可见集群内的节点的数据是一致同步的。

注意事项
这里有两个坑要注意,

1、etcd2和etcd3不兼容,不兼容啊,也就是CentOS 7.2不能和7.3,7.4,7.5组建集群,偏偏我一开始就是这样搞的,坑得不要不要的。

2、更换节点时切记要把原来节点的数据目录删了,

rm -rf /var/lib/etcd/default.etcd/*

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

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

相关文章

抽奖小程序

import random import keyboard import timedef make_choice():while True:choice_selected random.choices([乾, 坤, 坎, 离, 兑, 震, 巽, 艮])[0]print(choice_selected, end\r)# time.sleep(0.1)if keyboard.is_pressed(enter):return choice_selectedif __name__ __main_…

基于JavaWeb+BS架构+SpringBoot+Vue校园一卡通系统的设计和实现

基于JavaWebBS架构SpringBootVue校园一卡通系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 第一章 概述 4 1.1 研究背景 4 1.2研究目的及意义 4 1.3国内外发展现状 4 1…

视觉SALM与激光SLAM的区别

前言: 这里比较一下视觉SLAM和激光SLAM的区别,仅比较其在算法层面上的一些不同,这里拿视觉SLAM算法:ORB-SLAM系列和激光SLAM算法:LOAM系列对比。 一:特征提取 1.ORB-SLAM(视觉SLAM&#xff0…

什么是跨境电商独立站?

你是否有过这样的经历:当你在网上浏览一些商品时,发现有些网站的域名很奇怪,比如 .com、.net、.co等,而且网站的界面和设计也和国内的电商平台不太一样。 你可能会好奇,这些网站是什么?它们是怎么做的&…

网络安全之你的浏览器记录真的安全吗?

密码是每个人最私密的东西,轻易是不会展示给他人的,那么我如何能知道你电脑上浏览器里保存的密码呢?浏览器是大家在网上冲浪最常用的软件,在登录一些网站填写账号密码后,浏览器为了方便大家使用,会提示是否…

2.4G SOC无线收发芯片:XL2401D 产品介绍

XL2401D芯片是工作在2.400~2.483GHz世界通用ISM频段,集成微控制器的的SOC无线收发芯片。芯片集成射频收发机、频率收生器、晶体振荡器、调制解调器等功能模块,并且支持对多组网和带 ACK的通信模式。发射输出功率、工作频道以及通信数据率均可配置。芯片内含以EPROM作…

unity小程序websocket:nginx配置https (wss)转http (ws)及其他问题解决

目录 前言 实际运用场景 处理流程如下 nginx配置ssl和wss 配置过程中遇到的问题 1、无法连接服务器 2、通过IP可以访问,域名却不行 问题描述 解决 3、如何判断该域名是否备案了 前言 为了服务器网络的通用性,我们在实现移动端的游戏转微信小程序…

Python教程38:使用turtle画动态粒子爱心+文字爱心

Turtle库是Python语言中的一个标准库,它提供了一种有趣的方式来介绍编程和图形绘制的基本概念。Turtle库使用一个虚拟的“海龟”来绘制图形。你可以控制海龟的方向、速度和位置,通过向前移动、向左转或向右转等命令来绘制线条、圆弧多边形等图形。 -----…

Java 反射(一)

反射 1.反射的介绍 1.反射机制允话程序在执行期间借助于Refelction API取得任何类的信息(比如成员变量,构造器,成员方法等)并能操作对象的属性及方法,反射在设计模式和框架底层都会用到 2.加载完类之后,在…

API调试怎么做?Apipost快速上手

前言 Apipost是一款支持 RESTful API、SOAP API、GraphQL API等多种API类型,支持 HTTPS、WebSocket、gRPC多种通信协议的API调试工具。除此之外,Apipost 还提供了自动化测试、团队协作、等多种功能。这些丰富的功能简化了工作流程,提高了研发…

mybatis注意事项/异常

一:mybatis Plus自动拼装sql异常 Error Sql/mybatisplus框架方法失效 Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: " 常见场景: 1.1XML使用了跟框架同名方法,例如selectLis…

CodeWave智能开发平台--03--目标:应用创建--08联系人管理

摘要 本文是网易数帆CodeWave智能开发平台系列的第11篇,主要介绍了基于CodeWave平台文档的新手入门进行学习,实现一个完整的应用,本文主要完成08联系人管理 CodeWave智能开发平台的11次接触 CodeWave参考资源 网易数帆CodeWave开发者社区…

MongoDB:count结果不准确的原因与解决方法

教训:MongoDB在分片后的集合上进行db.collection.count()操作时,出现结果不准确的现象,需要采用聚合的方法获取集合的count结果 使用该命令依然会出现统计信息不准确的现象,通过谷歌发现,官方文档:(https://docs.mongo…

【VRTK】【Unity】【VR开发】Linear Drives

课程配套学习项目源码资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概述】 前面一篇讨论了角度运动机制,本篇讨论线性运动机制。和角度运动机制类似,线性运动机制提供了更为仿真的互动机制。也分为基于物理的和不基于…

doris部署

doris-2.0.1.1部署安装 一、下载doris安装包二、解压到/data下,修改名称三、修改fe配置文件四、启动doris-fe五、验证doris-fe六、修改be配置文件七、启动doris-be八、mysql中连接be,在Doris中添加后端节点九、设置密码 一、下载doris安装包 wget https…

ArrayBlockingQueue原理探究

类图结构 同样,为了能从全局一览ArrayBlockingQueue的内部构造,先来看它的类图。 ArrayBlockingQueue的内部有一个数组items,用来存放队列元素,putindex变量表示入队元素下标,takelndex是出队下标,count统计队列元素个…

雅意2.0:打造专为中文优化的300亿参数多语言模型

前言 雅意2.0,作为一款专注于中文语境的开源大型语言模型,其在多语言处理方面的能力尤为突出。该模型不仅具有300亿参数规模的庞大体量,还在多个关键领域取得了显著的技术突破。 Huggingface模型下载:https://huggingface.co/wen…

大前端nestjs入门教程系列(四):如何nestjs整合mysql数据库

经过前面的几篇文章,想必大家已经对nestjs有了基础的了解,那么这篇文章就带大家玩玩数据库,学会了这篇,就离大前端又进了一步 Nest与数据库无关,使你可以轻松地与任何 SQL 或 NoSQL 数据库集成。 根据你的喜好&#xf…

JavaScript防御性编程

简单聊一下防御性编程,初衷是开发人员为了防止自己被裁员,而将代码编写为只有自己能看懂。如何只有自己能看懂?方法多种多样,但不能将简单问题复杂化,比如:编写一堆无效的逻辑关系,或将业务复杂…

【面试高频算法解析】算法练习3 双指针

前言 本专栏旨在通过分类学习算法,使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目,帮助您深度理解每种算法,避免出现刷了很多算法题,还是一知半解的状态 专栏导航 二分查找回溯(Backtracking&…