Centos7,部署etcd集群,基于二进制包,https安全通讯

由于etcd集群https通讯,所以需要自建CA数字证书,学习使用https部署etcd集群前,可以先完成一下,基于http通信的etcd集群:

关于CA原理以及工作可以阅读,以下两篇文章:
CA工作原理
对称加密与非对称加密

关于如何自建CA数字证书可以参考: 手动生成证书,文章介绍了,3种创建证书的方法,本文选择 openssl 来创建证书。

主机信息

etcd-01192.168.44.186
etcd-02192.168.44.187
etcd-03192.168.44.188

环境配置:

  1. 设置主机名
 # 分别在每台执行hostnamectl set-hostname etcd-01hostnamectl set-hostname etcd-02hostnamectl set-hostname etcd-03
  1. 配置本地解析
# 每台都执行
cat >> /etc/hosts << EOF
192.168.44.186  etcd-01
192.168.44.187  etcd-02
192.168.44.188  etcd-03
EOF
  1. 关闭防火墙,selinux
 # 每台都执行systemctl disable firewalld --nowsetenforce 0sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  1. 配置时间同步
 # 每台都执行yum install chrony -y && systemctl enable --now chronyd

下载二进制包,并创建启动目录

# 每台都执行
cd /opt
wget https://github.com/etcd-io/etcd/releases/download/v3.5.13/etcd-v3.5.13-linux-amd64.tar.gz
tar -zxvf etcd-v3.5.13-linux-amd64.tar.gz
# 创建etcd工作目录: bin存放二进制目录,cfg存放配置文件目录,ssl存放证书目录
mkdir -p  /usr/local/etcd/{bin,cfg,ssl}
# 将二进制文件送到  /usr/local/etcd/bin目录
cp etcd-v3.5.13-linux-amd64/etcd* /usr/local/etcd/bin/
# 配置环境变量
echo 'export ETCD_HOME=/usr/local/etcd' >> /etc/profile
echo 'export PATH=$PATH:$ETCD_HOME/bin' >> /etc/profile
source /etc/profile
# 现在可以查看etcd版本
etcd --version

生成证书
可以选择在任意台节点上生成证书,然后copy到其他节点。

# 在节点etcd-01上执行cd /usr/local/etcd/ssl/
# 生成CA私钥openssl genrsa -out ca.key 2048
# 使用CA私钥生成CA根证书, -days 设置过期时间openssl req -x509 -new -nodes -key ca.key -subj "/CN=etcd" -days 10000 -out ca.crt 
# 生成服务端私钥openssl genrsa -out server.key 2048
# 创建一个用于生成证书签名请求(CSR)的配置文件,etcd-csr.conf,内容如下:
# 需要注意 [ alt_names ] 块,为集群的成员,需要把所有的集群成员IP都写进去,也可以多写入,为以后做扩展
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn[ dn ]
C = cn
ST = fujian
L = xiamen
O = etcd
OU = etcd
CN = etcd[ req_ext ]
subjectAltName = @alt_names[ alt_names ]
IP.1 = 192.168.44.186
IP.2 = 192.168.44.187
IP.3 = 192.168.44.188[ v3_ext ]
authorityKeyIdentifier=keyid,issuer:always
basicConstraints=CA:FALSE
keyUsage=keyEncipherment,dataEncipherment
extendedKeyUsage=serverAuth,clientAuth
subjectAltName=@alt_names
# 基于etcd-csr.conf证书请求配置文件,生成证书签名请求:openssl req -new -key server.key -out server.csr -config etcd-csr.conf
# 基于 ca.key、ca.crt 和 server.csr 等三个文件生成服务端证书:openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key  -CAcreateserial -out server.crt -days 10000 -extensions v3_ext -extfile etcd-csr.conf -sha256# 查看所有的文件
[root@localhost ssl]# ll
总用量 28
-rw-r--r--. 1 root root 1082 412 14:26 ca.crt
-rw-r--r--. 1 root root 1675 412 14:24 ca.key
-rw-r--r--. 1 root root   17 412 14:36 ca.srl
-rw-r--r--. 1 root root  486 412 14:35 etcd-csr.conf
-rw-r--r--. 1 root root 1285 412 14:36 server.crt
-rw-r--r--. 1 root root 1050 412 14:35 server.csr
-rw-r--r--. 1 root root 1679 412 14:26 server.key
# 查看证书签名请求:openssl req  -noout -text -in ./server.csr
# 查看证书:openssl x509  -noout -text -in ./server.crt
# 将所有证书文件分发到 etcd-02 , etcd-03 节点scp * etcd-02:/usr/local/etcd/ssl/scp * etcd-03:/usr/local/etcd/ssl/

启动集群

  1. 创建etcd配置文件

如果有部署http协议的etcd集群的经验,观察配置文件就可以看出,就是配置了变量,将之前运行时的参数写入到了配置文件中, 协议由http改成了https。

# etcd-01
cat > /usr/local/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-01"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.44.186:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.44.186:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.44.186:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.44.186:2379"
ETCD_INITIAL_CLUSTER="etcd-01=https://192.168.44.186:2380,etcd-02=https://192.168.44.187:2380,etcd-03=https://192.168.44.188:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
# etcd-02
cat > /usr/local/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-02"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.44.187:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.44.187:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.44.187:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.44.187:2379"
ETCD_INITIAL_CLUSTER="etcd-01=https://192.168.44.186:2380,etcd-02=https://192.168.44.187:2380,etcd-03=https://192.168.44.188:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF
# etcd-03
cat > /usr/local/etcd/cfg/etcd.conf << EOF
#[Member]
ETCD_NAME="etcd-03"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="https://192.168.44.188:2380"
ETCD_LISTEN_CLIENT_URLS="https://192.168.44.188:2379"#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.44.188:2380"
ETCD_ADVERTISE_CLIENT_URLS="https://192.168.44.188:2379"
ETCD_INITIAL_CLUSTER="etcd-01=https://192.168.44.186:2380,etcd-02=https://192.168.44.187:2380,etcd-03=https://192.168.44.188:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

参数详情讲解:

ETCD_NAME	      				etcd的节点名字,自定义名字,etcd节点的名字不能相同
ETCD_DATA_DIR    				etcd的数据存储目录
ETCD_LISTEN_CLIENT_URLS			用于当前节点与客户端交互的URL地址,每个节点同样可以向客户端提供多个URL地址,多个地址使用道号分隔节课,端口一般保持默认2379即可
ETCD_LISTEN_PEER_URLS	   		用于集群内各个节点之间通信的URL地址,每个节点可以监听多个URL地址,集群内部将通过这些URL地址进行数据交互,例如,Leader节点的选举、Message消息传输或是快照传输等,端口一般保持默认2380即可
ETCD_ADVERTISE_CLIENT_URLS		建议使用的客户端通信url,该值用于etcd 代理或etcd成员与etcd节点通信,与listen-client-urls参数值保持一致即可
ETCD_INITIAL_ADVERTISE_PEER_URLS	建议用于集群内部节点之间交互的URL地址,节点间将以该值进行通信,与listen-peer-urls参数值保持一致即可
ETCD_INITIAL_CLUSTER				集群中所有的initial-advertise-peer-urls的合集,etcd启动的时候,会通过这个配置找到其他etcd节点的列表
ETCD_INITIAL_CLUSTER_TOKEN 			节点的token值,该值可自定义,设置该值后集群将生成唯一id,并为每个节点也生成唯一id,当使用相同配置文件再启动一个集群时,只要该token值不一样,etcd 集群就不会相互影响
ETCD_INITIAL_CLUSTER_STATE			初始化时集群的状态,可取值:new和existing,new代表新建的集群,existing 代表加入已经存在的集群
  1. 创建etcd.service文件,将etcd服务加入到systemd系统进程
# 每台节点都执行
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/cfg/etcd.conf
ExecStart=/usr/local/etcd/bin/etcd \
--cert-file=/usr/local/etcd/ssl/server.crt \
--key-file=/usr/local/etcd/ssl/server.key \
--peer-cert-file=/usr/local/etcd/ssl/server.crt \
--peer-key-file=/usr/local/etcd/ssl/server.key \
--trusted-ca-file=/usr/local/etcd/ssl/ca.crt \
--peer-trusted-ca-file=/usr/local/etcd/ssl/ca.crt \
--logger=zap
Restart=on-failure
LimitNOFILE=65536[Install]
WantedBy=multi-user.target
EOF
# 加载systemd 配置文件
systemctl daemon-reload

参数详情讲解:

EnvironmentFile		配置文件路径
ExecStart			二进制启动文件路径
--cert-file			客户端服务器TLS证书文件的路径
--key-file			客户端服务器TLS密钥文件的路径
--peer-cert-file	与集群其他成员通讯TLS证书文件的路径
--peer-key-file		与集群其他成员通讯TLS密钥文件的路径
--trusted-ca-file	客户端服务器TLS可信CA证书文件的路径
--peer-trusted-ca-file		与集群其他成员通讯TLS可信CA证书文件的路径
--logger=zap		zap结构化日志记录(目前只支持“zap”进行结构化日志记录。)
  1. 启动

     # 同时启动etcdsystemctl start etcd# 自启systemctl enable etcd
    

查看etcd集群状态

etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379" \endpoint status  --write-out=table
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|          ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://192.168.44.186:2379 | 21465eba80fe786a |  3.5.13 |   25 kB |     false |      false |         2 |          8 |                  8 |        |
| https://192.168.44.187:2379 | 5d144d32bb3de813 |  3.5.13 |   25 kB |     false |      false |         2 |          8 |                  8 |        |
| https://192.168.44.186:2379 | 21465eba80fe786a |  3.5.13 |   25 kB |     false |      false |         2 |          8 |                  8 |        |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

查看etcd集群是否健康

etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379" \endpoint health  --write-out=table
+-----------------------------+--------+-------------+-------+
|          ENDPOINT           | HEALTH |    TOOK     | ERROR |
+-----------------------------+--------+-------------+-------+
| https://192.168.44.187:2379 |   true |  17.89323ms |       |
| https://192.168.44.186:2379 |   true |  20.69533ms |       |
| https://192.168.44.186:2379 |   true | 21.574465ms |       |
+-----------------------------+--------+-------------+-------+

列出节点成员

etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379" \member list  --write-out=table
+------------------+---------+---------+-----------------------------+-----------------------------+------------+
|        ID        | STATUS  |  NAME   |         PEER ADDRS          |        CLIENT ADDRS         | IS LEARNER |
+------------------+---------+---------+-----------------------------+-----------------------------+------------+
| 21465eba80fe786a | started | etcd-01 | https://192.168.44.186:2380 | https://192.168.44.186:2379 |      false |
| 51f535e47d80fd93 | started | etcd-03 | https://192.168.44.188:2380 | https://192.168.44.188:2379 |      false |
| 5d144d32bb3de813 | started | etcd-02 | https://192.168.44.187:2380 | https://192.168.44.187:2379 |      false |
+------------------+---------+---------+-----------------------------+-----------------------------+------------+

为etcdctl设置别名
在使用etcdctl时,默认要加入证书参数,集群参数很不方便,所以可以把那串固定的指令设置一个别名
例如:
临时设置别名:

取消别名: unalias etcdctl

alias etcdctl='etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379"'

永久设置别名
将指令添加到环境变量文件即可。
例如:

# 添加到用户环境变量
cat >> ~/.bashrc << EOF
alias etcdctl='etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379"'
EOF
source ~/.bashrc# 或者添加上全局变量
cat >> /etc/profile << EOF
alias etcdctl='etcdctl \--cacert="/usr/local/etcd/ssl/ca.crt"  \--cert="/usr/local/etcd/ssl/server.crt" \--key="/usr/local/etcd/ssl/server.key" \--endpoints="https://192.168.44.186:2379,https://192.168.44.187:2379,https://192.168.44.186:2379"'
EOF
source /etc/profile

查看效果

[root@etcd-01 ~]# etcdctl endpoint status  --write-out=table
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
|          ENDPOINT           |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://192.168.44.186:2379 | 21465eba80fe786a |  3.5.13 |   25 kB |     false |      false |         2 |         11 |                 11 |        |
| https://192.168.44.187:2379 | 5d144d32bb3de813 |  3.5.13 |   25 kB |     false |      false |         2 |         11 |                 11 |        |
| https://192.168.44.186:2379 | 21465eba80fe786a |  3.5.13 |   25 kB |     false |      false |         2 |         11 |                 11 |        |
+-----------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+

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

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

相关文章

【洛谷题解】 CF1468E Four Segments

分析 我们可以知道&#xff0c;如果两个相对的边所在的棍子的长度分别为 a a a 和 b b b&#xff0c;那么这两条边最大只能就为 min ⁡ ( a , b ) \min(a,b) min(a,b)。所以如果让最长的棍子&#xff08;设其长度为 a a a&#xff09;与最短的棍子&#xff08;设其长度为 …

怎样将PDF转成PPT,有免费的工具吗?

PDF转换为PPT的需求在现代办公和学习中越来越常见。很多人可能遇到过需要将PDF文件中的内容转移到PPT中以方便编辑和展示的情况。幸运的是&#xff0c;现在市面上有许多工具可以帮助我们实现这一目标&#xff0c;而且其中不乏一些免费的选项。本文将详细介绍如何使用这些免费工…

自然语言处理、大语言模型相关名词整理

自然语言处理相关名词整理 零样本学习&#xff08;zero-shot learning&#xff09;词嵌入&#xff08;Embedding&#xff09;为什么 Embedding 搜索比基于词频搜索效果好&#xff1f; Word2VecTransformer检索增强生成&#xff08;RAG&#xff09;幻觉采样温度Top-kTop-p奖励模…

全网最完整的软件测试面试八股文

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号&#xff1a;互联网杂货铺&#xff0c;回复1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 Part1 1、你的测试职业发展是什么&#xff1f; 测试经…

指定不同版本的jdk运行maven

背景 最近遇到一个业务上问题&#xff0c;使用maven执行线上打包的一个操作&#xff0c;但是java项目有jdk8&#xff0c;有的是jdk11还有的是jdk17的&#xff0c;如何根据不同的项目jdk版本来执行maven呢&#xff1f; 解决方案 这里是临时多版本动态打包&#xff0c;所以不能…

Python | Leetcode Python题解之第24题两两交换链表中的节点

题目&#xff1a; 题解&#xff1a; class Solution:def swapPairs(self, head: ListNode) -> ListNode:dummyHead ListNode(0)dummyHead.next headtemp dummyHeadwhile temp.next and temp.next.next:node1 temp.nextnode2 temp.next.nexttemp.next node2node1.next…

Hello算法11:排序

https://www.hello-algo.com/chapter_sorting/ 选择排序 初始未排序的区间是[0,n-1]在[0,n-1]中查找最小元素&#xff0c;和索引0交换&#xff0c;此时未排序的区间是[1,n-1]在[1,n-1]中查找最小元素&#xff0c;和索引1交换&#xff0c;此时未排序区间是[2,n-1]以此类推&…

基于springboot+vue+Mysql的藏区特产销售平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

TC387实现SPI自通讯

TC387实现SPI自通讯 预期效果&#xff1a; TC387上定义两个SPI通讯接口&#xff0c;一个用于发数据一个用于收数据。准确无误的收到一次数据就对核心板led灯的状态进行一次翻转。 由于实验设备有限&#xff0c;只能想办法通过现有设备进行实验。 实现过程&#xff1a; 最开…

linux 设置定时任务---学习

1、设置定时任务 crontab -e 设置格式参考&#xff1a;【Linux】Linux crontab 命令定时任务设置_crontab 设置每天10:30执行-CSDN博客 测试过程&#xff1a; */1 * * * * /root/cronjob.sh 脚本内容: echo "hell0 cronjob" >> /root/test/hello.txt 实现…

为什么你要选择成为一名程序员

为什么你要选择成为一名程序员 成为程序员——编程世界的无尽魅力 成为一名程序员&#xff0c;是一个颇具挑战而又富有激情的选择。每当我沉浸在代码的世界中&#xff0c;那种成就感和满足感都让我深感自己的选择是正确的。 首先&#xff0c;成为一名程序员&#xff0c;是对…

extends继承

目录 什么时候用继承? 继承的格式? 继承的特点 子类可以继承父类的哪些呢&#xff1f; 是否可以继承父类的构造方法呢&#xff1f; 是否可以继承成员变量&#xff1f; 是否可以继承成员方法&#xff1f; 在Java中&#xff0c;extends关键字用于实现继承关系。通过使用…

24年重庆三支一扶报名照不通过怎么处理?

24年重庆三支一扶报名照不通过怎么处理&#xff1f;

Laravel 11入门:使用ServBay打造高效开发环境

Laravel 11发布&#xff0c;改进了不少功能。 它引入了更加流畅的应用结构、每秒限速、健康路由等特性。 此外&#xff0c;Laravel还推出了第一方可扩展的WebSocket服务器Laravel Reverb&#xff0c;为你的应用提供强大的实时功能。 在今天的指南中&#xff0c;我将设置一个…

L1-003 个位数统计 C语言

感觉看的那些模板在写非当时指定的题的时候&#xff0c;很难用的上&#xff0c;可能还是培养那种思维吧&#xff0c;还是勤学多练&#xff0c;这样就能融会贯通&#xff0c;把学的慢慢用上&#xff0c;慢慢来吧&#xff0c;着急没用的 这里因为个不超过 1000 位的正整数 N&…

ASP.NET基于BS课件发布系统

摘 要&#xff1a;本文在分析建立动态网站的技术细节和课件发布工作流程的基础上&#xff0c;阐述了网站的结构与功能设计。本网站采用的是B/S结构&#xff0c;网站使用 Microsoft Visual Studio .NET2003作为主要开发工具&#xff0c;采用Dreamweaver 作为辅助开发工具实现网…

ELK日志分析系统之Zookeeper

一、Zookeeper简介 ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务&#xff0c;它提供了一项基本服务&#xff1a;分布式锁服务。分布式应用可以基于它实现更高级的服务&#xff0c;实现诸如同步服务、配置维护和集群管理或者命名的服务。 Zookeepe…

3_3.Apache的管理及优化web

### 一.Apache的作用 ### 在web被访问时通常使用http://的方式 http:// ##超文本传输协议 http:// 超文本传输协议提供软件&#xff1a; Apache nginx stgw jfe Tengine ### 二.Apache的安装 ### dnf install httpd.x86_64 -y ### 三.Apache的启用 ### systemctl enable --…

一、Nginx部署

Nginx部署 一、Docker部署1.复制Nginx配置文件2.启动Nginx容器 一、Docker部署 1.复制Nginx配置文件 # 1.拉取镜像 docker pull nginx # 2.启动nginx容器 docker run --restartalways --namenginx -p 80:80 -d nginx # 3.宿主机创建挂载目录 mkdir /root/docker/nginx -p # 4…