etcd有三種集羣化啓動的配置方案,分別爲靜態配置啓動、etcd自身服務發現、經過DNS進行服務發現,重點講一下靜態配置啓動。
根據啓動環境,能夠選擇不一樣的配置方式。這也是新版etcd區別於舊版的一大特性,它擯棄了使用配置文件進行參數配置的作法,轉而使用命令行參數或環境變量來配置參數。網絡
比較適合於離線環境,在啓動整個集羣以前,若是已經預先清楚鎖要配置的集羣大小,以及集羣上各節點的地址和端口信息,那麼啓動時,你就能夠經過配置initial-cluster參數進行etcd集羣的啓動。
在每一個etcd機器啓動時,配置環境變量或添加啓動參數的方式以下:
ETCD_INITIAL_CLUSTER="etcd0=http://10.0.1.10:2380,etcd1=http://10.0.1.11:2380,etcd2=http://10.0.1.12:2380"
ETCD_INITIAL_CLUSTER_STATE=new
參數方法:
-initial-cluster etcd0=http://10.0.1.10:2380,etcd1=http://10.0.1.11:2380,etcd2=http://10.0.1.12:2380 \
-initial-cluster-state new性能
-initial-cluster參數中配置的url地址必須與各個節點啓動時設置的initial-advertise-peer-urls參數相同。initial-advertise-peer-urls參數表示節點監聽其餘節點同步信號的地址。
若是你所在的網絡環境配置了多個etcd集羣,爲了不意外發生,最好使用initial-cluster-token參數爲每一集羣單獨配置一個token認證。這樣就能夠確保每一個集羣和集羣的成員都擁有獨特的ID。url
綜上所述,若是你要配置包含3個etcd節點的集羣,那麼你在3個機器上的啓動命令分別以下所示
$ etcd -name etcd0 -initial-advertise-peer-urls http://10.0.1.10:2380 \
-listen-peer-urls http://10.0.1.10:2380 \
-initial-cluster-token etcd-cluster-1 \
-initial-cluster etcd0=http://10.0.1.10:2380,etcd=http://10.0.1.11:2380,etcd2=http://10.0.1.12:2380 \
-initial-cluster-state new命令行
$ etcd -name etcd1 -initial-advertise-peer-urls http://10.0.1.11:2380 \
-listen-peer-urls http://10.0.1.11:2380 \
-initial-cluster-token etcd-cluster-1 \
-initial-cluster etcd0=http://10.0.1.10:2380,etcd1=http://10.0.1.11:2380,etcd2=http://10.0.1.12:2380 \
-initial-cluster-state new線程
$ etcd -name etcd2 -initial-advertise-peer-urls http://10.0.1.12:2380 \
-listen-peer-urls http://10.0.1.12:2380 \
-initial-cluster-token etcd-cluster-1 \
-initial-cluster etcd0=http://10.0.1.10:2380,etcd1=http://10.0.1.11:2380,etcd2=http://10.0.1.12:2380 \
-initial-cluster-state new
在初始化完成後,etcd還提供動態增、刪、改etcd集羣節點的功能,這個須要用到etcdctl命令進行操做。
補充常見參數的解釋:
-name:本member的名字。
-initial-advertise-peer-urls:其餘member使用,其餘member經過該地址與本member交互信息。
-listen-peer-urls:本member側使用,用於監聽其餘member發送信息的地址。
-listen-client-urls:本member側使用,用於監聽etcd客戶發送信息的地址。該地址用於ASR業務訪問。
-advertise-client-urls:etcd客戶使用,客戶經過該地址與本member交互信息,必定要保證從客戶側能可訪問該地址。
-initial-cluster-state:填new。
-initial-cluster:本member側使用。描述集羣中全部節點的信息,本member根據此信息去聯繫其餘member。
-data-dir:指定節點的數據存儲目錄,這些數據包括節點ID,集羣ID,集羣初始化配置,Snapshot文件等。3d
檢查集羣成員狀態:
./etcdctl --endpoints=http://10.1.92.192:23000 member listblog
etcde集羣啓動完畢後,能夠在運行的過程當中對集羣進行重構,包括核心節點的增長、刪除、遷移、替換等。
只有當集羣中多數節點正常的狀況下,才能夠進行運行時的配置管理。由於配置更改的信息也會被etcd當成一個信息存儲和同步,若是集羣多數節點損壞,集羣就失去了寫入數據的能力。因此在配置etcd集羣數量時,強烈推薦至少配置3個核心節點,配置數量越多,可用性越強。token
當你節點所在的機器出現硬件故障,或節點出現如數據目錄損壞等問題,致使節點永久性的不可恢復時,就須要對節點進行遷移或替換。當一個節點失效之後,必須儘快修復,由於etcd集羣正常運行的必要條件是集羣中多數節點都正常工做。遷移一個節點須要進行4個步驟:
(1)暫停正在運行着的節點程序進程
(2)把數據目錄從現有機器拷貝到新機器
(3)使用API更新etcd中對應節點指向機器的url記錄更新爲新機器的IP
(4)使用一樣的配置項和數據目錄,在新的機器上啓動etcd進程
增長節點可讓etcd的高可用性更強。若是有3個節點,那麼最多容許1個節點失效;若是有5個節點,就能夠容許有2個節點失效。同時,增長節點還可讓etcd集羣具備更好的讀性能。由於etcd的節點都是實時同步的,每一個節點上都存儲了全部的信息,因此增長節點能夠從總體上提高讀的吞吐量。
增長一個節點須要進行兩步操做:
(1)在集羣中增長這個節點的url記錄,同時得到集羣的信息
(2)使用得到的集羣信息啓動新etcd節點
實例操做:rem
其中endpoints是整個etcd集羣的leader地址,-initial-cluster-state設置爲existing。如今利用命令把節點信息加入集羣./etcdctl --endpoints=http://10.31.10.19:13000 member add http://10.31.10.19.53001。
有時你不得不在提升etcd的寫性能和增長集羣高可用性上進行權衡。Leader節點在提交一個寫記錄時,會吧這個信息同步到每一個節點上,當獲得多數節點的贊成反饋後,纔會真正寫入數據。因此節點越多,寫入性能越差。在節點過多時,你可能須要移除其中的一個或多個。移除節點很是簡單,只須要一步操做,就是把集羣中這個節點的記錄刪除,則對應機器上的該節點就會自動中止。
實例操做:
其中endpoints是整個etcd集羣的leader地址./etcdctl --endpoints=http://10.31.10.19:13000 member remove 17d2d3fed8c2dda7
注意:執行member remove對應節點etcd的進程會自動銷燬,不須要再去中止線程。