1.概念

etcd 是由GO语言编写的分布式的、可靠的键值存储系统,主要用于分布式系统中关键数据的存储和服务发现。

2.核心概念

节点(Node)

每个运行 etcd 的实例被称为一个节点。一个或多个节点可以组成一个集群。

集群(Cluster)

由多个节点组成的集合,这些节点共同工作以提供一致的数据存储服务。通过 Raft 共识算法确保集群中各节点间数据的一致性。

键值对(Key-Value Pair)

etcd 存储的基本单位是键值对,其中键和值都是字节数组。键用于唯一标识存储的数据项,而值则包含实际的数据内容。

3.etcd集群准备

节点IP地址操作系统版本etcd版本
etcd-node1192.168.100.5Ubuntu 24.04.2 LTSv3.6.4
etcd-node2192.168.100.6Ubuntu 24.04.2 LTSv3.6.4
etcd-node3192.168.100.7Ubuntu 24.04.2 LTSv3.6.4

3.1 配置IP地址

配置etcd-node1节点IP

sudo cat /etc/netplan/ens32-cloud-init.yaml 
network:version: 2ethernets:ens32:dhcp4: falseaddresses:- "192.168.100.5/24"routes:- to: defaultvia: 192.168.100.254nameservers:addresses:- 114.114.114.114
sudo netplan apply

配置etcd-node2节点IP

sudo cat /etc/netplan/ens32-cloud-init.yaml 
network:version: 2ethernets:ens32:dhcp4: falseaddresses:- "192.168.100.6/24"routes:- to: defaultvia: 192.168.100.254nameservers:addresses:- 114.114.114.114
sudo netplan apply

配置etcd-node3节点IP

sudo cat /etc/netplan/ens32-cloud-init.yaml 
network:version: 2ethernets:ens32:dhcp4: falseaddresses:- "192.168.100.7/24"routes:- to: defaultvia: 192.168.100.254nameservers:addresses:- 114.114.114.114
sudo netplan apply

3.2 配置主机名

配置etcd-node1节点主机名

sudo hostnamectl set-hostname etcd-node1

配置etcd-node2节点主机名

sudo hostnamectl set-hostname etcd-node2

配置etcd-node3节点主机名

sudo hostnamectl set-hostname etcd-node3

3.3 配置主机名与IP解析

3个节点均需要执行

sudo cat >> /etc/hosts <<EOF
192.168.100.5 etcd-node1
192.168.100.6 etcd-node2
192.168.100.7 etcd-node3
EOF

3.4 关闭防火墙

3个节点均需要执行

sudo ufw stop
sudo ufw status

3.5 时钟同步

3个节点均需要执行

sudo apt install chrony
sudo sed -i '/pool.*ubuntu\.pool\.ntp\.org/s/^/# /' /etc/chrony/chrony.conf
sudo sed -i 's/^pool ntp\.ubuntu\.com.*$/server ntp.aliyun.com iburst/' /etc/chrony/chrony.conf
sudo systemctl restart chrony
sudo chronyc sources

3.6 配置节点互信

3个节点均需要执行

sudo ssh-keygen
sudo cp /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

在etcd-node1节点上执行

sudo for i in 5 6 7
> do
> scp -r /root/.ssh 192.168.100.$i:/root/
> done

4.etcd集群部署

4.1 下载etcd

3个节点均需要执行

sudo wget https://github.com/etcd-io/etcd/releases/download/v3.6.4/etcd-v3.6.4-linux-amd64.tar.gz

4.2解压etcd

3个节点均需要执行

sudo tar xzvf etcd-v3.6.4-linux-amd64.tar.gz -C /usr/local
sudo ln -s /usr/local/etcd-v3.6.4-linux-amd64/ /usr/local/etcd

4.3复制解压文件至系统标准可执行文件路径中

3个节点均需要执行

sudo cp /usr/local/etcd/etcd* /usr/local/bin/

4.4创建etcd用户

3个节点均需要执行

sudo useradd --system --shell /bin/false --home-dir /var/lib/etcd etcd

4.5创建数据目录

3个节点均需要执行

sudo mkdir -p /var/lib/etcd 
sudo mkdir /var/lib/etcd/default.etcd
sudo chown -R etcd:etcd /var/lib/etcd /usr/local/etcd

4.6 创建etcd配置文件

配置etcd-node1节点配置文件

sudo cat > /usr/local/etcd/etcd.conf <<EOF
ETCD_NAME="etcd-node1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.100.5:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.100.5:2379,http://127.0.0.1:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.100.5:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.100.5:2379"
ETCD_INITIAL_CLUSTER="etcd-node1=https://192.168.100.5:2380,etcd-node2=https://192.168.100.6:2380,etcd-node3=https://192.168.100.7:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

配置etcd-node2节点配置文件

sudo cat > /usr/local/etcd/etcd.conf <<EOF
ETCD_NAME="etcd-node2"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.100.6:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.100.6:2379,http://127.0.0.1:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.100.6:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.100.6:2379"
ETCD_INITIAL_CLUSTER="etcd-node1=https://192.168.100.5:2380,etcd-node2=https://192.168.100.6:2380,etcd-node3=https://192.168.100.7:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

配置etcd-node3节点配置文件

sudo cat > /usr/local/etcd/etcd.conf <<EOF
ETCD_NAME="etcd-node3"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.100.7:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.100.7:2379,http://127.0.0.1:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.100.7:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.100.7:2379"
ETCD_INITIAL_CLUSTER="etcd-node1=https://192.168.100.5:2380,etcd-node2=https://192.168.100.6:2380,etcd-node3=https://192.168.100.7:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

相关参数说明

参数说明
ETCD_NAME当前etcd节点名称
ETCD_DATA_DIR数据存储目录
ETCD_LISTEN_CLIENT_URLS当前节点通过该地址监听客户端发送的信息
ETCD_LISTEN_PEER_URLS当前节点通过该地址监听集群其他节点发送的信息
ETCD_INITIAL_ADVERTISE_PEER_URLS集群的其他节点通过该地址与当前节点通信
ETCD_ADVERTISE_CLIENT_URLS客户端通过该地址与当前节点通信
ETCD_INITIAL_CLUSTER当前集群的所有节点信息,当前节点根据此信息与其他节点取得联系
ETCD_INITIAL_CLUSTER_TOKEN用于区分不同的集群,同一集群的所有节点配置相同的值
ETCD_INITIAL_CLUSTER_STATE本次是否为新建集群,取值为 new 或者 existing

4.7下载cfssl 证书生成工具

在etcd-node1节点上下载cfssl

wget https://github.com/cloudflare/cfssl/releases/download/v1.6.5/cfssl_1.6.5_linux_amd64

在etcd-node1节点上下载cfssljson

wget https://github.com/cloudflare/cfssl/releases/download/v1.6.5/cfssljson_1.6.5_linux_amd64

4.8授权并移至系统标准可执行文件路径中

在etcd-node1节点上执行

 chmod +x cfssl_1.6.5_linux_amd64chmod +x cfssljson_1.6.5_linux_amd64mv cfssl_1.6.5_linux_amd64 /usr/local/bin/cfssljsonmv cfssljson_1.6.5_linux_amd64 /usr/local/bin/cfssljson

4.9创建CA证书

在etcd-node1节点上配置CA证书策略

mkdir /usr/local/etcd/ssl
cat > /usr/local/etcd/ssl/ca-config.json <<EOF
{"signing": {"default": {"expiry": "87600h"},"profiles": {"etcd-server": {"usages": ["signing","key encipherment","client auth","server auth"],"expiry": "87600h"}}}
}
EOF

在etcd-node1节点上配置CA证书请求文件

cat > /usr/local/etcd/ssl/ca-csr.json <<EOF 
{"CN": "My etcd CA","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "LANZHOU","O": "LZ","ST": "LANZHOU","OU": "CN"}],"ca": {"expiry": "87600h"}
}
EOF

在etcd-node1节点上生成CA证书

cfssl gencert -initca ca-csr.json | cfssljson -bare ca -

4.10创建etcd证书

在etcd-node1节点上配置etcd请求文件

cat > /usr/local/etcd/ssl/etcd-server.json  <<EOF
{"CN": "etcd","hosts": ["127.0.0.1","192.168.100.5","192.168.100.6","192.168.100.7"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","L": "LANZHOU","ST": "LANZHOU","OU": "CN"}]
}
EOF

在etcd-node1节点上生成 Etcd 证书

cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=etcd-server etcd-server.json | cfssljson -bare etcd-server

说明:

参数说明
-ca-key指定CA证书机构的私钥
-config指定CA证书策略
-profile指定使用CA证书策略
etcd-server.pem证书/公钥
etcd-server-key.pem私钥

4.7创建 systemd 服务

3个节点均需要执行

sudo cat > /usr/lib/systemd/system/etcd.service <<EOF
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target[Service]
Type=notify
EnvironmentFile=-/usr/local/etcd/etcd.conf
WorkingDirectory=/var/lib/etcd/
ExecStart=/usr/local/bin/etcd \--cert-file=/usr/local/etcd/ssl/etcd-server.pem \--key-file=/usr/local/etcd/ssl/etcd-server-key.pem \--trusted-ca-file=/usr/local/etcd/ssl/ca.pem \--peer-cert-file=/usr/local/etcd/ssl/etcd-server.pem \--peer-key-file=/usr/local/etcd/ssl/etcd-server-key.pem \--peer-trusted-ca-file=/usr/local/etcd/ssl/ca.pem \--peer-client-cert-auth \--client-cert-auth
Restart=on-failure
RestartSec=5
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
EOF

4.8 启动etcd

3个节点均需要执行

sudo systemctl daemon-reload
sudo systemctl enable etcd
sudo systemctl start etcd
sudo systemctl status etcd

4.9查看集群成员

任意节点执行

sudo etcdctl member list

4.10查看集群节点健康状态

ETCDCTL_API=3 /usr/local/bin/etcdctl --write-out=table --cacert=/usr/local/etcd/ssl/ca.pem --cert=/usr/local/etcd/ssl/etcd-server.pem --key=/usr/local/etcd/ssl/etcd-server-key.pem --endpoints=https://192.168.100.5:2379,https://192.168.100.6:2379,https://192.168.100.7:2379 endpoint health

在这里插入图片描述

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

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

相关文章

360 集团20周年会:战略升级ALL IN Agent,抢占智能体时代先机

发布 | 大力财经8月15日&#xff0c;360集团迎来二十周年&#xff0c;在北京奥林匹克体育中心举办的“360集团20周年荣耀庆典”上&#xff0c;创始人周鸿祎向现场数千名员工发表演讲&#xff0c;回顾360集团二十年的发展历程&#xff0c;并明确360集团下一阶段的公司战略&#…

命令模式C++

命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装为一个对象&#xff0c;使你可以用不同的请求对客户进行参数化&#xff0c;还能支持请求的排队、记录日志及撤销操作。这种模式将发送者和接收者解耦&#xff0c;发送者无需知道接…

Web攻防-大模型应用LLM搭建接入第三方内容喂养AI插件安全WiKI库技术赋能

知识点&#xff1a; 1、WEB攻防-LLM搭建-AI喂养&安全知识WIKI库 演示案例&#xff1a;WEB攻防-LLM搭建-AI喂养&安全知识WIKI库 使用参考 https://docs.web2gpt.ai/ https://mp.weixin.qq.com/s/qqTOW5Kg1v0uxdSpbfriaA 0、服务器环境&#xff1a;阿里云 Ubuntu22.04 …

图片拼接-动手学计算机视觉8

前言图片拼接&#xff08;image stitching&#xff09;就是将统一场景的不同拍摄出的图片拼接到一起&#xff0c;如图所示就是拼接全景图&#xff0c;是图片拼接的应用之一&#xff0c;手机拍照都有全景拍摄功能仔细观察全景图&#xff0c;寻找它们相似性&#xff0c;图8-2的全…

Web第二次作业

作业一&#xff1a;学校官网1.1学校官网代码如下&#xff1a;​<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">&l…

【CV 目标检测】②R-CNN模型

二、R-CNN网络基础 2.R-CNN模型 2014年提出R-CNN&#xff01;网络&#xff0c;该网络不再使用暴力穷举的方法&#xff0c;而是使用候选区域方法&#xff08;region proposal method&#xff09;创建目标检测的区域来完成目标检测的任务&#xff0c;R-CNN是以深度神经网络为基础…

STM32L051C8与STM32L151C8的主要区别

STM32L051C8与STM32L151C8 有什么区别&#xff1f; LPTIM 有什么特点,为什么STM32L151C8没有LPTIM,而STM32L051C8有1个? 1. STM32L051C8与STM32L151C8的主要区别 STM32L051C8STM32L151C8内核Cortex-M0Cortex-M3主频32MHz32MHz闪存/ SRAM64KB/8KB64KB/16KB工作电压1.65V-3.6V…

【软考中级网络工程师】知识点之网关协议深度剖析

目录一、网关协议基础探秘1.1 网关协议概念1.2 网关协议作用1.3 网关协议分类总览二、内部网关协议&#xff08;IGP&#xff09;深度解析2.1 距离矢量协议2.2 链路状态协议2.3 混合型协议三、外部网关协议&#xff08;EGP&#xff09;探秘3.1 BGP 协议详解3.2 BGP 协议的关键特…

JavaScript 中 call、apply 和 bind 方法的区别与使用

一、核心作用与基础概念这三个方法都用于显式改变函数执行时的 this 指向&#xff0c;解决 JavaScript 中函数上下文动态绑定的问题。1.call()立即执行函数&#xff0c;第一个参数为 this 指向对象&#xff0c;后续参数为逗号分隔的参数列表语法&#xff1a;func.call(thisArg,…

【Android】适配器与外部事件的交互

三三要成为安卓糕手 引入&#xff1a;在上一篇文章中我们完成了新闻展示页面多布局案例的展示&#xff0c;感悟颇多&#xff0c;本篇文章&#xff0c;继续去开发一些新的功能 一&#xff1a;关闭广告 所有的view都可以和我们的用户做交互&#xff0c;循环视图中也给我们提供了相…

MySQL的分析查询语句(EXPLAIN):

目录 基本语法&#xff1a; 各个字段的含义&#xff1a; id&#xff1a; select_type&#xff1a; table&#xff1a; partitions&#xff1a; type&#xff1a; possible_keys&#xff1a; key&#xff1a; key_len&#xff1a; ref&#xff1a; row&#xff1a; …

C++ #if

在 C 中&#xff0c;#if 是 预处理器指令&#xff08;Preprocessor Directive&#xff09;&#xff0c;用于 条件编译&#xff0c;即在编译阶段根据条件决定是否包含某段代码。它通常与 #define、#ifdef、#ifndef、#else 和 #endif 配合使用。基本语法#if 条件表达式// 如果条件…

方案 | 动车底部零部件检测实时流水线检测算法改进

项目背景随着我国高速铁路运营里程突破4.5万公里&#xff0c;动车组日均开行超过8000列次&#xff0c;传统人工巡检方式已无法满足密集运行下的安全检测需求。车底关键部件如制动系统、悬挂装置、牵引电机等长期承受高强度振动和冲击&#xff0c;易产生疲劳裂纹、螺栓松动、部件…

企业收款统计:驱动业务决策的核心引擎设计开发——仙盟创梦IDE

代码完整代码<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>黑金风格职员统计</title><style>/* 页面基础样式 - 黑金风格 */body {font-family: Segoe UI, Tahoma, Geneva, Verdana, …

CIAIE 2025上海汽车内外饰展观察:从美学到功能的产业跃迁

在智能化、电动化浪潮推动下&#xff0c;汽车产业的市场格局、技术路线、供应链结构与用户体验正被系统性重塑。汽车感知空间核心的“内外饰件”&#xff0c;正从原本的结构性、功能性部件&#xff0c;逐步跃升为智能化、情感化和差异化体验的重要承载载体&#xff0c;开启了从…

Spring IOC容器在Web环境中的启动奥秘:深入源码解析

一、为何需要关注IOC容器启动&#xff1f;在Java Web开发中&#xff0c;Spring MVC框架的基石正是IOC容器。但你是否思考过&#xff1a;独立的IOC模块如何与Tomcat等Servlet容器协同工作&#xff1f; 其启动过程与Web容器的生命周期深度绑定&#xff0c;这是构建稳定Spring应用…

前端JS处理时间,适用于聊天、操作记录等(包含刚刚、x分钟前、x小时前、x天前)

export default {// 首页时间转化formatDate(val) {var nowDate new Date()var oldDate new Date(val)const Y oldDate.getFullYear()const M oldDate.getMonth() 1const D oldDate.getDate()var diff nowDate.getTime() - oldDate.getTime()var minutes Math.floor(di…

C#---StopWatch类

老方法&#xff0c;想要全面了解和学习一个类必先看文档 微软文档 1.StopWatch 提供一组方法和属性&#xff0c;可用来测量运行时间。 1.1 属性和方法 属性&#xff1a; 方法&#xff1a; 1.2 使用 using System.Diagnostics;namespace Study04_反射专题 {internal cla…

3DTiles转OSGB格式逆向转换方法研究

一、概述 在倾斜摄影的应用领域中&#xff0c;3DTiles与OSGB格式的互转是常见的技术需求。作为专业的GIS处理平台&#xff0c;GISBox凭借其先进的倾斜摄影反切功能&#xff0c;为用户提供了高效、稳定的跨格式数据转换解决方案。 二、3DTiles转OSGB的意义 保留原始几何与纹理…

【门诊进销存出入库管理系统】佳易王医疗器械零售进销存软件:门诊进销存怎么操作?系统实操教程 #医药系统进销存

前言&#xff1a; &#xff08;一&#xff09;试用版获取方式 资源下载路径&#xff1a;进入博主头像主页第一篇文章末尾&#xff0c;点击卡片按钮&#xff1b;或访问左上角博客主页&#xff0c;通过右侧按钮获取详细资料。 说明&#xff1a;下载文件为压缩包&#xff0c;使用…