1. 程式人生 > >etcd叢集日常維護

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]
......

啟動服務

service etcd start
systemctl enable etcd

叢集維護

檢視所有member

方法1、http://192.168.0.101:2379/v2/members
方法2、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:2380

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

刪除一個節點

假設要刪除 ID 為 90ad624a2e4158cf 的節點

etcdctl member remove 90ad624a2e4158cf
Removed member 90ad624a2e4158cf from cluster

執行完後,目標節點會自動停止服務,並且列印一行日誌: etcd: this member has been permanently removed from the cluster. Exiting. 如果刪除的是 leader 節點,則需要耗費額外的時間重新選舉 leader。

增加一個新的節點

增加一個新的節點分為兩步:

通過etcdctl或對應的API註冊新節點
使用恰當的引數啟動新節點

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

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,然後啟動

這樣,新節點就會執行起來並且加入到已有的叢集中了。

注意: 1、不能刪除節點後,IP地址不變更的情況下加入叢集是無法加入的,刪除資料也不行 2、最後修改其他現有主機的/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 命令新增其他成員節點進來。