etcd高可用集群部署

文章目录

  • 一、环境准备
  • 二、安装部署
    • [2.1 下载安装包](#2.1 下载安装包)
    • [2.2 将etcd和etcdctl复制到/usr/local/bin中](#2.2 将etcd和etcdctl复制到/usr/local/bin中)
    • [2.3 创建目录并赋予权限](#2.3 创建目录并赋予权限)
    • [2.4 修改节点配置](#2.4 修改节点配置)
      • [2.4.1 配置etcd.conf文件](#2.4.1 配置etcd.conf文件)
      • [2.4.2 配置/etc/systemd/system/etcd.service文件](#2.4.2 配置/etc/systemd/system/etcd.service文件)
    • [2.5 启动ectd服务](#2.5 启动ectd服务)
    • [2.6 查看集群成员信息](#2.6 查看集群成员信息)
    • [2.7 查看集群状态](#2.7 查看集群状态)

在生产环境中,为了整个集群的高可用,etcd 正常都会集群部署,避免单点故障。 etcd 集群的启动有以下三种机制:

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

一、环境准备

操作系统:red hat 7.9

cpu架构:amd64

etcd版本:v3.3.18

主机名 IP cpu数量 内存
etcd-1 192.168.80.40 2 4
etcd-2 192.168.80.39 2 4
etcd-3 192.168.80.55 2 4

二、安装部署

2.1 下载安装包

三台节点都执行

powershell 复制代码
wget https://github.com/etcd-io/etcd/releases/download/v3.3.18/etcd-v3.3.18-linux-amd64.tar.gz

这里如果报错拒绝连接:

解决办法: 配置DNS服务

vim /etc/resolv.conf

nameserver 114.114.114.114

nameserver 8.8.8.8

nameserver 8.8.4.4

解压

powershell 复制代码
tar -xvf etcd-v3.3.18-linux-amd64.tar.gz

#进入主目录查看文件

主要有两个文件etcd和etcdctl,etcd用于启动服务,etcdctl属于客户端命令行工具

powershell 复制代码
#进入解压包目录查看etcd版本
cd etcd-v3.3.18-linux-amd64/
./etcdctl --version

可以看到api默认版本是V2,如果要切换到V3版本需要修改环境变量,将/etc/profile文件里的ETCDCTL_API设为3:

powershell 复制代码
vim /etc/profile
#使配置文件生效
source /etc/profile

不同版本的命令使用不一样,我这里就不修改了。

2.2 将etcd和etcdctl复制到/usr/local/bin中

将etcd和etcdctl复制到/usr/local/bin中,方便在任何目录下直接用调用

powershell 复制代码
cp etcd etcdctl /usr/local/bin/

2.3 创建目录并赋予权限

powershell 复制代码
#创建systemd的工作目录
mkdir -m 777 /var/lib/etcd
#创建etcd的数据存储目录
mkdir -m 777 /var/lib/etcd/data

2.4 修改节点配置

2.4.1 配置etcd.conf文件

/etc目录下新建etcd目录,再新建etcd.conf文件

powershell 复制代码
cd /etc
mkdir etcd
cd etcd
touch etcd.conf

配置/etc/etcd/etcd.conf文件:
etcd-1:

powershell 复制代码
vim /etc/etcd/etcd.conf
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/var/lib/etcd/data"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://49.111.111.111:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://172.17.0.15:2379,http://localhost:2379"
ETCD_INITIAL_CLUSTER="etcd-1=http://49.111.111.111:2380,etcd-2=http://47.111.111.111:2380,etcd-3=http://101.111.111.111:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-token"
ETCD_INITIAL_CLUSTER_STATE="new"

etcd-2:

powershell 复制代码
vim /etc/etcd/etcd.conf
ETCD_NAME="etcd-2"
ETCD_DATA_DIR="/var/lib/etcd/data"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://47.111.111.111:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.178.96:2379,http://localhost:2379"
ETCD_INITIAL_CLUSTER="etcd-1=http://49.111.111.111:2380,etcd-2=http://47.111.111.111:2380,etcd-3=http://101.111.111.111:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-token"
ETCD_INITIAL_CLUSTER_STATE="new"

etcd-3:

powershell 复制代码
vim /etc/etcd/etcd.conf
ETCD_NAME="etcd-3"
ETCD_DATA_DIR="/var/lib/etcd/data"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://101.111.111.111:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.14:2379,http://localhost:2379"
ETCD_INITIAL_CLUSTER="etcd-1=http://49.111.111.111:2380,etcd-2=http://47.111.111.111:2380,etcd-3=http://101.111.111.111:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-token"
ETCD_INITIAL_CLUSTER_STATE="new"

2.4.2 配置/etc/systemd/system/etcd.service文件

etcd配置为后台服务配置文件:在/etc/systemd/system目录下新建etcd.service文件,三台节点配置相同。
etcd-1、etcd-2、etcd-3:

powershell 复制代码
vim /etc/systemd/system/etcd.service

[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
 
[Service]
User=root
Type=notify
EnvironmentFile=-/etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000
 
[Install]
WantedBy=multi-user.target

2.5 启动ectd服务

powershell 复制代码
#使etcd.service文件修改生效
systemctl daemon-reload 
systemctl enable etcd
#启动etcd服务
systemctl start etcd 
#查看服务状态
systemctl status etcd

2.6 查看集群成员信息

powershell 复制代码
etcdctl member list --write-out=table

2.7 查看集群状态

powershell 复制代码
etcdctl --endpoints=http://127.0.0.1:2379,http://47.111.1111.111:2379,http://101.111.111.111:2379 endpoint status --write-out=table

可以看到ecs1机器是leader,其他两台为follower,群集成功运行

另外执行etcdctl命令如果加上--write-out=table表示以表格的形式输出结果,有title,方便看数据。

相关推荐
TDengine (老段)6 小时前
TDengine 常见问题 TOP7
大数据·数据库·时序数据库·常见问题·tdengine·涛思数据
+VX:Fegn08956 小时前
计算机毕业设计|基于java+ vue共享单车信息系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
mysqloffice6 小时前
数智时代,核心系统数据库架构往哪走
数据库·人工智能
l1t6 小时前
DeepSeek总结的 pgColumnar 1.0-alpha4 发布说明
数据库·postgresql
DBA_G6 小时前
南大通用GBase 8s数据库助力某农商行核心系统投产
数据库
工业涂料百问7 小时前
【环保合规】系列(四)工业涂料碳足迹怎么算?边界定义、因子选择与减排优先级拆解
数据库
wuyk5558 小时前
【Socket 进阶之路】第 7 章 IO 多路复用 select & poll 完整实战|多 fd 监听、超时等待、优缺点横向对比
服务器·开发语言·网络·数据库·物联网
文人sec8 小时前
grant 之后要跟着 flush privileges 吗?要不要使用分区表?
数据库·mysql·adb·数据分析
Omics Pro8 小时前
上海AI Lab孙思琦×高张阳:虚拟细胞代码库智能体
数据库·人工智能·算法·机器学习·自然语言处理
旺仔不是程序员9 小时前
相关子查询与性能优化:PostgreSQL 逐行执行的代价与 JOIN 重写
数据库·后端·sql