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,方便看数据。

相关推荐
学地理的小胖砸1 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1231 小时前
Redis解析
数据库·redis·缓存
数据库幼崽2 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd2 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou2 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh3 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵4 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多5 小时前
Linux——mysql主从复制与读写分离
数据库·mysql
初次见面我叫泰隆5 小时前
MySQL——1、数据库基础
数据库·adb
Chasing__Dreams5 小时前
Redis--基础知识点--26--过期删除策略 与 淘汰策略
数据库·redis·缓存