Etcd实战(一)-部署etcd集群

1 概述

etcd是一个高可用的分布式键值存储系统,是CoreOS(现在隶属于Red Hat)公司开发的一个开源项目。它提供了一个简单的接口来存储和检索键值对数据,并使用Raft协议实现了分布式一致性。etcd广泛应用于Docker、Kubernetes等分布式系统中,用于存储配置信息、服务发现、领导者选举等方面。

2 etcd高可用集群部署

官方文档:https://etcd.io/docs/v3.5/​​​​​​

安装包:https://github.com/etcd-io/etcd/releases/download

2.1 服务器配置

主机名ip地址cpu数量内存数量
etcd-110.220.43.20624
etcd-210.220.43.20724
etcd-310.220.43.20824

2.2 安装部署

2.2.1 下载解压

$ wget https://github.com/etcd-io/etcd/releases/download/v3.4.27/etcd-v3.4.27-linux-amd64.tar.gz
$ tar xvf etcd-v3.4.27-linux-amd64.tar.gz
$ mv etcd-v3.4.27-linux-amd64/etcd* /usr/local/bin/ ##复制etcd命令文件
$ mkdir -p /var/lib/etcd/   ##创建数据存放目录
$ mkdir -p /etc/etcd ##创建配置文件存放目录

 三个节点设置etcd配置文件,三个节点的防火墙要放行2379及2380端口

2.2.2 设置集群配置

#etcd节点1
$ cat /etc/etcd/etcd.conf
ETCD_NAME=etcd-1
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://10.220.43.206:2380"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://10.220.43.206:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.220.43.206:2380"
ETCD_INITIAL_CLUSTER="etcd-1=http://10.220.43.206:2380,etcd-2=http://10.220.43.207:2380,etcd-3=http://10.220.43.208:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="singless"
ETCD_ADVERTISE_CLIENT_URLS="http://10.220.43.206:2379"#etcd节点2
$ cat /etc/etcd/etcd.conf
ETCD_NAME=etcd-2
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://10.220.43.207:2380"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://10.220.43.207:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.220.43.207:2380"
ETCD_INITIAL_CLUSTER="etcd-2=http://10.220.43.206:2380,etcd-2=http://10.220.43.207:2380,etcd-3=http://10.220.43.208:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="singless"
ETCD_ADVERTISE_CLIENT_URLS="http://10.220.43.207:2379"#etcd节点3
$ cat /etc/etcd/etcd.conf
ETCD_NAME=etcd-3
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://10.220.43.208:2380"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://10.220.43.208:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.220.43.207:2380"
ETCD_INITIAL_CLUSTER="etcd-2=http://10.220.43.206:2380,etcd-2=http://10.220.43.207:2380,etcd-3=http://10.220.43.208:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="singless"
ETCD_ADVERTISE_CLIENT_URLS="http://10.220.43.208:2379"

参数:

  • ETCD_NAME:指定ETCD节点的名称。每个节点在集群中应具有唯一的名称,以便进行识别和通信。
  • ETCD_DATA_DIR:指定ETCD存储数据的目录路径。ETCD使用此目录来持久化存储数据。
  • ETCD_LISTEN_PEER_URLS:指定ETCD节点监听对等节点连接的URL。对等URL用于节点之间的通信和数据同步。
  • ETCD_LISTEN_CLIENT_URLS:指定ETCD节点监听客户端连接的URL列表。客户端URL用于与ETCD集群进行交互,例如执行读取或写入操作。
  • ETCD_INITIAL_ADVERTISE_PEER_URLS:指定ETCD节点初始公告对等节点连接的URL。当新节点加入集群时,将向其他节点宣告自己的URL,以便其他节点可以找到并连接到它。
  • ETCD_INITIAL_CLUSTER:指定ETCD集群的初始成员列表及其对等节点连接URL。每个成员由名称和对等节点连接URL组成,用逗号分隔。在启动集群时,指定初始成员列表用于插入新节点。
  • ETCD_INITIAL_CLUSTER_STATE:指定ETCD集群的初始状态。可选值为"new"和"existing"。"new"表示创建一个新的集群,"existing"表示已经存在的集群。
  • ETCD_INITIAL_CLUSTER_TOKEN:指定ETCD集群的初始令牌。所有成员在启动时应使用相同的令牌,以便它们可以识别和加入相同的集群。
  • ETCD_ADVERTISE_CLIENT_URLS:指定ETCD节点公告给客户端的连接URL。客户端连接URL用于向应用程序或工具公开ETCD节点,以便进行读取和写入操作。

2.2.3 配置系统服务

配置systemd管理etcd,三个节点配置相同

$ cat /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target[Service]
User=root
Type=notify
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000[Install]
WantedBy=multi-user.target

2.2.4 启动服务

三个节点上启动服务

$ systemctl enable etcd
$ systemctl start etcd

2.2.5 异常问题处理

报错:

check file permission: directory "/var/lib/etcd" exist, but the permission is "drwxr-xr-x". The recommended permission is "-rwx------" to prevent possible unprivileged access to the data.

解决方案:

$ chmod 700 /var/lib/etcd

2.3 验证

2.3.1 查看集群成员

$ etcdctl member list
3fccfd9e945d331b, started, etcd-3, http://10.220.43.208:2380, http://10.220.43.208:2379, false
5d19435c38496e2c, started, etcd-2, http://10.220.43.207:2380, http://10.220.43.207:2379, false
9f23d9fd9d308b96, started, etcd-1, http://10.220.43.206:2380, http://10.220.43.206:2379, false

2.3.2  查看leader节点

$ etcdctl -w table endpoint status --endpoints=10.220.43.206:2379,10.220.43.207:2379,10.220.43.208:2379 
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|      ENDPOINT      |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| 10.220.43.206:2379 | 9f23d9fd9d308b96 |  3.4.27 |   20 kB |      true |      false |        96 |          9 |                  9 |        |
| 10.220.43.207:2379 | 5d19435c38496e2c |  3.4.27 |   20 kB |     false |      false |        96 |          9 |                  9 |        |
| 10.220.43.208:2379 | 3fccfd9e945d331b |  3.4.27 |   16 kB |     false |      false |        96 |          9 |                  9 |        |
+--------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

 结果显示etcd-1是leader节点。

2.3.3 查看集群成员的健康状态

$ etcdctl -w table endpoint health --endpoints=10.220.43.206:2379,10.220.43.207:2379,10.220.43.208:2379 
+--------------------+--------+------------+-------+
|      ENDPOINT      | HEALTH |    TOOK    | ERROR |
+--------------------+--------+------------+-------+
| 10.220.43.206:2379 |   true | 1.740078ms |       |
| 10.220.43.207:2379 |   true | 2.115924ms |       |
| 10.220.43.208:2379 |   true | 2.174842ms |       |
+--------------------+--------+------------+-------+

3 某个节点异常如何处理

  • 使用命令移除节点
  • 删除异常节点数据目录
  • 重新将节点添加至集群

3.1 移除节点

假设etcd3出现了异常。

etcd-1节点操作:

$ etcdctl member list
3fccfd9e945d331b, started, etcd-3, http://10.220.43.208:2380, http://10.220.43.208:2379, false
5d19435c38496e2c, started, etcd-2, http://10.220.43.207:2380, http://10.220.43.207:2379, false
9f23d9fd9d308b96, started, etcd-1, http://10.220.43.206:2380, http://10.220.43.206:2379, false
$ etcdctl member remove 3fccfd9e945d331b
Member 3fccfd9e945d331b removed from cluster cee4a9895463ca7d
$ etcdctl member list
5d19435c38496e2c, started, etcd-2, http://10.220.43.207:2380, http://10.220.43.207:2379, false
9f23d9fd9d308b96, started, etcd-1, http://10.220.43.206:2380, http://10.220.43.206:2379, false

 3.2 删除异常节点的数据目录

etcd-3节点操作:

$ rm -rf /var/lib/etcd
cat /etc/etcd/etcd.conf 
ETCD_NAME=etcd-3
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://10.220.43.208:2380"
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://10.220.43.208:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.220.43.208:2380"
ETCD_INITIAL_CLUSTER="etcd-1=http://10.220.43.206:2380,etcd-2=http://10.220.43.207:2380,etcd-3=http://10.220.43.208:2380"
ETCD_INITIAL_CLUSTER_STATE="existing" ##修改为existing
ETCD_INITIAL_CLUSTER_TOKEN="singless"
ETCD_ADVERTISE_CLIENT_URLS="http://10.220.43.208:2379"

3.3 将节点添加至集群

etcd-1节点操作:

$ etcdctl member add etcd-3 --peer-urls=http://10.220.43.208:2380
Member 765137d296bf17e7 added to cluster cee4a9895463ca7dETCD_NAME="etcd-3"
ETCD_INITIAL_CLUSTER="etcd-2=http://10.220.43.207:2380,etcd-3=http://10.220.43.208:2380,etcd-1=http://10.220.43.206:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.220.43.208:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"
$ etcdctl member list
5d19435c38496e2c, started, etcd-2, http://10.220.43.207:2380, http://10.220.43.207:2379, false
765137d296bf17e7, unstarted, , http://10.220.43.208:2380, , false
9f23d9fd9d308b96, started, etcd-1, http://10.220.43.206:2380, http://10.220.43.206:2379, false

etcd-3启动etcd。 

$ systemctl start etcd

etcd-1节点操作:

$ etcdctl member list
5d19435c38496e2c, started, etcd-2, http://10.220.43.207:2380, http://10.220.43.207:2379, false
765137d296bf17e7, started, etcd-3, http://10.220.43.208:2380, http://10.220.43.208:2379, false
9f23d9fd9d308b96, started, etcd-1, http://10.220.43.206:2380, http://10.220.43.206:2379, false

4 etcdctl增删改查操作

https://github.com/etcd-io/etcd/tree/main/etcdctl

etcdctl 是用于与 ETCD 进行交互的命令行工具,它提供了一系列命令和选项,用于检索、设置、修改和删除 ETCD 中的数据。

4.1 etcd的数据存储模型

前面介绍过,etcd是一个分布式的键值存储系统。etcd在键的组织上采用了层次化的空间结构,类似于文件系统中目录的概念。但是并不存在目录的那种层级关系。

类似于文件系统中的目录(文件夹)结构,ETCD的命名空间允许以键的层次结构来组织数据,并且每个键可以唯一地标识一个节点。顶层节点被称为根节点,然后可以在根节点下创建子节点,子节点又可以包含更多子节点,以此类推。这种层次化的结构可以用于将数据进行分类、分类和组织。

例如,假设我们有以下目录结构:

  • /singless/test
  • /singless/test/gender

在上述示例中/singless/test和/singless/test/gender,有类似于目录一样的共同的索引前缀/和/singless,但是并不存在目录的那种层级关系。它们都可以作为一个key存储相应的value。

4.2 增和改

增加数据和修改数据需要用到put命令进行操作

$ etcdctl put /singless/test/gender male ##创建一个键/singless/test/gender,值为male
OK
$ etcdctl put /singless/test true ##创建一个键/singless/test,值为test
OK

4.3 查询操作

查询操作需要使用到get参数

$ etcdctl get /singless/test/gender ##根据具体的key查询对应的值
/singless/test/gender
male
$ etcdctl get --prefix / ##根据索引前缀查询,这里查询的是以/为前缀的key、value,所以能看到所有的键值对
/singless/test
true
/singless/test/gender
male
$ etcdctl put /singless/test false ##使用put修改键/singless/test的value
OK
$ etcdctl get /singless/test
/singless/test
false

4.4 删除操作

删除操作使用del命令

$ etcdctl del /singless/test ##可以指定key进行删除
1
$ etcdctl get --prefix /
/singless/test/gender
male
$ etcdctl del --prefix / ##也可以执行索引前缀进行删除
1
$ etcdctl get --prefix /

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

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

相关文章

《使用ThinkPHP6开发项目》 - 创建控制器

《使用ThinkPHP6开发项目》 - 安装ThinkPHP框架-CSDN博客 《使用ThinkPHP6开发项目》 - 设置项目环境变量-CSDN博客 《使用ThinkPHP6开发项目》 - 项目使用多应用开发-CSDN博客 《使用ThinkPHP6开发项目》 - 创建应用-CSDN博客 使用ThinkPHP6创建控制器,开始项…

css 纯样式实现绘出进度条

效果: css代码: .bar{height: 14px;width: 100%;font-size: 10px;margin-top: 5px;background-color: #f5f5f5;}.bar::before{display: block;counter-reset: progress var(--precent); content: ;width: calc(1% * var(--precent));color: #fff;height:…

String类详解

String类详解 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 解密String类:探秘Java中的字符串魔法 在Java的世界里,String类犹如一位魔法…

【C++进阶篇】二叉搜索数

目录 前言: 以后我们要学map,set,AVL,红黑数所以必须要有二叉搜索数做铺垫 1、二叉搜索树概念 2.二叉搜索树操作 1.二叉搜索树的查找 a、从根开始比较,查找,比根大则往右边走查找,比根小则…

SpringBoot 实现动态切换数据源

最近在做业务需求时,需要从不同的数据库中获取数据然后写入到当前数据库中,因此涉及到切换数据源问题。本来想着使用Mybatis-plus中提供的动态数据源SpringBoot的starter:dynamic-datasource-spring-boot-starter来实现。 结果引入后发现由于…

IO零拷贝

在介绍零拷贝之前我们先看看传统的 Java 网络 IO 编程是怎样的。 下面代码展示了一个典型的 Java 网络程序。 File file new File("index.jsp");RandomAccessFile rdf new RandomAccessFile(file, "rw");byte[] arr new byte[(int) file.length()];rdf…

Tcl语言语法精炼总结

一、置换符号 1.变量置换 $ TCl解释器会将认为$后面为变量名,将变量名置换成它的值 2.命令置换 [] []内是一个独立的TCL语句 3.反斜杠置换 \ 换行符、空格、[、$等被TCL解释器当作特殊符号处理。加上反斜杠后变成普通字符 \t TAB \n 换行符 4.双引号 “” “…

鸿蒙开发之页面与组件生命周期

一、页面间的跳转 创建文件的时候记得选择创建page文件,这样就可以在main->resources->profile->main_pages.json中自动形成页面对应的路由了。如果创建的时候你选择了ArkTS文件,那么需要手动修改main_pages.json文件中,添加相应的…

关于大模型ChatGLM3-6B在CPU下运行

最近在调研市场上语言大模型,为公司的产品上虚拟人的推出做准备。各厂提供语言模型都很丰富,使用上也很方便,有API接口可以调用。但唯一的不足,对于提供给百万用户使用的产品,相比价格都比较贵。所以对ChatGLM3-6B的使…

基于pandoraNext使用chatgpt4

1.登陆GitHub 获取pandoraNext项目GitHub - pandora-next/deploy: Pandora Cloud Pandora Server Shared Chat BackendAPI Proxy Chat2API Signup Free PandoraNext. New GPTs(Gizmo) UI, All in one! 在release中选择相应版本操作系统的安装包进行下载 2.获取license_…

分享一个很方便查看所有目录的文件浏览器

分享一个很方便查看所有目录的文件浏览器RootExplorer.apk 链接:文件分享 密码:zxhi33 前提是要设备root过,这样可以方便查看整个设备所有目录的各种文件。 最近客户想要定制Launcher3桌面各种小部件Widget 时间、天气、日历、新闻。 按照客…

最新鸿蒙HarmonyOS4.0开发登陆的界面1

下载deveco-studio 说明一下,本人只是学习中,现在只是拿着vue及uniapp的经验在一点一点的折腾,不过现在看来,鸿蒙入门并不是很难。也许是自己没有深入下去。 https://developer.harmonyos.com/cn/develop/deveco-studio#download…

docker使用详解

介绍 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。 Docker基于轻量级虚拟化技术,整个项目基于Go语言开…

Mybatis源码解析6:Mapper执行流程2-三个Handler

Mybatis源码解析6:Mapper执行流程2-三个Handler 1.项目结构2. 源码分析2.1 StatementHandler分析 BaseStatementHandler#prepare2.2 ParameterHandler分析 DefaultParameterHandler#setParameters2.3 ResultSetHandler分析 1.项目结构 2. 源码分析 之前已经对 Sim…

Scrapy爬虫学习

Scrapy爬虫学习一 1 scrapy框架1.1 scrapy 是什么1.2 安装scrapy 2 scrapy的使用2.1创建scrapy项目2.2 创建爬虫文件2.3爬虫文件的介绍2.4 运行爬虫文件 3 爬取当当网前十页数据3.1 dang.py:爬虫的主文件3.2 items.py 定义数据结构3.3 pipelines.py 管道3.4 执行命令…

总结了人工智能领域,能源领域,电气领域比较好中的一些sci期刊!!仅供参考

文章目录 前言一、总结了人工智能领域,能源领域,电气领域比较好中的一些sci期刊 总结 前言 期刊查询网站: https://www.letpub.com.cn/index.php?pagejournalapp&viewsearch 链接: 点我跳转期刊查询网站 一、总结了人工智能领域&#…

React 列表页实现

一、介绍 列表页是常用的功能,从后端获取列表数据,刷新到页面上。开发列表页需要考虑以下技术要点:1.如何翻页;2.如何进行内容搜索;3.何时进行页面刷新。 二、使用教程 1.user-service 根据用户id获取用户列表,返回…

【Spring】02 Bean 的命名

文章目录 1. 定义2. 使用优势3. 如何命名4. 注解驱动5. 最佳实践1)使用明确的业务名词2)避免缩写和首字母缩略词2)不要过度使用别名 结语 在 Spring 框架中,Bean 是应用程序中的主要组件,负责承载和管理应用的核心功能…

【python-wrf】绘制wrf中的土地利用报错内容及其解决方法

从该代码处绘制wrf中的土地利用报错内容及其解决方法 1.报错内容: 微信公众平台 (qq.com)https://mp.weixin.qq.com/s/Cn0vhvfroVADPnT237LXNw --------------------------------------------------------------------------- AttributeError …

14--常用类和基础API--04

1、Arrays类 1.1 Arrays类概述 java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来非常简单。简单来说:Arrays这个是专门用来操作数组相关的工具类 1.2 Arrays类常用方法 public static…