k8s的核心组件etcd的安装使用、快照说明及etcd命令详解【含单节点,多节点和新节点加入说明】(1)
整个快照恢复过程略显复杂,但上面这些操作是可以写成脚本的,用脚本一键恢复。无证书快照创建与恢复。
user list Lists all users
user passwd Changes password of user
user grant-role Grants a role to a user
user revoke-role Revokes a role from a user
role add Adds a new role
role delete Deletes a role
role get Gets detailed information of a role
role list Lists all roles
role grant-permission Grants a key to a role
role revoke-permission Revokes a key from a role
check perf Check the performance of the etcd cluster
help
如:创建、查看、删除
文件存储是以表链接的形式。
[root@etcd1 ~]# #/ccx/date1是存储路径,"ccx is superhero"是数据内容
[root@etcd1 ~]# etcdctl put /ccx/date1 “ccx is superhero”
OK
[root@etcd1 ~]# etcdctl get /ccx/date1
/ccx/date1
ccx is superhero
[root@etcd1 ~]#
[root@etcd1 ~]# etcdctl del /ccx/date1
1
[root@etcd1 ~]#
[root@etcd1 ~]# etcdctl get /ccx/date1
其他节点访问该etcd
- 准确来说,叫做远程执行其他etcd命令罢了【注意,这仅仅是远程访问而已,并不是该集群的一部分】
命令:etcdctl --endpoints IP:2379 这跟需要执行的命令
【2和3的版本命令不一样】
- 如下,我在157上查看156这个etc的数据
[root@etcd2 ~]# #我查看3的内容,本地也需要切换到3的环境,否则命令找不到
[root@etcd2 ~]# export ETCDCTL_API=3
[root@etcd2 ~]# etcdctl --endpoints http://192.168.59.156:2379 get /ccx/date1
/ccx/date1
ccx is superhero
[root@etcd2 ~]#
[root@etcd2 ~]#
[root@etcd2 ~]# ip a | grep 59
inet 192.168.59.157/24 brd 192.168.59.255 scope global ens32
[root@etcd2 ~]#
- 比如我之前定义了版本3,现在想让其恢复到默认状态【默认位版本2】
注:k8s在1.5版本以后默认使用的是版本3向etcd写入数据。
- 命令:
unset ETCDCTL_API
[root@etcd1 ~]# export ETCDCTL_API=3
[root@etcd1 ~]#
[root@etcd1 ~]# unset ETCDCTL_API
[root@etcd1 ~]#
====================================================================
- 前面说过,最好是3台,我用2台以配置文件的形式加入,第三台用加入集群的方式。
-
注:这个没有真正的主节点概念,我只是用这个来做第一个配置,为了后面好说明,所以命其为 “主节点”
-
先停止etcd服务并清除现有数据【我是用上面单节点配置的,已经配置并启动etcd服务】
注:必须清空数据,否则会报错
[root@etcd1 ~]# systemctl stop etcd
[root@etcd1 ~]# rm -rf /var/lib/etcd/*
[root@etcd1 ~]#
[root@etcd1 ~]# ls /var/lib/etcd
修改配置文件
-
文件:
/etc/etcd/etcd.conf
-
可以看到,现在配置文件中可用的就这么几行
[root@etcd1 ~]# grep -o ‘[#].*’ /etc/etcd/etcd.conf
ETCD_DATA_DIR=“/var/lib/etcd/default.etcd”
ETCD_LISTEN_PEER_URLS=“http://localhost:2380,http://192.168.59.156:2380”
ETCD_LISTEN_CLIENT_URLS=“http://localhost:2379,http://192.168.59.156:2379”
ETCD_NAME=“default”
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.156:2379”
[root@etcd1 ~]#
-
直接
vim /etc/etcd/etcd.conf
,将里面的东西删完,复制下面内容进去修改IP,其他不变。 -
192.168.59.156为我当前节点IP,192.168.59.157/158为我准备加入该节点的IP
[root@etcd1 ~]# vim /etc/etcd/etcd.conf
#数据存储位置【自定义】
ETCD_DATA_DIR=“/var/lib/etcd/cluster.etcd”
#服务器间通讯端口
ETCD_LISTEN_PEER_URLS=“http://192.168.59.156:2380,http://localhost:2380”
客户端通讯端口
ETCD_LISTEN_CLIENT_URLS=“http://192.168.59.156:2379,http://localhost:2379”
#集群名字【自定义】
ETCD_NAME=“etcd-156”
#端口监听
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.59.156:2380”
#端口监听
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.156:2379”
#所有集群IP信息都需要列出来【自己和要加入该集群的ip,前面的名称是上面的集群名字,不能乱写】
ETCD_INITIAL_CLUSTER=“etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380”
#类似于秘钥【每台上面的这个值要一样】
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
#新集群值必须为new
ETCD_INITIAL_CLUSTER_STATE=“new”
-
参数详细说明:
-
ETCD_DATA_DIR
服务运行数据保存的路径 -
ETCD_NAME
节点名称,默认为default
-ETCD_LISTEN_PEER_URLS
监听的同伴通信的地址,比如http://ip:2380,如果有多个,使用逗号分隔。需要 所有节点都能够访问,所以不要使用 localhost!
-
ETCD_LISTEN_CLIENT_URLS
监听的客户端服务地址 -
ETCD_ADVERTISE_CLIENT_URLS
对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点。 -
ETCD_INITIAL_ADVERTISE_PEER_URLS
对外公告的该节点同伴监听地址,这个值会告诉集群中其他节点 -
ETCD_INITIAL_CLUSTER
集群中所有节点的信息 -
ETCD_INITIAL_CLUSTER_STATE
新建集群的时候,这个值为 new;假如加入已经存在的集群,这个值为 existing。 -
ETCD_INITIAL_CLUSTER_TOKEN
集群的ID,多个集群的时候,每个集群的ID必须保持唯一
导入配置文件到其他节点
- 主节点上将配置文件拷贝到另外一个节点上【导入前要先去另外节点上安装etcd服务】
[root@etcd1 ~]# scp /etc/etcd/etcd.conf 192.168.59.157:/etc/etcd/
root@192.168.59.157’s password:
etcd.conf 100% 567 984.1KB/s 00:00
[root@etcd1 ~]#
- 注:加入主节点其实和主节点的配置是一样的,为了方便说明才命其为:”其他节点“
安装etcd包
- 安装etcd包:
yum -y install etcd
修改配置文件
-
我在主节点上已经将配置文件导入过来了,所以直接将ip和NAME修改即可【其他不变】。
-
修改IP:在编辑界面输入:
:1,6s/156/157/g
可以直接替换1-6行的ip【仅替换1-6行】
- 修改
ETCD_NAME=
,修改规则如下图
- 如,我157修改完毕以后的配置文件信息如下
[root@etcd2 ~]# cat /etc/etcd/etcd.conf
ETCD_DATA_DIR=“/var/lib/etcd/cluster.etcd”
ETCD_LISTEN_PEER_URLS=“http://192.168.59.157:2380,http://localhost:2380”
ETCD_LISTEN_CLIENT_URLS=“http://192.168.59.157:2379,http://localhost:2379”
ETCD_NAME=“etcd-157”
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.59.157:2380”
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.157:2379”
ETCD_INITIAL_CLUSTER=“etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“new”
[root@etcd2 ~]#
启动etcd服务
- 这个玩意有启动顺序的,我们现在主节点上启动该服务
命令:systemctl start etcd
这时候是卡主的【是正常的,要让另外节点etcd服务都起来以后该节点才会启完】
- 然后我们去启动其他节点的etcd服务
命令:systemctl start etcd
[root@etcd2 ~]# systemctl start etcd
[root@etcd2 ~]#
- 这时候主节点的etcd服务才会启动完毕
[root@etcd1 ~]# systemctl start etcd
[root@etcd1 ~]#
- 上面所有节点服务都启动完毕以后,再所有节点执行加入开启启动的命令:
systemctl enable etcd
#注意主机名是3台的
[root@etcd1 ~]# systemctl enable etcd
[root@etcd1 ~]#
[root@etcd2 ~]# systemctl enable etcd
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
[root@etcd2 ~]#
至此,主备节点就配置完毕了
-
所谓新节点加入集群,就是一台新的主机,需要加入到已存在的集群里面
-
这个需要在版本2上完成,所以需要将版本切回2,否则会报member命令不存在。
命令:export ETCDCTL_API=2
安装etcd包
- 安装etcd包:
yum -y install etcd
查看现有节点的leader信息
[root@etcd1 ~]# etcdctl member list
220b656d1029422: name=etcd-157 peerURLs=http://192.168.59.157:2380 clientURLs=http://192.168.59.157:2379,http://localhost:2379 isLeader=false
aaaca50ef34fc86: name=etcd-156 peerURLs=http://192.168.59.156:2380 clientURLs=http://192.168.59.156:2379,http://localhost:2379 isLeader=true
[root@etcd1 ~]#
如上,isLeader=yes
的就是主节点了,下面操作就在这上面进行。
加入节点【命令获取配置文件信息】
-
在主节点上执行:
etcdctl member add 自定义名称 http://ip:2380
【主节点(leader)上执行】 【该命令必须执行】 -
如,我准备将etcd3加入:
执行这个命令以后,下面会出现3行ETCD开头的内容,意思是需要将这3行内容写入配置文件:/etc/etcd/etcd.conf
中,但这3行内容是不够的还需要其他的,所以我们可以直接导入主节点的配置文件更方便。
[root@etcd1 ~]# etcdctl member add etcd-158 http://192.168.59.158:2380
Added member named etcd-158 with ID 9b5d28a80771cff9 to cluster
ETCD_NAME=“etcd-158”
ETCD_INITIAL_CLUSTER=“etcd-157=http://192.168.59.157:2380,etcd-156=http://192.168.59.156:2380,etcd-158=http://192.168.59.158:2380”
ETCD_INITIAL_CLUSTER_STATE=“existing”
[root@etcd1 ~]#
- 执行上面条代码更主要的是能查看到该节点信息了,虽然不完整【因为配置文件没配置哦】
[root@etcd1 ~]# etcdctl member list
220b656d1029422: name=etcd-157 peerURLs=http://192.168.59.157:2380 clientURLs=http://192.168.59.157:2379,http://localhost:2379 isLeader=false
aaaca50ef34fc86: name=etcd-156 peerURLs=http://192.168.59.156:2380 clientURLs=http://192.168.59.156:2379,http://localhost:2379 isLeader=true
9b5d28a80771cff9[unstarted]: peerURLs=http://192.168.59.158:2380
[root@etcd1 ~]#
- 配置文件继续往下看
修改配置文件
- 上面说过,直接导入主配置文件更方便,先导入吧【任意已存在节点上操作都可以】
[root@etcd1 ~]# scp /etc/etcd/etcd.conf 192.168.59.158:/etc/etcd/
root@192.168.59.158’s password:
etcd.conf 100% 567 984.1KB/s 00:00
[root@etcd1 ~]#
-
修改IP:在编辑界面输入:
:1,6s/156/157/g
可以直接替换1-6行的ip【仅替换1-6行】【参考上面】 -
此外,还需要新增和修改下面2样内容。
- 修改完毕以后的代码如下 【注:只修改这一个节点即可,主备节点不需要修改】
[root@etcd3 ~]# cat /etc/etcd/etcd.conf
ETCD_DATA_DIR=“/var/lib/etcd/cluster.etcd”
ETCD_LISTEN_PEER_URLS=“http://192.168.59.158:2380,http://localhost:2380”
ETCD_LISTEN_CLIENT_URLS=“http://192.168.59.158:2379,http://localhost:2379”
ETCD_NAME=“etcd-158”
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.59.158:2380”
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.158:2379”
ETCD_INITIAL_CLUSTER=“etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380,etcd-158=http://192.168.59.158:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“existing”
[root@etcd3 ~]#
启动etcd服务
- 直接启动服务即可,一定要确定状态为:
active
,如果状态不对,处理方法看下面的。。。处理方法
[root@etcd3 ~]# systemctl start etcd
[root@etcd3 ~]# systemctl is-active etcd
active
[root@etcd3 ~]#
- 然后加入开机启动
[root@etcd3 ~]# systemctl enable etcd
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.
[root@etcd3 ~]#
启动etcd服务正常,但etcd状态为inactive处理方法
-
是这样的,我上面新节点加入是我之前配置过的,所以当我用新加入方式的时候,最后启动该服务就是有问题,也是折腾了一会才想起是因为做过配置,导致服务不能启动的。
-
内容如下
服务启动不会报错,但状态就是不会为:active
[root@etcd3 ~]# systemctl restart etcd
[root@etcd3 ~]# systemctl status etcd
● etcd.service - Etcd Server
Loaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)
Active: inactive (dead) since 三 2021-07-14 17:44:36 CST; 1s ago
Process: 2530 ExecStart=/bin/bash -c GOMAXPROCS= ( n p r o c ) / u s r / b i n / e t c d − − n a m e = " (nproc) /usr/bin/etcd --name=" (nproc)/usr/bin/etcd−−name="{ETCD_NAME}" --data-dir=“ E T C D D A T A D I R " − − l i s t e n − c l i e n t − u r l s = " {ETCD_DATA_DIR}" --listen-client-urls=" ETCDDATADIR"−−listen−client−urls="{ETCD_LISTEN_CLIENT_URLS}” (code=exited, status=0/SUCCESS)
Main PID: 2530 (code=exited, status=0/SUCCESS)
-
原因:这是因为该节点之前配置过,有存储信息,所以导致该情况发生
-
处理方法
直接执行:rm -rf /var/lib/etcd/*
删除数据,然后重启就正常了
[root@etcd3 ~]# rm -rf /var/lib/etcd/*
[root@etcd3 ~]#
[root@etcd3 ~]# systemctl start etcd
[root@etcd3 ~]# systemctl status etcd
● etcd.service - Etcd Server
Loaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)
Active: active (running) since 三 2021-07-14 17:46:23 CST; 2s ago
Main PID: 2595 (etcd)
CGroup: /system.slice/etcd.service
└─2595 /usr/bin/etcd --name=etcd-158 --data-dir=/var/lib/etcd/cluster.etcd --listen-client-urls=http://192.168.59.158:2379,http://localhost:2379
- 通过命令可以看到leader是etcd-156【主机名etcd1】
[root@etcd3 ~]# etcdctl member list
220b656d1029422: name=etcd-157 peerURLs=http://192.168.59.157:2380 clientURLs=http://192.168.59.157:2379,http://localhost:2379 isLeader=false
aaaca50ef34fc86: name=etcd-156 peerURLs=http://192.168.59.156:2380 clientURLs=http://192.168.59.156:2379,http://localhost:2379 isLeader=true
9b5d28a80771cff9: name=etcd-158 peerURLs=http://192.168.59.158:2380 clientURLs=http://192.168.59.158:2379,http://localhost:2379 isLeader=false
[root@etcd3 ~]#
- etcd1和etcd2是做的主备,etcd3是用命令加入的
用空白行隔开了,注意看主机名
[root@etcd1 ~]# cat /etc/etcd/etcd.conf
ETCD_DATA_DIR=“/var/lib/etcd/cluster.etcd”
ETCD_LISTEN_PEER_URLS=“http://192.168.59.156:2380,http://localhost:2380”
ETCD_LISTEN_CLIENT_URLS=“http://192.168.59.156:2379,http://localhost:2379”
ETCD_NAME=“etcd-156”
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.59.156:2380”
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.156:2379”
ETCD_INITIAL_CLUSTER=“etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“new”
[root@etcd1 ~]#
[root@etcd2 ~]# cat /etc/etcd/etcd.conf
ETCD_DATA_DIR=“/var/lib/etcd/cluster.etcd”
ETCD_LISTEN_PEER_URLS=“http://192.168.59.157:2380,http://localhost:2380”
ETCD_LISTEN_CLIENT_URLS=“http://192.168.59.157:2379,http://localhost:2379”
ETCD_NAME=“etcd-157”
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.59.157:2380”
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.157:2379”
ETCD_INITIAL_CLUSTER=“etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“new”
[root@etcd2 ~]#
[root@etcd3 ~]# cat /etc/etcd/etcd.conf
ETCD_DATA_DIR=“/var/lib/etcd/cluster.etcd”
ETCD_LISTEN_PEER_URLS=“http://192.168.59.158:2380,http://localhost:2380”
ETCD_LISTEN_CLIENT_URLS=“http://192.168.59.158:2379,http://localhost:2379”
ETCD_NAME=“etcd-158”
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.59.158:2380”
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.158:2379”
ETCD_INITIAL_CLUSTER=“etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380,etcd-158=http://192.168.59.158:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“existing”
[root@etcd3 ~]#
- 如,我在节点1和节点2上分别创建一个文件,然后去节点3上查看,可以看到数据是同步的即正常
注意看主机名【用空白行隔开了】
下面是默认版本2
[root@etcd1 ~]# etcdctl mkdir /etcd1
[root@etcd1 ~]#
[root@etcd2 ~]# etcdctl mkdir /etcd2
[root@etcd2 ~]#
[root@etcd3 ~]# etcdctl ls /
/etcd1
/etcd2
[root@etcd3 ~]#
- 版本3也是一样可以同步的 ,但需要注意同一目录下数据会被覆盖
如下,我在节点1上写入了hero1,然后去2节点上写入hero2,最终看到的是hero2 【注意,3版本在生产环境千万不能这么搞,这么搞数据就丢了】
[root@etcd1 ~]# export ETCDCTL_API=3
[root@etcd1 ~]# etcdctl put /ccx hero1
OK
[root@etcd1 ~]#
[root@etcd2 ~]# etcdctl put /ccx hero2
OK
[root@etcd2 ~]#
版本3和版本2还不一样,3版本是以表链接形式,统一目录下数据会被覆盖,不能共存【2版本可以】
[root@etcd3 ~]# etcdctl get /ccx
/ccx
hero2
[root@etcd3 ~]#
===========================================================================
- 快照是:
etcdctl 3
版本里来做的
先在每台上执行3的环境变量:export ETCDCTL_API=3
- 现在我们创建2组数据,用来测试后面的快照恢复。
[root@etcd1 ~]# etcdctl put date1 “hello word”
OK
[root@etcd1 ~]# etcdctl put date2 “hello word_new”
OK
[root@etcd1 ~]#
[root@etcd3 ~]# etcdctl get date1
date1
hello word
[root@etcd3 ~]# etcdctl get date2
date2
hello word_new
[root@etcd3 ~]#
- 命令:
etcdctl snap --help
这里面有很多详细说明
- 但我这关注使用,下翻有一个COMMANDS选项,里说使用
如:save是做快照,restore是恢复快照。
[root@etcd3 ~]# etcdctl snap --help | grep -A 5 COMMANDS:
COMMANDS:
save Stores an etcd node backend snapshot to a given file
restore Restores an etcd member snapshot to an etcd directory
status Gets backend snapshot status of a given file
GLOBAL OPTIONS:
[root@etcd3 ~]#
创建快照【无证书】
- 命令:
etcdctl snap save 自定义名称
注:当前所在什么目录,打包的数据就存放在什么目录
- 如:我将我现在的数据打包为:
snap1.date
[root@etcd3 /]# etcdctl snap save snap1.date
Snapshot saved at snap1.date
[root@etcd3 /]#
[root@etcd3 /]# ls | grep sna
snap1.date
[root@etcd3 /]#
恢复快照【无证书】
- 恢复前我先删除现有做过快照的数据
[root@etcd3 /]# etcdctl del date1
1
[root@etcd3 /]#
[root@etcd3 /]# etcdctl del date2
1
[root@etcd3 /]#
快照拷贝至其他节点
- 然后将备份的数据拷贝到其他节点【我etcd3上做的快照,所以就拷贝到1和2上】
也就是说,虽然写数据仅在其中一个节点写会自动同步到其他节点,但恢复数据需要在每一个节点上都操作一遍,不能仅在其中某些节点操作!
[root@etcd3 /]# ls | grep sna
snap1.date
[root@etcd3 /]#
[root@etcd3 /]# scp snap1.date 192.168.59.156:/
The authenticity of host ‘192.168.59.156 (192.168.59.156)’ can’t be established.
ECDSA key fingerprint is SHA256:zRtVBoNePoRXh9aA8eppKwwduS9Rjjr/kT5a7zijzjE.
ECDSA key fingerprint is MD5:b8:53:cc:da:86:2a:97:dc:bd:64:6b:b1:d0:f3:02:ce.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.59.156’ (ECDSA) to the list of known hosts.
root@192.168.59.156’s password:
Permission denied, please try again.
root@192.168.59.156’s password:
snap1.date 100% 20KB 10.9MB/s 00:00
[root@etcd3 /]# scp snap1.date 192.168.59.157:/
The authenticity of host ‘192.168.59.157 (192.168.59.157)’ can’t be established.
ECDSA key fingerprint is SHA256:zRtVBoNePoRXh9aA8eppKwwduS9Rjjr/kT5a7zijzjE.
ECDSA key fingerprint is MD5:b8:53:cc:da:86:2a:97:dc:bd:64:6b:b1:d0:f3:02:ce.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.59.157’ (ECDSA) to the list of known hosts.
root@192.168.59.157’s password:
snap1.date 100% 20KB 11.4MB/s 00:00
[root@etcd3 /]#
[root@etcd3 /]#
etcd数据清除【所有节点同步操作】
- 先停止所有节点的etcd服务
[root@etcd3 /]# systemctl stop etcd
[root@etcd2 /]# systemctl stop etcd
[root@etcd1 /]# systemctl stop etcd
- 删除现有全部数据
[root@etcd1 ~]# rm -rf /var/lib/etcd/*
[root@etcd2 ~]# rm -rf /var/lib/etcd/*
[root@etcd3 ~]# rm -rf /var/lib/etcd/*
开始数据恢复【所有节点同步操作】
- 给快照文件添加etcd的组和用户,免得没有权限访问报错
【注:默认是有etcd这个用户的,在快照文件目录下执行chown etcd.etcd 快照文件
即可
[root@etcd3 /]# cat /etc/passwd| grep etcd
etcd❌997:995:etcd user:/var/lib/etcd:/sbin/nologin
[root@etcd3 /]#
[root@etcd3 /]# ls | grep snap
snap1.date
[root@etcd3 /]#
[root@etcd3 /]# chown etcd.etcd snap1.date
[root@etcd3 /]#
[root@etcd3 /]#
[root@etcd2 /]# chown etcd.etcd snap1.date
[root@etcd1 /]# chown etcd.etcd snap1.date
- 数据恢复模版
【在快照文件目录下操作】
etcdctl snapshot restore 快照数据文件 --name 配置文件拷贝过来【不固定】 --initial-cluster 配置文件拷贝过来【这是固定的,一次拷贝所以节点相同】 --initial-advertise-peer-urls 配置文件拷贝过来【不固定】 --data-dir /var/lib/etcd/cluster.etcd
-
配置文件路径:
/etc/etcd/etcd.conf
-
为了好理解,我在这分开做说明吧,仅下面3个参数需要修改
-
--name
对应配置文件中:ETCD_NAME
-
--initial-cluster
对应配置文件中:ETCD_INITIAL_CLUSTER
【3个节点该内容都一样,需要注意,必须所有节点信息都要列出来】 -
--initial-advertise-peer-urls
对应配置文件中:ETCD_INITIAL_ADVERTISE_PEER_URLS
恢复etcd1
- 修改的信息在上面都说了,如果还是没明白修改参数的,我用图片圈出来对应关心了,这样应该懂了吧!
- 配置文件内容:
[root@etcd1 /]#
[root@etcd1 /]# cat /etc/etcd/etcd.conf
ETCD_DATA_DIR=“/var/lib/etcd/cluster.etcd”
ETCD_LISTEN_PEER_URLS=“http://192.168.59.156:2380,http://localhost:2380”
ETCD_LISTEN_CLIENT_URLS=“http://192.168.59.156:2379,http://localhost:2379”
ETCD_NAME=“etcd-156”
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.59.156:2380”
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.156:2379”
ETCD_INITIAL_CLUSTER=“etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“new”
[root@etcd1 /]#
- 恢复数据代码及成功提示符如下
[root@etcd1 /]# etcdctl snapshot restore snap1.date --name etcd-156 --initial-cluster etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380,etcd-158=http://192.168.59.158:2380 --initial-advertise-peer-urls http://192.168.59.156:2380 --data-dir /var/lib/etcd/cluster.etcd
2021-07-15 12:34:52.751689 I | etcdserver/membership: added member 220b656d1029422 [http://192.168.59.157:2380] to cluster bf1393a8380b1115
2021-07-15 12:34:52.751800 I | etcdserver/membership: added member aaaca50ef34fc86 [http://192.168.59.156:2380] to cluster bf1393a8380b1115
2021-07-15 12:34:52.751823 I | etcdserver/membership: added member 240bc0d12da09d72 [http://192.168.59.158:2380] to cluster bf1393a8380b1115
[root@etcd1 /]#
恢复etcd2
-
直接拷贝etcd1上的恢复代码,修改
--name
和--initial-advertise-peer-urls
即可,其他不变 -
配置文件内容
[root@etcd2 /]# cat /etc/etcd/etcd.conf
ETCD_DATA_DIR=“/var/lib/etcd/cluster.etcd”
ETCD_LISTEN_PEER_URLS=“http://192.168.59.157:2380,http://localhost:2380”
ETCD_LISTEN_CLIENT_URLS=“http://192.168.59.157:2379,http://localhost:2379”
ETCD_NAME=“etcd-157”
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.59.157:2380”
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.157:2379”
ETCD_INITIAL_CLUSTER=“etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“new”
[root@etcd2 /]#
- 恢复数据代码及成功提示符如下
[root@etcd2 /]# etcdctl snapshot restore snap1.date --name etcd-157 --initial-cluster etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380,etcd-158=http://192.168.59.158:2380 --initial-advertise-peer-urls http://192.168.59.157:2380 --data-dir /var/lib/etcd/cluster.etcd
2021-07-15 12:53:30.860174 I | etcdserver/membership: added member 220b656d1029422 [http://192.168.59.157:2380] to cluster bf1393a8380b1115
2021-07-15 12:53:30.860269 I | etcdserver/membership: added member aaaca50ef34fc86 [http://192.168.59.156:2380] to cluster bf1393a8380b1115
2021-07-15 12:53:30.860290 I | etcdserver/membership: added member 240bc0d12da09d72 [http://192.168.59.158:2380] to cluster bf1393a8380b1115
[root@etcd2 /]#
恢复etcd3
-
直接拷贝etcd1上的恢复代码,修改
--name
和--initial-advertise-peer-urls
即可,其他不变 -
配置文件内容
[root@etcd3 /]# cat /etc/etcd/etcd.conf
ETCD_DATA_DIR=“/var/lib/etcd/cluster.etcd”
ETCD_LISTEN_PEER_URLS=“http://192.168.59.158:2380,http://localhost:2380”
ETCD_LISTEN_CLIENT_URLS=“http://192.168.59.158:2379,http://localhost:2379”
ETCD_NAME=“etcd-158”
ETCD_INITIAL_ADVERTISE_PEER_URLS=“http://192.168.59.158:2380”
ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.158:2379”
ETCD_INITIAL_CLUSTER=“etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380,etcd-158=http://192.168.59.158:2380”
ETCD_INITIAL_CLUSTER_TOKEN=“etcd-cluster”
ETCD_INITIAL_CLUSTER_STATE=“existing”
[root@etcd3 /]#
- 恢复数据代码及成功提示符如下
[root@etcd3 /]# etcdctl snapshot restore snap1.date --name etcd-158 --initial-cluster etcd-156=http://192.168.59.156:2380,etcd-157=http://192.168.59.157:2380,etcd-158=http://192.168.59.158:2380 --initial-advertise-peer-urls http://192.168.59.158:2380 --data-dir /var/lib/etcd/cluster.etcd
2021-07-15 12:54:24.757913 I | etcdserver/membership: added member 220b656d1029422 [http://192.168.59.157:2380] to cluster bf1393a8380b1115
2021-07-15 12:54:24.758030 I | etcdserver/membership: added member aaaca50ef34fc86 [http://192.168.59.156:2380] to cluster bf1393a8380b1115
2021-07-15 12:54:24.758055 I | etcdserver/membership: added member 240bc0d12da09d72 [http://192.168.59.158:2380] to cluster bf1393a8380b1115
[root@etcd3 /]#
数据文件权限赋予【所有节点操作】
- 最后需要给数据文件赋予etcd分组,以免权限不足。
命令:chown -R etcd.etcd /var/lib/etcd
[root@etcd1 /]# chown -R etcd.etcd /var/lib/etcd/
[root@etcd2 /]# chown -R etcd.etcd /var/lib/etcd/
[root@etcd3 /]# chown -R etcd.etcd /var/lib/etcd/
启动etcd服务【所有节点】
- 命令:
systemctl start etcd
第一个节点启动的时候会卡主是正常的,最少2个节点启动以后才行。
[root@etcd3 /]# systemctl start etcd
[root@etcd2 /]# systemctl start etcd
[root@etcd1 /]# systemctl start etcd
测试
直接执行查看命令,之前的数据能出来即快照恢复成功。
[root@etcd3 /]# etcdctl get date1
date1
hello word
[root@etcd3 /]#
[root@etcd3 /]# etcdctl get date2
date2
hello word_new
[root@etcd3 /]#
[root@etcd2 /]# etcdctl get date1
date1
hello word
[root@etcd2 /]#
[root@etcd1 /]# etcdctl get date2
date2
hello word_new
[root@etcd1 /]#
总结
整个快照恢复过程略显复杂,但上面这些操作是可以写成脚本的,用脚本一键恢复。
创建快照【有证书】
- 相关证书参数在–help中OPTIONS下面都是有说明的,下面一般是必带参数了
/path路径不是固定的,存放在哪就定义什么路径,https处替换为服务地址即可。
etcdctl snap save --cacert=“/path/cacent” --cert=“/path/cert” --key=“/path/key” --endpoints=https://127.0.0.1:2379
- 因为我环境中没有证书,做不了演示。
恢复快照【有证书】
因为我没有证书环境,所以没法测试,但理论上恢复快照的方式和没证书是一样的,所以可以直接参考上面无证书快照恢复方式。
==========================================================================
k8s中的etcd是以容器的方式运行的,但是端口这些和上面说的一样,且写数据的方式是用的版本3。
[root@master ~]# kubectl get pods -n kube-system | grep etcd
etcd-master 1/1 Running 4 3d5h
[root@master ~]#
k8s中的etcd配置文件是以yaml的形式存在的:/etc/kubernetes/manifests/etcd.yaml
[root@master ~]# cat /etc/kubernetes/manifests/etcd.yaml |grep -A 20 command:
-
command:
-
etcd
-
–advertise-client-urls=https://192.168.59.142:2379
-
–cert-file=/etc/kubernetes/pki/etcd/server.crt
-
–client-cert-auth=true
-
–data-dir=/var/lib/etcd
-
–initial-advertise-peer-urls=https://192.168.59.142:2380
-
–initial-cluster=master=https://192.168.59.142:2380
-
–key-file=/etc/kubernetes/pki/etcd/server.key
-
–listen-client-urls=https://127.0.0.1:2379,https://192.168.59.142:2379
-
–listen-metrics-urls=http://127.0.0.1:2381
-
–listen-peer-urls=https://192.168.59.142:2380
-
–name=master
-
–peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
-
–peer-client-cert-auth=true
-
–peer-key-file=/etc/kubernetes/pki/etcd/peer.key
-
–peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
-
–snapshot-count=10000
-
–trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
image: registry.aliyuncs.com/google_containers/etcd:3.4.13-0
imagePullPolicy: IfNotPresent
[root@master ~]#
- 其实上面配置文件中有说明,容器中etcd的存储位置是:
- --data-dir=/var/lib/etcd
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
知其然不知其所以然,大厂常问面试技术如何复习?
1、热门面试题及答案大全
面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer
2、多线程、高并发、缓存入门到实战项目pdf书籍
3、文中提到面试题答案整理
4、Java核心知识面试宝典
覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
oogle_containers/etcd:3.4.13-0
imagePullPolicy: IfNotPresent
[root@master ~]#
- 其实上面配置文件中有说明,容器中etcd的存储位置是:
- --data-dir=/var/lib/etcd
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-jWvPLM9p-1713337999689)]
[外链图片转存中…(img-DV93pHBb-1713337999690)]
[外链图片转存中…(img-IjjIrJLW-1713337999690)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
知其然不知其所以然,大厂常问面试技术如何复习?
1、热门面试题及答案大全
面试前做足功夫,让你面试成功率提升一截,这里一份热门350道一线互联网常问面试题及答案助你拿offer
[外链图片转存中…(img-98dYcVC0-1713337999691)]
2、多线程、高并发、缓存入门到实战项目pdf书籍
[外链图片转存中…(img-my5QEMd9-1713337999691)]
[外链图片转存中…(img-GOwFRqhU-1713337999691)]
[外链图片转存中…(img-mh87ASX4-1713337999692)]
3、文中提到面试题答案整理
[外链图片转存中…(img-apfyVncH-1713337999692)]
4、Java核心知识面试宝典
覆盖了JVM 、JAVA集合、JAVA多线程并发、JAVA基础、Spring原理、微服务、Netty与RPC、网络、日志、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB 、Cassandra、设计模式、负载均衡、数据库、一致性算法 、JAVA算法、数据结构、算法、分布式缓存、Hadoop、Spark、Storm的大量技术点且讲解的非常深入
[外链图片转存中…(img-2HlSQkAR-1713337999692)]
[外链图片转存中…(img-nZPYRv3B-1713337999692)]
[外链图片转存中…(img-psvAhrGn-1713337999693)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
更多推荐
所有评论(0)