etcd集羣平常維護

配置文件和啓動參數說明

命令行                     |   配置文件                                |   說明
data-dir                    |   ETCD_DATA_DIR                       |   指定節點的數據存儲目錄,包括節點ID,集羣ID,集羣初始化配置,Snapshot文件,若未指定—wal-dir,還會存儲WAL文件;
wal-dir                     |   ETCD_WAL_DIR                        |   指定節點的was文件的存儲目錄,若指定了該參數,wal文件會和其餘數據文件分開存儲。
name                        |   ETCD_NAME                           |   節點名稱
initial-advertise-peer-urls |   ETCD_INITIAL_ADVERTISE_PEER_URLS    |   告知集羣其餘節點url
listen-peer-urls            |   ETCD_LISTEN_PEER_URLS               |   監聽URL,用於與其餘節點通信
advertise-client-urls       |   ETCD_LISTEN_CLIENT_URLS             |   告知客戶端url, 也就是服務的url
initial-cluster-token       |   ETCD_INITIAL_CLUSTER_TOKEN          |   集羣的ID
initial-cluster             |   ETCD_INITIAL_CLUSTER                |   集羣中全部節點

配置文件例子

more /etc/etcd/etcd.conf
# [member]
ETCD_NAME=lykops-etcd1
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
......
ETCD_LISTEN_PEER_URLS="http://192.168.0.101:2380,http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.101:2379,http://localhost:2379"
......
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.0.101:2380"
# if you use different ETCD_NAME (e.g. test), set ETCD_INITIAL_CLUSTER value for this name, i.e. "test=http://..."
ETCD_INITIAL_CLUSTER="lykops-etcd1=http://192.168.0.101:2380,lykops-etcd2=http://192.168.0.102:2380,lykops-etcd3=http://192.168.0.103:2380"
#若是是單機版,註釋上面一行
#ETCD_INITIAL_CLUSTER_STATE="new"
#ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.101:2379"
......
#
#[proxy]
......
#[security]
#若是要求SSL鏈接etcd的話,把下面的配置啓用,並修改文件路徑,詳情請見http://blog.csdn.net/liyingke112/article/details/77776491
#ETCD_CERT_FILE="/etc/ssl/client.pem"
#ETCD_KEY_FILE="/etc/ssl/client-key.pem"
#ETCD_CLIENT_CERT_AUTH="true"
#ETCD_TRUSTED_CA_FILE="/etc/ssl/ca.pem"
#ETCD_AUTO_TLS="true"
#ETCD_PEER_CERT_FILE="/etc/ssl/member.pem"
#ETCD_PEER_KEY_FILE="/etc/ssl/member-key.pem"
#ETCD_PEER_CLIENT_CERT_AUTH="false"
#ETCD_PEER_TRUSTED_CA_FILE="/etc/ssl/ca.pem"
#ETCD_PEER_AUTO_TLS="true"
#
#[logging]
......

啓動服務json

service etcd start
systemctl enable etcd

集羣維護

查看全部member

方法一、http://192.168.0.101:2379/v2/members
方法二、etcdctl member list
573789a076d6f1ab: name=lykops-etcd1 peerURLs=http://192.168.0.101:2380 clientURLs=http://192.168.0.101:2379 isLeader=false
90ad624a2e4158cf: name=lykops-etcd2 peerURLs=http:/192.168.0.102:2380 clientURLs=http://192.168.0.102:2379 isLeader=false
c9b8681eb46426ac: name=lykops-etcd3 peerURLs=http://192.168.0.103:2380 clientURLs=http://192.168.0.103:2379 isLeader=true

查看集羣狀態

etcdctl cluster-health
member 573789a076d6f1ab is healthy: got healthy result from http://192.168.0.101:2379
member 90ad624a2e4158cf is healthy: got healthy result from http://192.168.0.102:2379
member c9b8681eb46426ac is healthy: got healthy result from http://192.168.0.103:2379
cluster is healthy

更新一個節點

若是想更新一個節點的 IP(peerURLS),首先你須要知道那個節點的 ID。你能夠列出全部節點,找出對應節點的 ID。網絡

etcdctl member list

在本例中,假設要更新ID爲90ad624a2e4158cf的節點的peerURLs爲:http://192.168.0.105:2380app

etcdctl member update 90ad624a2e4158cf http://192.168.0.105:2380
Updated member with ID 90ad624a2e4158cf in cluster

刪除一個節點

假設要刪除 ID 爲 90ad624a2e4158cf 的節點curl

etcdctl member remove 90ad624a2e4158cf
Removed member 90ad624a2e4158cf from cluster

執行完後,目標節點會自動中止服務,而且打印一行日誌: etcd: this member has been permanently removed from the cluster. Exiting. 若是刪除的是 leader 節點,則須要耗費額外的時間從新選舉 leader。this

增長一個新的節點

增長一個新的節點分爲兩步:url

經過etcdctl或對應的API註冊新節點
使用恰當的參數啓動新節點

先看第一步,假設要新加的節點取名爲lykops-etcd6, peerURLs 是 http://192.168.0.106:2380spa

etcdctl member add lykops-etcd6 http://192.168.0.106:2380
added member 9bf1b35fc7761a23 to cluster
ETCD_NAME="lykops-etcd6"
ETCD_INITIAL_CLUSTER="lykops-etcd1=http://192.168.0.101:2380,lykops-etcd2=http://192.168.0.102:2380,lykops-etcd3=http://192.168.0.103:2380,lykops-etcd6=http://192.168.0.106:2380"
ETCD_INITIAL_CLUSTER_STATE=existing

第二步,修改配置文件,把第一步執行輸出結果替換掉/etc/etcd/etcd.conf,而後啓動.net

這樣,新節點就會運行起來而且加入到已有的集羣中了。命令行

注意: 一、不能刪除節點後,IP地址不變動的狀況下加入集羣是沒法加入的,刪除數據也不行 二、最後修改其餘現有主機的/etc/etcd/etcd.conf的ETCDINITIALCLUSTER信息日誌

備份數據

使用etcd自帶命令etcdctl進行etc備份

etcdctl backup --data-dir /var/lib/etcd/default.etcd/ --backup-dir /backup/etcd

故障恢復

在使用過程當中,有時會出現少許主機故障,須要對集羣進行維護。然而在現實狀況下,還可能遇到因爲嚴重的設備或網絡的故障,致使超過半數的節點沒法正常工做。在etcd集羣沒法提供正常的服務,須要用到一些備份和數據恢復的手段。

首先,從剩餘的正常節點中選擇一個正常的成員節點, 使用etcdctl backup命令備份etcd數據。

etcdctl backup --data-dir /var/lib/etcd -backup-dir /tmp/etcd_backup
tar -zcxf backup.etcd.tar.gz /tmp/etcd_backup

這個命令會將節點中的用戶數據所有寫入到指定的備份目錄中,可是節點ID,集羣ID等信息將會丟失,並在恢復到目的節點時被從新。這樣主要是防止原先的節點意外從新加入新的節點集羣而致使數據混亂。

而後將Etcd數據恢復到新的集羣的任意一個節點上,使用--force-new-cluster參數啓動Etcd服務。這個參數會重置集羣ID和集羣的全部成員信息,其中節點的監聽地址會被重置爲localhost:2379, 表示集羣中只有一個節點。

tar -zxvf backup.etcd.tar.gz -C /var/lib/etcd
etcd --data-dir=/var/lib/etcd --force-new-cluster ...

啓動完成單節點的etcd,能夠先對數據的完整性進行驗證,確認無誤後再經過Etcd API修改節點的監聽地址,讓它監聽節點的外部IP地址,爲增長其餘節點作準備。例如:

用etcd命令找到當前節點的ID。 etcdctl member list 98f0c6bf64240842: name=cd-2 peerURLs=http://127.0.0.1:2580 clientURLs=http://127.0.0.1:2579

因爲etcdctl不具有修改爲員節點參數的功能, 下面的操做要使用API來完成。 curl http://127.0.0.1:2579/v2/members/98f0c6bf64240842 -XPUT -H "Content-Type:application/json" -d '{"peerURLs":["http://127.0.0.1:2580"]}'

注意,在Etcd中, 建議首先將集羣恢復到一個臨時的目錄中,從臨時目錄啓動etcd,驗證新的數據正確完整後,中止etcd,在將數據恢復到正常的目錄中。

最後,在完成第一個成員節點的啓動後,能夠經過集羣擴展的方法使用 etcdctl member add 命令添加其餘成員節點進來。

相關文章
相關標籤/搜索