ETCD集群部署并开启身份认证

一、ETCD集群部署

当时主要作为APISIX数据库,但是采用https协议时候apisix总是配置认证不生效,所以采用http形式部署,为了方便理解,以下存在的IP以及密码都为虚拟
三台机器分别为

主机名IP
etcd11.1.1.1
etcd21.1.1.2
etcd31.1.1.3

一、安装前的准备

在开始etcd的安装之前,需要做以下准备工作:

  1. 确定etcd集群的大小和节点数量:etcd集群的大小指的是集群中etcd节点的数量,一般建议至少部署3个节点。如果集群规模较大,可以考虑增加节点数量,以提高可用性和性能。
  2. 确定etcd节点的IP地址和主机名:每个etcd节点都需要有一个唯一的IP地址和主机名。这些信息将用于配置etcd集群。
  3. 确定etcd集群的通信端口:etcd集群使用的默认端口是2379和2380,如果需要使用其他端口,需要在配置文件中进行配置。
  4. 安装etcd二进制文件:etcd可以从官方网站(https://github.com/etcd-io/etcd/releases )下载预编译的二进制文件,也可以通过源代码进行编译。本文将使用预编译的二进制文件进行安装。

二、安装ETCD集群

下载etcd二进制文件
从官方网站(https://github.com/etcd-io/etcd/releases )下载适合自己操作系统的etcd二进制文件。本文以Linux为例,下载文件名为etcd-v3.5.11-linux-amd64.tar.gz的压缩包。
解压缩etcd二进制文件

1、创建工作目录,三台机器都需要执行

#运行文件
mkdir -p /data/service/etcd/bin/
#配置文件
mkdir -p /data/service/etcd/conf/
#日志信息
mkdir -p /data/service/etcd/log/
#数据信息,后续执行启动命令会自动创建
mkdir -p /data/service/etcd/data/

1.1 etcd1机器将下载的压缩包解压缩到指定的目录,例如:/data/service/etcd/bin

cd /data/service/etcd/
rz etcd-v3.5.11-linux-amd64.tar.gz
tar xzvf etcd-v3.5.11-linux-amd64.tar.gz -C /data/service/etcd/bin --strip-components=1

2、分发etcd软件

etcd1上执行

scp /data/service/etcd/bin/etcd* 1.1.1.2:/data/service/etcd/bin
scp /data/service/etcd/bin/etcd* 1.1.1.3:/data/service/etcd/bin

3、创建配置文件

三台机器上分别执行自己的配置信息

etcd1上执行

cat > /data/service/etcd/conf/etcd.conf <<EOF
#[Member]
ETCD_NAME="etcd-1"
ETCD_DATA_DIR="/data/service/etcd/data"
ETCD_LISTEN_PEER_URLS="http://1.1.1.1:2380"
ETCD_LISTEN_CLIENT_URLS="http://1.1.1.1:2379,http://127.0.0.1:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://1.1.1.1:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://1.1.1.1:2379"
ETCD_INITIAL_CLUSTER="etcd-1=http://1.1.1.1:2380,etcd-2=http://1.1.1.2:2380,etcd-3=http://1.1.1.3:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

etcd2上执行

cat > /data/service/etcd/conf/etcd.conf <<EOF
#[Member]
ETCD_NAME="etcd-2"
ETCD_DATA_DIR="/data/service/etcd/data"
ETCD_LISTEN_PEER_URLS="http://1.1.1.2:2380"
ETCD_LISTEN_CLIENT_URLS="http://1.1.1.2:2379,http://127.0.0.1:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://1.1.1.2:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://1.1.1.2:2379"
ETCD_INITIAL_CLUSTER="etcd-1=http://1.1.1.1:2380,etcd-2=http://1.1.1.2:2380,etcd-3=http://1.1.1.3:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

etcd3上执行

cat > /data/service/etcd/conf/etcd.conf <<EOF
#[Member]
ETCD_NAME="etcd-3"
ETCD_DATA_DIR="/data/service/etcd/data"
ETCD_LISTEN_PEER_URLS="http://1.1.1.3:2380"
ETCD_LISTEN_CLIENT_URLS="http://1.1.1.3:2379,http://127.0.0.1:2379"

#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://1.1.1.3:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://1.1.1.3:2379"
ETCD_INITIAL_CLUSTER="etcd-1=http://1.1.1.1:2380,etcd-2=http://1.1.1.2:2380,etcd-3=http://1.1.1.3:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
EOF

上述etcd.conf配置信息说明

ETCD_NAME:节点名称,集群中唯一
ETCD_DATA_DIR:数据目录
ETCD_LISTEN_PEER_URLS:集群通信监听地址
ETCD_LISTEN_CLIENT_URLS:客户端访问监听地址
ETCD_INITIAL_ADVERTISE_PEER_URLS:集群通告地址
ETCD_ADVERTISE_CLIENT_URLS:客户端通告地址
ETCD_INITIAL_CLUSTER:集群节点地址
ETCD_INITIAL_CLUSTER_TOKEN:集群Token
ETCD_INITIAL_CLUSTER_STATE:加入集群的当前状态,new是新集群,existing表示加入已有集群

etcd1、etcd2、etcd3三台机器上分别执行脚本

cat > /etc/systemd/system/etcd.service <<"EOF"
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=notify
EnvironmentFile=-/data/service/etcd/conf/etcd.conf
WorkingDirectory=/data/service/etcd/
ExecStart=/data/service/etcd/bin/etcd \
  --log-outputs=/data/service/etcd/log/etcd.log \
  --log-level=info
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
EOF

参数说明:

–log-outputs表示日志路径

EnvironmentFile表示配置文件路径

4、启动etcd集群

4.1 执行相关启动命令

重新加载服务,三台机器分别执行

systemctl daemon-reload

启动etcd服务命令,三台机器分别执行

#启动服务,先启动的服务会卡主一下,等待其他服务启动
systemctl start etcd

启动成功后设置开机自启,三台机器分别执行

systemctl enable etcd

4.2 检查etcd服务是否正常运行:

systemctl status etcd

如果etcd服务正常运行,应该输出类似以下的信息::active (running)

● etcd.service - Etcd Server
   Loaded: loaded (/etc/systemd/system/etcd.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2024-01-16 13:52:14 CST; 36s ago
 Main PID: 8850 (etcd)
   CGroup: /system.slice/etcd.service
           └─8850 /data/service/etcd/bin/etcd --log-outputs=/data/service/etcd/log/etcd...

Jan 16 13:51:23 ctos-etcd-dev-01 etcd[8850]: {"level":"info","ts":"2024-01-16T13:51:2..."}
Jan 16 13:52:14 ctos-etcd-dev-01 systemd[1]: Started Etcd Server.

4.3 集群状态查询

/data/service/etcd/bin/etcdctl -w table endpoint status --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" member list
ENDPOINTIDVERSIONDB SIZEIS LEADERIS LEARNERRAFT TERMRAFT INDEXRAFT APPLIED INDEXERRORS
http://1.1.1.1:23797**************63.5.1120 kBtruefalse25959
http://1.1.1.2:23799**************e3.5.1120 kBfalsefalse25959
http://1.1.1.3:2379e**************03.5.1120 kBfalsefalse25959

etcdctl的常用子命令

三、开启身份验证

密码统一为aaa123(虚拟密码)

权限相关的命令

  1. 查看认证状态
/data/service/etcd/bin/etcdctl  --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" auth status

默认为false

  1. 开启认证

2.1 创建root用户(执行后输出密码,确认密码)

/data/service/etcd/bin/etcdctl  --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" user add root

2.2 给root用户并赋予root角色

注意:etcd默认存在一个root权限 可以操作任意数据

/data/service/etcd/bin/etcdctl  --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" user grant-role root root

2.3 开启身份认证

#开启认证
/data/service/etcd/bin/etcdctl --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" auth enable
#使用账号密码查询身份认证状态
/data/service/etcd/bin/etcdctl --user=root --password='aaa123' --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" auth status

四、创建新用户供其他模块使用

例如创建对/apisix开头的key具有读写权限的用户(测试用户名guyougao 角色为devops),模版如下:

  1. 创建一个devops角色
/data/service/etcd/bin/etcdctl --user=root --password='aaa123' --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" role add devops
  1. 让devops角色对/dev开头的key有读写权限
/data/service/etcd/bin/etcdctl --user=root --password='aaa123' --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" role grant-permission devops  readwrite /dev --prefix=true

其他相关授权命令

需求命令
对 k1 ~ k100 有读写权限 [k1 k100)grant-permission devops readwrite k1 k100
对/test开头的key只有查询权限grant-permission devops read /test --prefix=true
对/ops开头的key只有写权限grant-permission devops write /ops
  1. 创建guyougao用户(执行后输出密码,确认密码)
/data/service/etcd/bin/etcdctl --user=root --password='aaa123' --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" user add guyougao
  1. 给guyougao用户赋予devops角色
/data/service/etcd/bin/etcdctl --user=root --password='aaa123' --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" user grant-role guyougao devops  
  1. 使用新创建的用户对/dev开头的key进行相关验证
#增加数据
/data/service/etcd/bin/etcdctl --user=guyougao --password='aaa123' --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" put /dev/success success 
#查询数据
/data/service/etcd/bin/etcdctl --user=guyougao --password='aaa123' --endpoints="http://1.1.1.1:2379,http://1.1.1.2:2379,http://1.1.1.3:2379" get /dev/success
 #返回结果表示完成

五、ETCD常用命令

etcdctl的 常用子命令

version: 查看版本
member list: 查看节点状态,learner 情况
endpoint status: 节点状态,leader 情况
endpoint health: 健康状态与耗时
alarm list: 查看警告,如存储满时会切换为只读,产生 alarm
alarm disarm:清除所有警告
set app demo: 写入
get app: 获取
update app demo1:更新
rm app: 删除
mkdir demo 创建文件夹
rmdir dir 删除文件夹
backup 备份
compaction: 压缩
defrag:整理碎片
watch key 监测 key 变化
get / –prefix –keys-only: 查看所有 key


权限相关的命令

role add 创建角色
role delete 删除角色
role get 查看角色
role grant-permission 配置角色权限
role list 查询所有角色
role revoke-permission 撤销角色权限
  • 33
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是在 CentOS 中部署 etcd 集群的步骤: 1. 下载 etcd 安装包 可以从 etcd 官网下载最新版的 etcd 安装包,下载地址为:https://github.com/etcd-io/etcd/releases 2. 解压安装包 将下载的 etcd 安装包解压到指定目录,比如 /usr/local/etcd ``` tar -zxvf etcd-v3.4.13-linux-amd64.tar.gz -C /usr/local/etcd --strip-components=1 ``` 3. 创建 etcd 配置文件 在每个节点上创建 etcd 配置文件,比如 /etc/etcd.conf,配置内容如下: ``` name=node1 # 节点名称,每个节点名称不同 data-dir=/var/lib/etcd # 数据存储目录 initial-cluster=node1=http://192.168.1.1:2380,node2=http://192.168.1.2:2380,node3=http://192.168.1.3:2380 # 集群中所有节点的地址和端口号 initial-advertise-peer-urls=http://192.168.1.1:2380 # 当前节点的地址和端口号 listen-peer-urls=http://192.168.1.1:2380 # 监听地址和端口号 listen-client-urls=http://192.168.1.1:2379,http://127.0.0.1:2379 # 监听客户端连接的地址和端口号,可以指定多个 advertise-client-urls=http://192.168.1.1:2379 # 当前节点对外提供服务的地址和端口号 initial-cluster-state=new # 集群状态,new 表示新建集群 ``` 其中,initial-cluster 中的节点名称和地址需要根据实际情况修改。 4. 启动 etcd 集群 在每个节点上启动 etcd 服务: ``` /usr/local/etcd/etcd --config-file /etc/etcd.conf ``` 5. 验证 etcd 集群 使用 etcdctl 工具验证 etcd 集群是否正常运行: ``` export ETCDCTL_API=3 etcdctl --endpoints=http://192.168.1.1:2379,http://192.168.1.2:2379,http://192.168.1.3:2379 member list ``` 如果返回了所有节点的信息,则说明 etcd 集群已经成功启动。 以上是在 CentOS 中部署 etcd 集群的步骤,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值