etcd集羣之常見問題

序言

    上篇講了一些etcd常見的集羣操做,這篇主要講述一些可能遇到的常見問題,畢竟上帝(運維)視角老是要看到問題,而後進行恢復。
node


    對於一個集羣來講,常見的莫過於進程崩潰,物理機宕機,數據遷移備份,擴容縮容等操做。剩餘的操做無非就是一些常見的問題處理。python


備份恢復

    etcd從嚴格意義上來講,也就是一個存儲,不過是分佈式環境下的存儲,並且保持強一致性,也就是每次有個leader進行發號指令,寫入數據的時候,必須leader贊成follower回覆ok才能寫入,並且必須大部分的節點正常響應。
git

    從而在數據備份的時候,隨便備份哪一個節點都是能夠的。
github

一、 配置定時任務進行備份docker

    配置的定時任務,天天的凌晨2點執行腳本,只保留七天的備份,而後將數據備份到固定的目錄,腳本備份主要使用自帶的etcdctl來進行備份,以下:
centos

[root@docker-ce python]# cat backup.sh bash

#!/bin/bash微信

date_time=`date +%Y%m%d`運維

etcdctl backup --data-dir /etcd/ --backup-dir /python/etcdbak/${date_time}分佈式

find /python/etcdbak/ -ctime +7 -exec rm -r {} \;

    設置定時任務:

    將錯誤輸出和正常輸出都重定向掉,是爲了防止發送郵件,形成inode數量增大。

二、 數據恢復

    當要進行數據恢復的時候,能夠使用以下的步驟:

    打包備份數據,發送到要恢復的主機。

    解壓運行etcd:

    在進行啓動etcd的時候,除了要指定數據目錄,並且必須使用force-new-cluster參數,否則會出現報錯,集羣id不匹配等信息。

三、 關於數據存儲的說明

    在數據存儲的目錄中,在啓動的時候,文件目錄結果以下所示:

    在備份中的文件目錄以下所示:

    從上面能夠看到,丟棄了db文件和tmp文件,丟棄了tmp文件主要是未提交的數據記錄,而丟棄的db信息就是集羣和幾點的一些信息。

四、 單節點擴展成集羣

    備份以後,而後進行解壓報錯,而後啓動etcd進程,啓動的時候,注意使用相關的參數,以下:

[root@docker-ce etcd]# etcd --name docker-ce --data-dir /etcd1 --initial-advertise-peer-urls http://192.168.1.222:2380 --listen-peer-urls http://192.168.1.222:2380  --listen-client-urls http://192.168.1.222:2379,http://127.0.0.1:2379   --advertise-client-urls http://192.168.1.222:2379  --initial-cluster-token etcd-cluster --initial-cluster centos=http://192.168.1.22:2380,docker-ce=http://192.168.1.222:2380 --force-new-cluster

    添加新的member信息:

    在新的機器上啓動etcd進程:

[root@docker1 /]# etcd --name docker1 --data-dir /etcd  --initial-advertise-peer-urls http://192.168.1.32:2380 --listen-peer-urls http://192.168.1.32:2380  --listen-client-urls http://192.168.1.32:2379,http://127.0.0.1:2379   --advertise-client-urls http://192.168.1.32:2379  --initial-cluster-token etcd-cluster  --initial-cluster docker-ce=http://192.168.1.222:2380,docker1=http://192.168.1.32:2380 --initial-cluster-state existing

    注意參數的更新,不然會出現集羣的id信息不匹配,peer的信息不匹配等錯誤。


可能出現的問題

一、 時鐘不一樣步

    時鐘不一樣的時候,出現錯誤以下:

2018-02-09 05:45:37.636506 W | rafthttp: the clock difference against peer 5d951def1d1ebd99 is too high [8h0m2.595609129s > 1s]

2018-02-09 05:45:37.717527 W | rafthttp: the clock difference against peer f83aa3ff91a96c2f is too high [8h0m2.52274509s > 1s]

    將時間進行同步便可。

二、 集羣id不匹配

    主要是由於數據目錄沒有刪除,而後致使集羣的id不匹配,刪除數據目錄,而後從新加入便可。

三、 刪除的時候數據目錄報錯

2018-02-07 22:05:58.539721 I | raft: e0f5fe608dbc732d became follower at term 11

2018-02-07 22:05:58.539833 C | raft: tocommit(25) is out of range [lastIndex(0)]. Was the raft log corrupted, truncated, or lost?

panic: tocommit(25) is out of range [lastIndex(0)]. Was the raft log corrupted, truncated, or lost?

goroutine 59 [running]:

github.com/coreos/pkg/capnslog.(*PackageLogger).Panicf(0xc4201730e0, 0x559ecf0e5ebc, 0x5d, 0xc420121400, 0x2, 0x2)

/builddir/build/BUILD/etcd-1e1dbb23924672c6cd72c62ee0db2b45f778da71/Godeps/_workspace/src/github.com/coreos/pkg/capnslog/pkg_logger.go:75 +0x15e

github.com/coreos/etcd/raft.(*raftLog).commitTo(0xc42021a380, 0x19)

/builddir/build/BUILD/etcd-1e1dbb23924672c6cd72c62ee0db2b45f778da71/src/github.com/coreos/etcd/raft/log.go:191 +0x15e

github.com/coreos/etcd/raft.(*raft).handleHeartbeat(0xc42022c1e0, 0x8, 0xe0f5fe608dbc732d, 0x5d951def1d1ebd99, 0xb, 0x0, 0x0, 0x0, 0x0, 0x0, ...)

/builddir/build/BUILD/etcd-1e1dbb23924672c6cd72c62ee0db2b45f778da71/src/github.com/coreos/etcd/raft/raft.go:1100 +0x56

github.com/coreos/etcd/raft.stepFollower(0xc42022c1e0, 0x8, 0xe0f5fe608dbc732d, 0x5d951def1d1ebd99, 0xb, 0x0, 0x0, 0x0, 0x0, 0x0, ...)

/builddir/build/BUILD/etcd-1e1dbb23924672c6cd72c62ee0db2b45f778da71/src/github.com/coreos/etcd/raft/raft.go:1046 +0x2b5

github.com/coreos/etcd/raft.(*raft).Step(0xc42022c1e0, 0x8, 0xe0f5fe608dbc732d, 0x5d951def1d1ebd99, 0xb, 0x0, 0x0, 0x0, 0x0, 0x0, ...)

/builddir/build/BUILD/etcd-1e1dbb23924672c6cd72c62ee0db2b45f778da71/src/github.com/coreos/etcd/raft/raft.go:778 +0x10f9

github.com/coreos/etcd/raft.(*node).run(0xc420354000, 0xc42022c1e0)

/builddir/build/BUILD/etcd-1e1dbb23924672c6cd72c62ee0db2b45f778da71/src/github.com/coreos/etcd/raft/node.go:323 +0x67d

created by github.com/coreos/etcd/raft.RestartNode

/builddir/build/BUILD/etcd-1e1dbb23924672c6cd72c62ee0db2b45f778da71/src/github.com/coreos/etcd/raft/node.go:223 +0x340

    這種主要是須要將節點做爲一個新的節點加入到集羣中,直接啓動的話因爲找不到集羣的文件和日誌文件,從而報錯。

待續。。。。




本文分享自微信公衆號 - SRE運維實踐(gh_319dd73ec076)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索