一、etcd集群部署哪個最穩定
對於etcd的部署方式,我們可以選擇Standalone,Cluster和HA模式。
其中Standalone模式適用於開發、測試環境,Cluster適用於小型生產環境,HA適用於中大型的生產環境。因此,如果在生產環境中使用etcd集群,建議選擇HA模式,以確保穩定和可靠性。
二、etcd集群恢復
在etcd集群中,可能會發生一些異常情況,需要對etcd集群進行恢復。如果發生類似節點宕機的情況,我們需要進行集群節點的重新加入。
具體步驟如下:
1. 確定宕機節點的狀態
etcdctl endpoint status -w table | grep 'unreachable'
以上命令行顯示的為unreachable或者down,那麼就表示該節點宕機了。
2. 去掉宕機節點
如果打算重新加入一個節點,要先去掉之前失聯的節點。
etcdctl member remove [memberid]
也可以直接在其他節點上執行。
etcdctl --endpoints=http://[otherIP]:2379 member remove [memberid]
3. 重新加入節點
etcdctl member add [member.node.name] --peer-urls=http://[memberIP]:2380
4. 上報節點信息給所有節點
etcdctl member list //需要獲取到 memberID,peer-urls,name
這裡的memberID 是etcd集群認證的節點憑證之一,可以通過member list拿到,也可以看etcd.log
etcdctl member update [memberid] [flags]
如果宕機節點不支持恢復,那麼建議重新創建一個新的etcd節點,然後將數據遷移到新的節點上。
三、etcd集群原理
etcd是一種高可用性的分佈式鍵值存儲系統,能夠保證分佈式應用程序的一致性。
etcd集群的核心機制是Raft協議,利用Raft協議實現節點之間的一致性和數據的同步。
集群中的每個節點都有自己的ID(節點編號)、地址、磁盤存儲等信息。在etcd集群中,數據是以key-value的形式存儲的。當一個節點收到一個寫請求時,它會將請求廣播給其集群中的其他節點,並等待各節點的反饋。如果反饋成功,則將寫請求處理完成並返回給客戶端,否則重新發起廣播。當集群中有節點宕機時,etcd能夠自動進行故障轉移,確保數據的一致性和可靠性。
四、etcd集群數據同步
etcd的數據同步採用Raft協議,Raft協議是一種分佈式一致性算法。它將整個集群分為Leader、Follower和Candidate三種角色,通過選舉Leader的過程來實現數據複製和同步。
當Follower節點有更新時,會通知Leader,隨後Leader根據Raft協議將變更複製給其他Follower節點。當節點失效或者新節點加入集群時,etcd能夠通過Raft協議自動進行數據遷移和重新分配。
五、etcd集群搭建
etcd集群的搭建,主要分為如下幾個步驟:
1. 下載etcd二進制文件
wget https://github.com/coreos/etcd/releases/download/v3.5.0/etcd-v3.5.0-linux-amd64.tar.gz
tar -zxvf etcd-v3.5.0-linux-amd64.tar.gz
cd etcd-v3.5.0-linux-amd64
2. 創建etcd集群配置文件
cp etcd.conf.sample etcd.conf
vi etcd.conf
3. 配置etcd集群
name:當前節點名稱
data-dir:數據目錄
initial-cluster-state:新建集群時設為new
initial-cluster-token:集群身份標識符,任選一取
initial-cluster:集群中所有機器的地址
listen-peer-urls:集群內所有節點的監聽地址
listen-client-urls:服務的請求地址
4. 啟動etcd集群
./etcd -conf-file=etcd.conf
六、k8s etcd集群
k8s官方文檔建議將etcd集群部署在k8s集群外部,以確保etcd的高可用性。
kops是一種常用的k8s集群部署工具,我們可以使用kops來部署etcd集群。具體步驟如下:
1. 安裝kops和kubectl
# Mac
brew update && brew install kops kubectl
# Ubuntu
sudo apt-get update && sudo apt-get install -y kops kubectl
2. 創建kops集群
kops create cluster --name=mycluster.example.com --state=s3://mybucket --node-count=2 --zones=us-east-1a --node-size=t2.micro --master-size=t2.micro
3. 配置etcd集群
可以按照上面的方法在較為簡單的環境下,單獨對etcd集群進行配置。使用kops在AWS上部署集群並不少見,如果使用AWS,還需要開放相關端口,確保集群正常運轉。
4. 刪除集群
kops delete cluster --name=mycluster.example.com --state=s3://mybucket --yes
七、k8s部署etcd集群
kubernetes的control plane中使用了etcd來存儲所有的集群狀態信息。etcd狀態集群的容量應該與kubernetes集群大小成比例,而且它們必須同時運行才能達到預期的高可用性。
默認情況下,kubernetes會在所有master節點中部署一個etcd實例副本。但是,也可以將etcd集群獨立部署在外部,這需要修改kubernetes的etcd集群地址或證書配置。
具體步驟如下:
1. 進入Kubernetes的github項目目錄
cd kubernetes
2. 編譯etcd鏡像
在需要編譯 etcd 的版本時,執行如下操作.
cd ./build/
make WHAT=cmd/etcd
make WHAT=cmd/etcdctl
make WHAT=cmd/etcd-migrate
3. 部署etcd集群
運行部署etcd集群的腳本
./hack/local-up-etcd.sh
注: 使用二進制方式部署應該詳細的閱讀文檔。
4. 現在kubernetes etcd配置項就變成了:
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"\
設置env變量KUBE_ETCD_SERVERS 連接新etcd集群
八、查看etcd集群狀態
我們可以使用以下命令來查看etcd集群狀態:
etcdctl member list
其中,member list命令可以用於查看當前etcd集群中的所有成員,包括其ID、名稱、狀態和地址信息。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/284544.html