这样看来,很可能是不同节点之间的 AuthRevision 不一致了,AuthRevision 是 etcd 启动时直接从 db 读取的,每次变更后也会及时的写入 db,于是我们简单修改了下 etcd-dump-db工具,将每个节点 db 内存储的 AuthRevision 解码出来对比了下,发现 3 个节点的 AuthRevision 确实不一致,node1 的 AuthRevision 最高,node...
我们可以像下图一样,使用 etcd-dump-log dump 出指定 WAL 文件的内容,使用 etcd-dump-db dump 出 db 文件的数据,方便对 WAL 和 db 数据进行分析。 于是,我们向 node3 写了一条便于区分的数据,然后通过 etcd-dump-log 来分析 3 个节点的 WAL,按照刚才的测试,endpoint 指定为 node3 写入的数据,通过其他两...
etcd 的存储目录分为 snapshot 和 wal,他们写入的方式是不同的,snapshot 是内存直接 dump file。而 wal 是顺序追加写,对于这两种方式系统调优的方式是不同的,snapshot 可以通过增加 io 平滑写来提高磁盘 io 能力,而 wal 可以通过降低 pagecache 的方式提前写入时序。因此对于不同的场景,可以考虑将 snap 与 wa...
$ etcd-dump dump // outputs an etcd_dump.json Restoring : $ etcd-dump restore Restored successfuly // Readsinthe etcd_dump.json and restores it's values to the DB Help : $ etcd-dump Usage: etcd-dump.js [options] [command] Commands: dump restore Options: -h, --help output usage ...
这样看来,很可能是不同节点之间的 AuthRevision 不一致了,AuthRevision 是 etcd 启动时直接从 db 读取的,每次变更后也会及时的写入 db,于是我们简单修改了下 etcd-dump-db工具,将每个节点 db 内存储的 AuthRevision 解码出来对比了下,发现 3 个节点的 AuthRevision 确实不一致,node1 的 AuthRevision 最高,node...
当谈论etcd备份的时候,来看看现有工具是什么。那是etcdctl snapshot save,它的好处是一次性的将整个etcd dump出来,效率比较高,但是它有它的问题,比如它锁住硬盘空间导致磁盘空间暴涨,其实还有其他方法,比如watch k8s,etcd event,这样可以把集群所有的细节变动都拉下来, ...
Etcd源码下有个tools/etcd-dump-logs,可以将wal日志dump成文本查看,可以协助分析raft协议。 raft协议本身不关心应用数据,也就是data中的部分,一致性都通过同步wal日志来实现, 每个节点将从主节点收到的data apply到本地的存储,raft只关心日志的同步状态,
定期dump数据,推送到分布式存储中。 恢复时,将数据拷到每个节点上然后分别执行restore。 restore的方式 $ ETCDCTL_API=3 etcdctl snapshot restore snapshot.db \ --name m1 \ --initial-cluster m1=http://host1:2380,m2=http://host2:2380,m3=http://host3:2380 \ ...
Etcd源码下有个tools/etcd-dump-logs,可以将wal日志dump成文本查看,可以协助分析raft协议。raft协议本身不关心应用数据,也就是data中的部分,一致性都通过同步wal日志来实现, 每个节点将从主节点收到的data apply到本地的存储,raft只关心日志的同步状态, 如果本地存储实现的有bug,比如没有正确的将data apply到本地...
面对底层网络问题,在找到稳定复现的方法后,我们通过抓包神器 tcpdump,丰富强大的网络工具 iproute2 包(iproute2 包中的 ss 命令,能够获取 TCP 的很多底层信息,比如 rtt,窗口因子,重传次数等,对诊断问题很有帮助),再结合TCP RFC、linux 源码(代码面前无秘密,不管是用户态工具还是内核态),多团队的协作,成功破案。