Ubuntu 安裝帶證書的 etcd 集群

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;使用…