etcd单机部署和集群部署

news2024/12/27 0:48:23

1、etcd单实例部署

对于平常的学习,其实搭建一个单机节点是够了的。接下来就讲讲怎么搭建单机节点。

本次部署是在 centos7 系统,cpu 为amd64 上面进行的。

部署是直接使用官方编译好的二进制文件,大家也可以直接看 ectd-releases 界面选择需要的版本,进行部署。

部署步骤如下:
1、下载官方编译好的 二进制文件。大家可以根据自己的系统和cpu架构进行选择。
cd /opt

wget https://github.com/etcd-io/etcd/releases/download/v3.5.8/etcd-v3.5.8-linux-amd64.tar.gz
2、解压下载好的文件
tar -zxvf etcd-v3.5.8-linux-amd64.tar.gz
3、启动 etcd 服务
cd etcd-v3.5.8-linux-amd64

# 启动方式一:前台启动
./etcd

# 启动方式二:后台启动,日志文件位置可随意选择,有权限读写就可以了
nohup ./etcd > /root/etcd.log 2>&1 &

启动的 etcd 进程默认监听的是 2379端口。我们可以使用 etcdctl 来与 etcd server进行交互。下面展示一个简单的使用案例:

./etcdctl --endpoints=localhost:2379 put foo bar
./etcdctl --endpoints=localhost:2379 get foo

我们也可以将 etcdctl 拷贝到 /usr/local/bin 下面,这样使用 etcdctl 时,就不用想上面这样,必须指定 etcdctl 的位置了。

上面启动 etcd 进程的方式比较简单,大家也可以使用 systemd 来进行管理,这样可以实现开启自启了。

编写 etcd.service 文件:
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Server
After=network.target network-online.target
Wants=network-online.target
 
[Service]
Type=notify
ExecStart=/opt/etcd-v3.5.8-linux-amd64/etcd 
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
 
[Install]
WantedBy=multi-user.target
EOF

启动 etcd 服务以及设置为开机自启

# 重载脚本文件
systemctl daemon-reload

# 启动 etcd 服务
systemctl start etcd.service

# 设置 etcd 服务为开机自启
systemctl enable etcd.service

# 停止 etcd 服务
systemctl stop etcd.service

上面就是 etcd 的单实例部署方式了。

2、etcd集群部署

在生产环境中,为了整个集群的高可用,etcd 正常都会集群部署,避免单点故障。接下来我们一起学习如何进行 etcd 集群部署。引导 etcd 集群的启动有以下三种机制:

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

静态启动 etcd 集群要求每个成员都知道集群中的另一个成员,也就是在配置文件中写死每个集群成员的地址。 在实际情况下,群集成员的 IP 可能会提前未知。在这种情况下,我们可以使用 etcd 官方提供的动态发现功能来帮助引导 etcd 群集。

接下来我们看一看静态启动、etcd 动态发现是如何部署的,DNS 发现的部署方式,大家可以看看文章最后的参考连接,讲解得比较详细。

哈哈,因为 etcd 的部署方式,相对来说还是比较容易的,所以这里偷个懒,大家想看怎么集群部署的话,看文章最后的参考连接。

2.1 单机多实例部署

平常大家自己搭建着玩的话,可以使用此方式来部署一个单机多实例的 etcd 集群,这样管理维护都比较方便。

想要在一台机器上部署 etcd 集群,我们可以借助 goreman 这个工具,goreman 是一个 Go 语言编写的多进程管理工具,是对 Ruby 下广泛使用的 foreman 的重写(foreman 原作者也实现了一个 Go 版本:forego,不过没有 goreman 好用)。

使用goreman 部署集群,需要我们先按照 go的环境,按照好 go 的环境后,执行下面的命令:

go install github.com/mattn/goreman@latest

注意,上面执行的命令,会将 goreman 按照在 $GOPATH 下面,GOPATH 可以通过 go env 查看。如果执行上面命令后,使用 goreman 命令提示找不到命令,多半是没有将 GOPATH 加入到环境变量中去。
简单的方式 vi /etc/profile。加入下面两句话,然后报错即可。

export GOPATH= 自己的实际路径
export PATH=$PATH:$GOPATH/bin

在这里插入图片描述
执行下面步骤之前,需要先将 官方文档 编译好的 etcd 二进制文件下载解压到本机,然后将etcd、etcdctl这两个可执行文件拷贝到 /usr/local/bin/下面去。

etcd_cluster_procfile 脚本如下:

etcd1: etcd --name infra1 --listen-client-urls http://127.0.0.1:12379 --advertise-client-urls http://127.0.0.1:12379 --listen-peer-urls http://127.0.0.1:12380 --initial-advertise-peer-urls http://127.0.0.1:12380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr

etcd2: etcd --name infra2 --listen-client-urls http://127.0.0.1:22379 --advertise-client-urls http://127.0.0.1:22379 --listen-peer-urls http://127.0.0.1:22380 --initial-advertise-peer-urls http://127.0.0.1:22380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr

etcd3: etcd --name infra3 --listen-client-urls http://127.0.0.1:32379 --advertise-client-urls http://127.0.0.1:32379 --listen-peer-urls http://127.0.0.1:32380 --initial-advertise-peer-urls http://127.0.0.1:32380 --initial-cluster-token etcd-cluster-1 --initial-cluster 'infra1=http://127.0.0.1:12380,infra2=http://127.0.0.1:22380,infra3=http://127.0.0.1:32380' --initial-cluster-state new --enable-pprof --logger=zap --log-outputs=stderr

配置项说明:

在这里插入图片描述

注意上面的脚本,etcd 命令执行时需要根据本地实际的安装地址进行配置。使用下面的命令启动 etcd 集群。

goreman -f /opt/etcd_cluster_procfile  start

使用如上的命令启动启动 etcd 集群,启动完成之后查看集群内的成员。

$ etcdctl --endpoints=http://localhost:22379  member list

8211f1d0f64f3269, started, infra1, http://127.0.0.1:12380, http://127.0.0.1:12379, false
91bc3c398fb3c146, started, infra2, http://127.0.0.1:22380, http://127.0.0.1:22379, false
fd422379fda50e48, started, infra3, http://127.0.0.1:32380, http://127.0.0.1:32379, false

上面我们使用单机部署了多个etcd实例,模拟一个etcd集群。我们在启动集群的时候,已经知道了各个实例的地址,但是在实际环境中,集群成员的 ip 可能不会提前知道。这时候就需要采用动态发现的机制。

2.2 动态发现启动 etcd 集群

下面的内容全部来自 文章最后的参考连接,如有侵权,请联系删除,谢谢。
参考连接还有 docker 部署以及 dns 部署,大家感兴趣可以去看看。

如前面所述,在实际环境中,集群成员的 ip 可能不会提前知道。在这种情况下,需要使用自动发现来引导 etcd 集群,而不是指定静态配置,这个过程被称为发现。我们启动三个 etcd,具体对应如下:

在这里插入图片描述

2.2.1 协议的原理
Discovery service protocol 帮助新的 etcd 成员使用共享 URL 在集群引导阶段发现所有其他成员。

该协议使用新的发现令牌来引导一个唯一的 etcd 集群。一个发现令牌只能代表一个 etcd 集群。只要此令牌上的发现协议启动,即使它中途失败,也不能用于引导另一个 etcd 集群。

2.2.2 协议的工作流程

Discovery protocol 使用内部 etcd 集群来协调新集群的引导程序。首先,所有新成员都与发现服务交互,并帮助生成预期的成员列表。之后,每个新成员使用此列表引导其服务器,该列表执行与 --initial-cluster 标志相同的功能,即设置所有集群的成员信息。

注意:

Discovery service protocol仅用于集群引导阶段,不能用于运行时重新配置或集群 监视。

2.2.3 使用公共发现服务部署集群

当我们本地没有可用的 etcd 集群,etcd 官网提供了一个可以公网访问的 etcd 存储地址。我们可以通过如下命令得到 etcd 服务的目录,并把它作为 --discovery 参数使用。

公共发现服务 discovery.etcd.io 以相同的方式工作,并提供针对过多请求的保护。公共发现服务在其上仍然使用 etcd 群集作为数据存储。

1、创建集群发现
# 使用公共etcd发现服务
$ curl http://discovery.etcd.io/new?size=3
# 生成的url
http://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de
2、部署前准备工作

所有节点均需要安装etcd。以及创建需要的目录。

#创建单独的etcd数据目录
mkdir ‐p /opt/etcd/data
3、以动态发现方式启动集群

每个成员必须指定不同的名称标志,否则发现将因重复的名称而失败

etcd 发现模式下,启动 etcd 的命令如下:

# etcd1 启动
$ /opt/etcd/bin/etcd  --name etcd1 --initial-advertise-peer-urls http://192.168.202.128:2380 \
  --listen-peer-urls http://192.168.202.128:2380 \
  --data-dir /opt/etcd/data \
  --listen-client-urls http://192.168.202.128:2379,http://127.0.0.1:2379 \
  --advertise-client-urls http://192.168.202.128:2379 \
  --discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de

# etcd2 启动
 /opt/etcd/bin/etcd  --name etcd2 --initial-advertise-peer-urls http://192.168.202.129:2380 \
  --listen-peer-urls http://192.168.202.129:2380 \
  --data-dir /opt/etcd/data \
  --listen-client-urls http://192.168.202.129:2379,http://127.0.0.1:2379 \
  --advertise-client-urls http://192.168.202.129:2379 \
  --discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de

# etcd3 启动
 /opt/etcd/bin/etcd  --name etcd3 --initial-advertise-peer-urls http://192.168.202.130:2380 \
    --listen-peer-urls http://192.168.202.130:2380 \
    --data-dir /opt/etcd/data \
    --listen-client-urls http://192.168.202.130:2379,http://127.0.0.1:2379 \
    --advertise-client-urls http://192.168.202.130:2379 \
    --discovery https://discovery.etcd.io/3e86b59982e49066c5d813af1c2e2579cbf573de

需要注意的是,在我们完成了集群的初始化后,这些信息就失去了作用。当需要增加节点时,需要使用 etcdctl 进行操作。为了安全,每次启动新 etcd 集群时,都使用新的 discovery token 进行注册。另外,如果初始化时启动的节点超过了指定的数量,多余的节点会自动转化为 Proxy 模式的 etcd。

4、结果验证

集群启动好之后,进行验证,我们看一下集群的成员:

$ /opt/etcd/bin/etcdctl member list

40e2ac06ca1674a7, started, etcd3, http://192.168.202.130:2380, http://192.168.202.130:2379, false
c532c5cedfe84d3c, started, etcd1, http://192.168.202.128:2380, http://192.168.202.128:2379, false
db75d3022049742a, started, etcd2, http://192.168.202.129:2380, http://192.168.202.129:2379, false

结果符合预期,再看下节点的健康状态:

$ /opt/etcd/bin/etcdctl  --endpoints="http://192.168.202.128:2379,http://192.168.202.129:2379,http://192.168.202.130:2379"  endpoint  health
  
# 结果如下
http://192.168.202.128:2379 is healthy: successfully committed proposal: took = 3.157068ms
http://192.168.202.130:2379 is healthy: successfully committed proposal: took = 3.300984ms
http://192.168.202.129:2379 is healthy: successfully committed proposal: took = 3.263923ms

可以看到,集群中的三个节点都是健康的正常状态。以动态发现方式启动集群成功。

上面是使用公共服务来做服务发现的,如果我们有自己搭建好的etcd,可以使用自建的etcd作为服务发现,搭建集群:

获取令牌时,必须指定群集大小。 发现服务使用该大小来了解何时发现了最初将组成集群的所有成员。

curl -X PUT http://10.0.10.10:2379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83/_config/size -d value=3

我们需要把该 url 地址 http://10.0.10.10:2379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83 作为 --discovery 参数来启动 etcd。

节点会自动使用 http://10.0.10.10:2379/v2/keys/discovery/6c007a14875d53d9bf0ef5a6fc0257c817f0fb83 目录进行 etcd 的注册和发现服务。

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

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

相关文章

linux 环境下 分布式文件搭建fastDFS

1.软件信息 地址&#xff1a;happyfish100 (YuQing) GitHub 1.fastdfs-master.zip 2.fastdfs-nginx-module-master.zip 3.libfastcommon-master.zip 4.libserverframe-master.zip yum install make cmake gcc gcc-c perl 2.安装libfastcommon unzip libfastcommon-mast…

CPU利用率使用教程

本文主要参考&#xff1a; 一文让你学到 nmon最详尽的用法 Linux性能监控命令_nmon 安装与使用 如果你是在Ubuntu上安装nmon&#xff0c;使用&#xff1a; apt install nmon安装好后&#xff0c;直接运行 $:nmon #运行如果是后台抓数据&#xff1a; -f 参数: 生成文件,文件…

北京玻色量子携手赛氪网举办长三角高校数学建模竞赛巡回讲座

2024年5月13日下午&#xff0c;一场聚焦数学建模与量子计算前沿的讲座在中国计量大学隆重举行。此次讲座作为第四届长三角高校数学建模竞赛的巡回宣讲活动之一&#xff0c;由北京玻色量子科技有限公司与竞赛组委会成员赛氪网共同举办&#xff0c;旨在向广大师生介绍量子计算的应…

企业如何利用美国多IP服务器来提升网站的安全性?

企业如何利用美国多IP服务器来提升网站的安全性? 在当前网络环境下&#xff0c;网站安全性日益成为企业面临的重要挑战。为了有效应对各种潜在威胁&#xff0c;越来越多的企业选择利用美国多IP服务器来提升其网站的安全性。这种服务器配置能够通过一系列策略来增加网站的安全…

滚珠螺杆在精密机械设备中如何维持精度要求?

滚珠螺杆在精密设备领域中的运用非常之广泛&#xff0c;具有精度高、效率高的特点。为了确保滚珠螺杆在生产设备中能够发挥最佳性能&#xff0c;我们必须从多个维度进行深入考量&#xff0c;并采取针对性的措施&#xff0c;以确保其稳定、精准地服务于现代化生产的每一个环节。…

基于springboot的医护人员排班系统

springboot002基于springboot的医护人员排班系统 亲测完美运行带论文&#xff1a;获取源码&#xff0c;私信评论或者v:niliuapp 运行视频 包含的文件列表&#xff08;含论文&#xff09; 数据库脚本&#xff1a;db.sql论文&#xff1a;开题报告springboot002基于springboot…

nginx 发布静态资源

一. nginx 发布静态资源 在nginx中nginx.conf配置文件中添加内容如下&#xff1a; server {listen 90;server_name localhost;# 配置静态资源文件&#xff0c;就可以访问了location / {root /home/fooie-shop;index index.html;}# 配置音频和图片资源location /imoo…

Compose容器编排示例

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录如下&#xff1a; 一、从源代码开始构建、部署和管理应用程序 1.1、创建项目目录并准备应用程序的代码及其依赖 1.2、创建Dockerfile 1.3、在…

宝塔历史版本离线包下载(附详细教程)

宝塔离线版下载&#xff1a;宝塔离线版安装包 宝塔面板5.X版本升级最新版出错&#xff0c;导致宝塔面板无法使用&#xff0c;可以参考下离线包安装处理&#xff0c;这教程分享的是原理仅供有技术的人参考&#xff0c;小白也可以学习&#xff0c;进行操作前记得做好备份切记&am…

CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!

CodeGeeX是支持适配Visual Studio 2019的唯一一款国产智能辅助编程工具&#xff0c;已经在Visual Studio趋势上霸榜2周&#xff01; CodeGeeX v1.0.4版本上线Visual Studio插件市场&#xff0c;带来了多项新功能和性能优化&#xff0c;提升编程体验。 新功能亮点速览&#xf…

求学生平均成绩(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明平均数函数average; float average(float score[10]);int main() {//初始化变量值&#xff1b;float score[10], aver;int i 0;//填充数组&#xff1b;pr…

前端已死? Bootstrap--JS-jQuery

目录 Bootstrap--JS-jQuery 1 jQuery基础 介绍 基础语法&#xff1a; $(selector).action() 1.1 安装jQuery 地址 基础语法&#xff1a; $(selector).action() 2 jQuery事件 事件处理程序指的是当 HTML 中发生某些事件时所调用的方法。 jQuery常用事件 2.1 鼠标事件…

Hadoop复习(上)

目录 一 绪论 1 大数据5v特点 --1.6 2 Google三驾马车 GFS MapReduce BigTable --1.18 3 Hadoop的特点 --1.23 4 Hadoop生态系统 (教材p6) 6 NoSQL有哪些 二 HDFS架构 1 三大基本组件 --2.1.2 2 HDFS特性和局限性(教材p38) --2.1.4-5 3 HDFS block 4 HDFS守护进程 …

Notes客户端中的漫游功能

大家好&#xff0c;才是真的好。 故事&#xff0c;首先是从一个小图标开始的&#xff0c;很多人问我Domino公共通讯录中&#xff0c;个人文档前面有一个绿色小球图标&#xff0c;这是什么意思&#xff1f; 我的答案&#xff1a;这是Notes客户端中的漫游功能。 说到漫游&…

网络安全ctf比赛_学习资源整理,解题工具、比赛时间、解题思路、实战靶场、学习路线,推荐收藏!...

对于想学习或者参加CTF比赛的朋友来说&#xff0c;CTF工具、练习靶场必不可少&#xff0c;今天给大家分享自己收藏的CTF资源&#xff0c;希望能对各位有所帮助。 CTF在线工具 首先给大家推荐我自己常用的3个CTF在线工具网站&#xff0c;内容齐全&#xff0c;收藏备用。 1、C…

原子学习笔记3——点亮 LED

一、应用层操控设备的两种方式 应用层如何操控底层硬件&#xff0c;同样也是通过文件 I/O 的方式来实现&#xff0c;设备文件便是各种硬件设备向应用层提供的一个接口&#xff0c;应用层通过对设备文件的 I/O 操作来操控硬件设备&#xff0c;譬如 LCD 显示屏、串口、按键、摄像…

第四届辽宁省大学生程序设计竞赛

比赛经历&#xff1a;2024.5.14简单vp了一个小时只写出了签到题4个然后跑路了 补题&#xff1a;感觉其他题有点太抽象了主要补了一题&#xff0c;在区间问题中数据结构的使用 比赛链接[点我即可] 目录 A.欢迎来到辽宁省赛 B.胜率 F.隔板与水槽 H.取石子 L.区间与绝对值 …

回复完成 输入框还显示值的问题

回复完成 输入框还显示值的问题 解决代码 先把id 值清空 再构建下这个输入框 $("#details_article_reply_content").val(""); // 清空textareavar editor editormd("article_details_reply", {width: "100%",height: "100%"…

数据驱动测试在接口测试和网站测试中的应用

什么是数据驱动测试 据驱动测试是一种测试方法&#xff0c;其中测试数据和测试逻辑是分开的&#xff0c;测试数据被存储在外部源中&#xff08;如Excel表格、JSON文件、数据库等&#xff09;&#xff0c;测试逻辑则独立于测试数据。在测试过程中&#xff0c;测试数据被读取并传…

网络 | 应用层-websocket协议概述与握手过程解析

背景&#xff1a;这里为了实现消息实时传输决定引入websocket协议。 不管是发送消息还是接收消息&#xff0c;都需要实时传输&#xff0c;张三发给李四&#xff0c;李四立马就能收到&#xff0c;基于HTTP实现是有些困难的。 但轮询方式也带来了一些问题 1、消耗更多系统资源&…