目的
当前使用中的 etcd 集群版本为 3.1.10
使用中数据格式为 version 2
需要转换格式为 version3 并升级 etcd 至 3.5 版本
注意
官方文档中有提及, version 2 版本格式不支持直接升级至 3.2 以上
因此需要先从 3.1.X 版本中转换 etcd 数据格式为 version 3
然后从 3.1.x 通过 version3 备份恢复方法完成数据迁移
步骤
etcd 集群 3.1.10 数据备份
备份数据恢复至 3.1.20 版本
从 3.1.20 版本中备份 version 3 专用格式
把备份数据恢复至 etcd 3.5 单机版本
对 etcd 3.5 单机进行扩容至多个 etcd 服务器
信息
键 | 信息 |
---|---|
etcd 3.1.20 配置 | /apps/conf/etcd/etcd31.conf |
etcd 3.1.20 文件 | /apps/svr/etcd31 |
etcd 3.1.20 服务 | /usr/lib/systemd/system/etcd31.service |
etcd 3.1.20 数据目录 | /apps/dat/etcd/v31 |
etcd 3.5 配置 | /apps/conf/etcd/etcd35.conf |
etcd 3.5 文件 | /apps/svr/etcd35 |
etcd 3.5 服务 | /usr/lib/systemd/system/etcd35.service |
etcd 3.5 数据目录 | /apps/dat/etcd/v35 |
备份 etcd 3.1.10 数据方法
/apps/dat/etcd/v31 使用中的集群的数据存放目录
/tmp/etcdbakcup 备份位置
建议对使用中的 etcd 集群抽其中一台进行停机备份,备份后再恢复服务
etcdctl backup --data-dir /apps/dat/etcd/v31 --backup-dir /tmp/etcdbakcup
tar cf etcdbackup.tar /tmp/etcdbakcup
gzip etcdbackup.tar
备份数据恢复至 3.1.20 版本
配置 3.1.20
etcd31.conf 配置文件
ETCD_NAME="etcd1"
ETCD_DATA_DIR="/apps/dat/etcd/v31"
ETCD_LISTEN_PEER_URLS="http://ip1:2380"
ETCD_LISTEN_CLIENT_URLS="http://ip1:2379,http://127.0.0.1:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://ip1:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"
ETCD_INITIAL_CLUSTER="etcd1=http://ip1:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://ip1:2379"
CERT_FILE="/apps/conf/etcd/ssl/etcd.pem"
KEY_FILE="/apps/conf/etcd/ssl/etcd-key.pem"
PEER_CERT_FILE="/apps/conf/etcd/ssl/etcd.pem"
PEER_KEY_FILE="/apps/conf/etcd/ssl/etcd-key.pem"
TRUSTED_CA_FILE="/apps/conf/etcd/ssl/ca.pem"
PEER_TRUSTED_CA_FILE="/apps/conf/etcd/ssl/ca.pem"
etcd31.service 服务配置
[Unit]
Description=Etcd3 Server
After=network.target
After=network-online.target
Wants=network-online.target
Documentation=https://github.com/coreos/etcd
[Service]
Type=notify
WorkingDirectory=/apps/svr/etcd/
EnvironmentFile=-/apps/conf/etcd/etcd31.conf
ExecStart=/apps/svr/etcd/bin/etcd --name=${ETCD_NAME} \
--data-dir ${ETCD_DATA_DIR} \
--cert-file=${CERT_FILE} \
--key-file=${KEY_FILE} \
--peer-cert-file=${PEER_CERT_FILE} \
--peer-key-file=${PEER_KEY_FILE} \
--trusted-ca-file=${TRUSTED_CA_FILE} \
--peer-trusted-ca-file=${PEER_TRUSTED_CA_FILE} \
--listen-client-urls ${ETCD_LISTEN_CLIENT_URLS} \
--initial-advertise-peer-urls ${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
--listen-peer-urls ${ETCD_LISTEN_PEER_URLS} \
--advertise-client-urls ${ETCD_ADVERTISE_CLIENT_URLS} \
--initial-cluster-token etcd-skydns-cluster \
--initial-cluster ${ETCD_INITIAL_CLUSTER} \
--initial-cluster-state ${ETCD_INITIAL_CLUSTER_STATE} \
--force-new-cluster <-- 这里表示我用备份数据启动 etcd
Restart=on-failure
LimitNOFILE=65536
RestartSec=5
[Install]
WantedBy=multi-user.target
数据恢复至 3.1.20
tar xf etcdbackup.tar.gz
cp -r /tmp/etcdbackup/member /apps/dat/etcd/v31/.
数据导入至 etcd31 并支持 version3 格式
ETCDCTL_API=3 etcdctl migrate --data-dir=/apps/dat/etcd/v31/
using default transformer
2021-11-03 16:09:59.186875 I | etcdserver/api: enabled capabilities for version 3.1
2021-11-03 16:09:59.186987 I | etcdserver/membership: added member 47629d2104e01527 [http://old-cluster-etcd1:2380] to cluster 0 from store
2021-11-03 16:09:59.186997 I | etcdserver/membership: added member 958c7347bbd3d17d [http://old-cluster-etcd2:2380] to cluster 0 from store
2021-11-03 16:09:59.187003 I | etcdserver/membership: added member a159fda86b521a17 [http://old-cluster-etcd3:2380] to cluster 0 from store
2021-11-03 16:09:59.187011 I