etcd部署(基于v3.5.15)

ops/2024/11/20 9:22:59/

etcd部署

  • 单节点部署
    • 下载etcd,解压etcd二进制包,并进入解压后目录
    • 创建数据目录
    • 移动可执行文件到/usr/local/bin/目录
    • 测试版本
    • 配置systemd管理
    • 启动etcd,设置开机启动
    • 验证
  • 集群部署(3节点)
    • 环境准备
      • 准备3台服务器
      • 配置3台服务器hosts
      • 配置3台服务器时间同步
      • 配置防火墙,放开时间ntpd服务端口
      • 启动ntpd服务,并检查ntp同步状态。
    • 生成etcd自签证书
      • 下载CFSSL工具
      • 将二进制包移动至/usr/local/bin/下,并赋予权限
      • 创建数据目录和证书目录
      • 进入证书目录,创建CA配置文件
      • 创建CA证书信息文件
      • 生成CA秘钥和证书
      • 创建etcd证书信息文件
      • 生成etcd证书
      • 传输证书和私钥到其它节点
    • 部署、启动etcd集群
      • 下载并移动二进制文件
      • 创建systemd管理文件
        • al931181
        • al931182
        • al931183
      • 启动etcd服务,设置开机启动
      • 查看集群状态

单节点部署

etcdetcd_4">下载etcd,解压etcd二进制包,并进入解压后目录

wget https://github.com/etcd-io/etcd/releases/download/v3.5.15/etcd-v3.5.15-linux-amd64.tar.gz
tar -xvzf etcd-v3.5.15-linux-amd64.tar.gz
cd etcd-v3.5.15-linux-amd64/

<a class=etcd包目录" />

创建数据目录

mkdir -p /data/etcd/data

移动可执行文件到/usr/local/bin/目录

mv etcd etcdctl etcdutl /usr/local/bin/

其余文件可以删除了

测试版本

etcd --version

<a class=etcd版本" />

配置systemd管理

vim /usr/lib/systemd/system/etcd.service
[Unit]
Description=Etcd Service
After=network.target[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \--name etcd1 \--data-dir /data/etcd/data \--listen-peer-urls http://127.0.0.1:2380 \--listen-client-urls http://127.0.0.1:2379,http://10.168.31.180:2379 \--advertise-client-urls http://192.168.110.12:2379 \--initial-advertise-peer-urls http://127.0.0.1:2380 \--initial-cluster etcd1=http://127.0.0.1:2380 \--initial-cluster-state new \--initial-cluster-token etcd-1Restart=on-failure
RestartSec=5LimitNOFILE=40000[Install]
WantedBy=multi-user.target

配置解释:

ExecStart: 指定 etcd 二进制文件的路径和启动参数。

–name: 指定节点的名称。

–data-dir: 存储 etcd 数据的目录;上面创建的目录/data/etcd/data。

–listen-peer-urls: 设置 etcd 节点监听其他节点的 URL。

–listen-client-urls: 设置 etcd 节点监听客户端请求的 URL。可以同时监听 localhost 和实际的服务器 IP 地址。

–advertise-client-urls: 客户端会通过此地址与 etcd 通信。

–initial-advertise-peer-urls: 广播给集群中其他节点的 URL。

–initial-cluster: 指定集群中节点的配置。在单节点模式下,这里仅包括当前节点。

–initial-cluster-state: 指定集群的初始状态。在新建集群时使用 new。

Restart 和 RestartSec: 如果 etcd 进程崩溃或退出,服务会在 5 秒后自动重启。

LimitNOFILE: 增加文件描述符的限制,适应 etcd 的高并发需求。

etcd_87">启动etcd,设置开机启动

systemctl start etcd
systemctl enable etcd

验证

etcdctl put mytest "asd"etcdctl get mytest

测试验证

集群部署(3节点)

环境准备

三个节点都需要操作

准备3台服务器

操作系统IP地址主机名
alma linux9.310.168.31.181al931181
alma linux9.310.168.31.182al931182
alma linux9.310.168.31.183al931183

配置3台服务器hosts

vim /etc/hosts
## 增加以下配置
10.168.31.181 al931181 
10.168.31.182 al931182 
10.168.31.183 al931183 

配置3台服务器时间同步

dnf install -y ntp
vim /etc/ntp.conf
#修改server的信息为时间服务器的信息,这里设置为阿里云的时间服务器
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst

配置防火墙,放开时间ntpd服务端口

firewall-cmd --permanent --add-port=123/udp
firewall-cmd --reload

启动ntpd服务,并检查ntp同步状态。

systemctl start ntpd
systemctl enable ntpd
ntpq -p

etcd_155">生成etcd自签证书

只在al931181节点上面操作

下载CFSSL工具

wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl_1.6.3_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssl-certinfo_1.6.3_linux_amd64
wget https://github.com/cloudflare/cfssl/releases/download/v1.6.3/cfssljson_1.6.3_linux_amd64

将二进制包移动至/usr/local/bin/下,并赋予权限

mv cfssl_1.6.3_linux_amd64 /usr/local/bin/cfssl
mv cfssl-certinfo_1.6.3_linux_amd64  /usr/local/bin/cfssl-certinfo
mv cfssljson_1.6.3_linux_amd64 /usr/local/bin/cfssljson
chmod u+x /usr/local/bin/cfssl
chmod u+x /usr/local/bin/cfssl-certinfo
chmod u+x /usr/local/bin/cfssljson

创建数据目录和证书目录

3个节点相同操作

mkdir -p /data/etcd/{ssl,data}

进入证书目录,创建CA配置文件

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

创建CA证书信息文件

cat > ca-csr.json << EOF
{"CN": "Etcd CA","key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "Beijing","L": "Beijing","O": "Etcd CA","OU": "Etcd CA"}]
}
EOF

生成CA秘钥和证书

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

生成三个文件:ca.csr(证书签名请求 )、ca.pem(CA 证书)和 ca-key.pem(CA 私钥)。
证书文件1

etcd_234">创建etcd证书信息文件

cat > server-csr.json << EOF
{"CN": "etcd-server","hosts": ["localhost","127.0.0.1","10.168.31.180","10.168.31.181","10.168.31.182","10.168.31.183","al931180","al931181","al931182","al931183","al931180.etcd.top","al931181.etcd.top","al931182.etcd.top","al931183.etcd.top","*.etcd.top"],"key": {"algo": "rsa","size": 2048},"names": [{"C": "CN","ST": "Beijing","L": "Beijing","O": "Etcd Server","OU": "Etcd Server"}]
}
EOF  

host里面预留地址信息,以便后续扩容。可以使用通配符域名的进行地址的预留,后续使用dns解析的方式解决证书不匹配的问题。

etcd_275">生成etcd证书

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

这会生成三个文件:server.csr(证书签名请求 )、server.pem(etcd 证书)和 server-key.pem(etcd 证书私钥)。
证书文件2

传输证书和私钥到其它节点

scp *.pem al931182:/data/etcd/ssl
scp *.pem al931183:/data/etcd/ssl

etcd_288">部署、启动etcd集群

三个节点相同操作

下载并移动二进制文件

下载和移动二进制文件同单机部署

创建systemd管理文件

al931181
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Service
After=network.target[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
--name=al931181 \
--cert-file=/data/etcd/ssl/server.pem \
--key-file=/data/etcd/ssl/server-key.pem \
--peer-cert-file=/data/etcd/ssl/server.pem \
--peer-key-file=/data/etcd/ssl/server-key.pem \
--trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-client-cert-auth \
--client-cert-auth \
--initial-advertise-peer-urls=https://10.168.31.181:2380 \
--listen-peer-urls=https://10.168.31.181:2380 \
--listen-client-urls=https://10.168.31.181:2379,https://127.0.0.1:2379 \
--advertise-client-urls=https://10.168.31.181:2379 \
--listen-metrics-urls=http://0.0.0.0:2381 \
--initial-cluster-token=etcd-cluster \
--initial-cluster=al931181=https://10.168.31.181:2380,al931182=https://10.168.31.182:2380,al931183=https://10.168.31.183:2380 \
--initial-cluster-state=new \
--data-dir=/data/etcd/dataRestart=on-failure
RestartSec=5[Install]
WantedBy=multi-user.targetEOF
al931182
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Service
After=network.target[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
--name=al931182 \
--cert-file=/data/etcd/ssl/server.pem \
--key-file=/data/etcd/ssl/server-key.pem \
--peer-cert-file=/data/etcd/ssl/server.pem \
--peer-key-file=/data/etcd/ssl/server-key.pem \
--trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-client-cert-auth \
--client-cert-auth \
--initial-advertise-peer-urls=https://10.168.31.182:2380 \
--listen-peer-urls=https://10.168.31.182:2380 \
--listen-client-urls=https://10.168.31.182:2379,https://127.0.0.1:2379 \
--advertise-client-urls=https://10.168.31.182:2379 \
--listen-metrics-urls=http://0.0.0.0:2381 \
--initial-cluster-token=etcd-cluster \
--initial-cluster=al931181=https://10.168.31.181:2380,al931182=https://10.168.31.182:2380,al931183=https://10.168.31.183:2380 \
--initial-cluster-state=new \
--data-dir=/data/etcd/dataRestart=on-failure
RestartSec=5[Install]
WantedBy=multi-user.targetEOF
al931183
cat > /usr/lib/systemd/system/etcd.service << EOF
[Unit]
Description=Etcd Service
After=network.target[Service]
Type=notify
ExecStart=/usr/local/bin/etcd \
--name=al931183 \
--cert-file=/data/etcd/ssl/server.pem \
--key-file=/data/etcd/ssl/server-key.pem \
--peer-cert-file=/data/etcd/ssl/server.pem \
--peer-key-file=/data/etcd/ssl/server-key.pem \
--trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-trusted-ca-file=/data/etcd/ssl/ca.pem \
--peer-client-cert-auth \
--client-cert-auth \
--initial-advertise-peer-urls=https://10.168.31.183:2380 \
--listen-peer-urls=https://10.168.31.183:2380 \
--listen-client-urls=https://10.168.31.183:2379,https://127.0.0.1:2379 \
--advertise-client-urls=https://10.168.31.183:2379 \
--listen-metrics-urls=http://0.0.0.0:2381 \
--initial-cluster-token=etcd-cluster \
--initial-cluster=al931181=https://10.168.31.181:2380,al931182=https://10.168.31.182:2380,al931183=https://10.168.31.183:2380 \
--initial-cluster-state=new \
--data-dir=/data/etcd/dataRestart=on-failure
RestartSec=5[Install]
WantedBy=multi-user.targetEOF

参数详解:

–name:指定 Etcd 成员的唯一名称。此名称用于标识集群中的特定 Etcd 成员,并且必须在整个集群中是唯一的。
–cert-file:指定服务器证书文件的路径。此文件包含了服务器的公钥证书,用于加密客户端与 Etcd 之间的通信。
–key-file:指定服务器私钥文件的路径。此文件包含了服务器的私钥,用于解密客户端与 Etcd 之间的通信。
–peer-cert-file:指定对等节点证书文件的路径。此文件包含了 Etcd 成员之间通信时使用的证书。
–peer-key-file:指定对等节点私钥文件的路径。此文件包含了 Etcd 成员之间通信时使用的私钥。
–trusted-ca-file:指定受信任的证书颁发机构 (CA) 证书文件的路径。此文件包含了 CA 的证书,用于验证客户端证书的真实性。
–peer-trusted-ca-file:指定受信任的证书颁发机构 (CA) 证书文件的路径,用于验证对等节点证书。此文件包含了 CA 的证书,用于验证对等节点证书的真实性。
–peer-client-cert-auth:启用对等节点间的证书验证。如果设置为 true,则 Etcd 成员之间通信时会验证对方的证书。
–client-cert-auth:启用客户端证书验证。如果设置为 true,则 Etcd 会验证客户端提供的证书。
–initial-advertise-peer-urls:指定 Etcd 成员向集群其他成员广播的 URL。这是其他 Etcd 成员用来与当前成员通信的 URL。
–listen-peer-urls:指定 Etcd 成员监听来自其他成员的 URL。这是 Etcd 成员监听其他成员通信请求的 URL。
–listen-client-urls:指定 Etcd 成员监听来自客户端的 URL。这是 Etcd 成员监听客户端请求的 URL。
–advertise-client-urls:指定 Etcd 成员向客户端广播的 URL。这是客户端用来与当前 Etcd 成员通信的 URL。
–listen-metrics-urls:指定 metrics 接口运行在 2381 端口下面的,而且是 http 的协议。
–initial-cluster-token:指定集群的唯一标识符。这是一个唯一的字符串,用于标识集群。
–initial-cluster:指定集群中所有成员的初始信息。这是一个逗号分隔的列表,包含集群中所有成员的名称、URL 和投票权重。
–initial-cluster-state:指定集群的初始状态。可以设置为 new 或 existing。如果设置为 new,表示创建一个新的集群;如果设置为 existing,表示加入现有集群。
–data-dir:指定 Etcd 数据目录的路径。这是 Etcd 存储持久化数据的地方。

etcd_428">启动etcd服务,设置开机启动

systemctl start etcd
systemctl enable etcd

查看集群状态

etcdctl --endpoints=https://10.168.31.181:2379,https://10.168.31.182:2379,https://10.168.31.183:2379 \--cacert=/data/etcd/ssl/ca.pem \--cert=/data/etcd/ssl/server.pem \--key=/data/etcd/ssl/server-key.pem \endpoint health

http://www.ppmy.cn/ops/135195.html

相关文章

组合VS继承

类的组合 一.组合的相关定义 1.定义&#xff1a;组合&#xff1a;是一种“has-a”关系&#xff0c;即一个类的对象“有”另一个类的对象。例如&#xff0c;一个汽车类可能包含轮胎类的对象。 例&#xff08;1&#xff09;&#xff1a; class Desk {private:unsigned int iHei…

Chrome 浏览器 131 版本新特性

Chrome 浏览器 131 版本新特性 一、Chrome 浏览器 131 版本更新 1. 在 iOS 上使用 Google Lens 搜索 自 Chrome 126 版本以来&#xff0c;用户可以通过 Google Lens 搜索屏幕上看到的任何图片或文字。 要使用此功能&#xff0c;请访问网站&#xff0c;并点击聚焦时出现在地…

【氮化镓】用于低压射频电源的具有80.4% PAE的Si基E-Mode AlN/GaN HEMT

引言 本文是一篇关于增强型(E-mode)AlN/GaN高电子迁移率晶体管(HEMTs)的研究论文,晶体管是在硅衬底上制造的,并在3.6 GHz频率下展示了80.4%的峰值功率附加效率(PAE)。文章首先介绍了GaN器件在微波和毫米波功率放大器中的应用,特别是在雷达、卫星通信和民用移动通信系…

AWS IAM

一、介绍 1、简介 AWS Identity and Access Management (IAM) 是 Amazon Web Services 提供的一项服务&#xff0c;用于管理 AWS 资源的访问权限。通过 IAM&#xff0c;可以安全地控制用户、组和角色对 AWS 服务和资源的访问权限。IAM 是 AWS 安全模型的核心组成部分&#xf…

Go语言中的自定义错误及其使用

在Go语言中&#xff0c;错误处理是程序设计的一个重要部分。Go的error接口是一个内建的接口&#xff0c;任何实现了Error()方法的类型都可以作为一个错误。自定义错误类型可以提供更多的错误上下文信息&#xff0c;使得错误处理更加灵活和强大。 自定义错误类型 在Go中定义一…

GRU(门控循环单元)详解

1️⃣ GRU介绍 前面介绍的LSTM可以有效缓解RNN的梯度消失问题&#xff0c;但是其内部结构比较复杂&#xff0c;因此衍生出了更加简化的GRU。GRU把输入门和遗忘门整合成一个更新门&#xff0c;并且合并了细胞状态和隐藏状态。于2014年被提出 2️⃣ 原理介绍 GRU的结构和最简单…

Zookeeper的简单使用Centos环境下

目录 前言 一、ZOokeeper是什么&#xff1f; 二、安装Zookeeper 1.进入官网下载 2.解压到服务器 3.配置文件 三.使用Zookeeper 3.1启动相关指令 3.2其他指令 3.3ACL权限 总结 前言 记录下安装zookeeper的一次经历 一、ZOokeeper是什么&#xff1f; ZooKeeper是一…

缓存工具类编写

缓存工具类编写 一般操作 在外面日常开发中&#xff0c;经常会有为了减少数据库压力&#xff0c;而将数据保存到缓存中并设置一个过期时间的操作。日常代码如下&#xff1a; Autowired private RedisTemplate<String, String> redisTemplate;public Object queryDataW…