k8s的核心组件etcd的安装使用、快照说明及etcd命令详解【含单节点,多节点和新节点加入说明】
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。
见下面多节点配置中:“新节点加入集群”,有详细说明
-
命令:
etcdctl member remove id
【ID用命令:etcdctl member list
查看,开头的一串数字就是ID】 -
如,我删除158这个成员
[root@etcd1 ~]# etcdctl member list | grep 158
240bc0d12da09d72: name=etcd-158 peerURLs=http://192.168.59.158:2380 clientURLs=http://192.168.59.158:2379,http://localhost:2379 isLeader=false
[root@etcd1 ~]#
[root@etcd1 ~]# etcdctl member remove 240bc0d12da09d72
Removed member 240bc0d12da09d72 from cluster
[root@etcd1 ~]#
[root@etcd1 ~]# etcdctl member list | grep 158
[root@etcd1 ~]#
-
如果是通过快照恢复,还会清除默认数据目录的所有内容,所以备份整个数据目录和快照是冲突的,主要是说明一下etcdctl中backup的使用以及etcd的默认数据目录罢了。
-
默认的数据目录为
/var/lib/etcd/
[root@etcd1 ~]# etcdctl backup --data-dir /var/lib/etcd --backup-dir /tmp/etcd
2021-07-14 10:40:01.869919 I | open /var/lib/etcd/member/snap: no such file or directory
[root@etcd1 ~]# cd /tmp/etcd
[root@etcd1 etcd]# ls
member
[root@etcd1 etcd]#
-
参数说明:
-
--data-dir
:指明数据目录的位置 -
--backup-dir
:指明备份的位置
=================================================================================
安装etcd包
- 安装etcd包:
yum -y install etcd
配置文件编辑
-
3台虚拟机,仅用一个节点操作即可【是单节点配置】。
-
安装完毕后配置文件如下:
[root@etcd1 etcd]# cd /etc/etcd/
[root@etcd1 etcd]# ls
etcd.conf
[root@etcd1 etcd]#
- 编辑前还是先备份一下源文件:
[root@etcd1 etcd]# cp /etc/etcd/etcd.conf /
- 注意,配置文件中的所有参数在下面这篇博客中有详细说明,自行去查看对比,我在这就不对参数做说明,仅对修改内容做说明
博客连接。。。。。。
- 需要修改的内容如下:
[root@etcd1 etcd]# vim /etc/etcd/etcd.conf
1 #[Member]
2 #下面行是存储位置,可以自定义位置【我是用的默认】
3 ETCD_DATA_DIR=“/var/lib/etcd/default.etcd”
4 #下面3380需要取消注释,和3379后面都需要加上自己ip:port【默认用的是回环端口】
5 ETCD_LISTEN_PEER_URLS=“http://localhost:2380,http://192.168.59.156:2380”
6 ETCD_LISTEN_CLIENT_URLS=“http://localhost:2379,http://192.168.59.156:2379”
7 #
8 #下面是etcd名字,可以自定义【我用的默认】
9 ETCD_NAME=“default”
19 #[Clustering]
20 #添加下面的ip,让其监听该端口
21 ETCD_ADVERTISE_CLIENT_URLS=“http://localhost:2379,http://192.168.59.156:2379”
22 #ETCD_DISCOVERY=“”
#其他参数可以不用动,直接保存退出
服务加入开机启动
因为我不是第一次执行,所以没有打印任何内容。
[root@etcd1 ~]# systemctl enable etcd --now
[root@etcd1 ~]#
[root@etcd1 ~]# systemctl is-active etcd
active
[root@etcd1 ~]#
-
这里面有使用的说明,多看看这里面。
-
方式一:
etcdctl --help
-
方式二:
man etcdctl
-
etcd写入数据有2个版本,版本2和版本3,默认使用的版本2
注:版本2个版本3写入数据的方式是不一样的且不可混用。
- 默认使用的是版本2,如果切换到版本3了,使用下面命令切换版本2的环境。
命令:export ETCDCTL_API=2
查看所有命令
- 执行:
etcdctl --help
下拉,有一个COMMANDS
,这里面就是2版本的所有命令了【和linux命令类似】
COMMANDS:
backup backup an etcd directory
cluster-health check the health of the etcd cluster
mk make a new key with a given value
mkdir make a new directory
rm remove a key or a directory
rmdir removes the key if it is an empty directory or a key-value pair
get retrieve the value of a key
ls retrieve a directory
set set the value of a key
setdir create a new directory or update an existing directory TTL
update update an existing key with a given value
updatedir update an existing directory
watch watch a key for changes
exec-watch watch a key for changes and exec an executable
member member add, remove and list subcommands
user user add, grant and revoke subcommands
role role add, grant and revoke subcommands
auth overall auth controls
help, h Shows a list of commands or help for one command
如:创建、查看、删除
[root@etcd1 ~]# etcdctl ls /
[root@etcd1 ~]#
[root@etcd1 ~]# etcdctl mkdir /aa
[root@etcd1 ~]#
[root@etcd1 ~]# etcdctl ls /
/aa
[root@etcd1 ~]#
[root@etcd1 ~]# etcdctl rmdir /aa
[root@etcd1 ~]#
[root@etcd1 ~]# etcdctl ls /
[root@etcd1 ~]#
其他节点访问该etcd
- 准确来说,叫做远程执行其他etcd命令罢了【注意,这仅仅是远程访问而已,并不是该集群的一部分】
命令:etcdctl --endpoints IP:2379 这跟需要执行的命令
【2和3的版本命令不一样】
- 如下,我在157上查看156这个etc的数据
[root@etcd2 ~]# etcdctl --endpoints http://192.168.59.156:2379 ls /
/aa
[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了。
命令:export ETCDCTL_API=3
查看所有命令
- 我执行了3的环境变量后,直接执行:
etcdctl --help
下拉,有一个COMMANDS
,这里面就是3版本的所有命令了【这个更像数据库】,可以看到比2多很多,而且使用方式也变了
COMMANDS:
get Gets the key or a range of keys
put Puts the given key into the store
del Removes the specified key or range of keys [key, range_end)
txn Txn processes all the requests in one transaction
compaction Compacts the event history in etcd
alarm disarm Disarms all alarms
alarm list Lists all alarms
defrag Defragments the storage of the etcd members with given endpoints
endpoint health Checks the healthiness of endpoints specified in --endpoints
flag
endpoint status Prints out the status of endpoints specified in --endpoints
flag
endpoint hashkv Prints the KV history hash for each endpoint in --endpoints
move-leader Transfers leadership to another etcd cluster member.
watch Watches events stream on keys or prefixes
version Prints the version of etcdctl
lease grant Creates leases
lease revoke Revokes leases
lease timetolive Get lease information
lease list List all active leases
lease keep-alive Keeps leases alive (renew)
member add Adds a member into the cluster
member remove Removes a member from the cluster
member update Updates a member in the cluster
member list Lists all members in the cluster
snapshot save Stores an etcd node backend snapshot to a given file
snapshot restore Restores an etcd member snapshot to an etcd directory
snapshot status Gets backend snapshot status of a given file
make-mirror Makes a mirror at the destination etcd cluster
migrate Migrates keys in a v2 store to a mvcc store
lock Acquires a named lock
elect Observes and participates in leader election
auth enable Enables authentication
auth disable Disables authentication
user add Adds a new user
user delete Deletes a user
user get Gets detailed information of a user
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
- 数据恢复模版
【在快照文件目录下操作】
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
[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
- 数据恢复模版
【在快照文件目录下操作】
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-TDFUQKgQ-1713212032224)]
[外链图片转存中…(img-qn396iF9-1713212032225)]
[外链图片转存中…(img-sbDwwVOp-1713212032225)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
[外链图片转存中…(img-Lp89QvGe-1713212032225)]
最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分
[外链图片转存中…(img-PqgYrFBt-1713212032226)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
更多推荐
所有评论(0)