一、集羣檢查

注意:etcdctl 命令如果沒有顯式指定 --endpoints 參數,它會使用默認配置,而這個默認配置可能無法連接到集羣的所有節點,結果是隻會得到當前節點的信息

1、查看集羣成員列表

etcdctl member list

 

Etcd的使用 - Etcd集羣安裝 - 《Go學習手冊(For learning Go Tutorial)》_鍵值

 

2、查看集羣狀態

 

etcdctl --endpoints="http://member01.etcd-cluster-20230129.internal.shoplazza.site:2379,http://member02.etcd-cluster-20230129.internal.shoplazza.site:2379,http://member03.etcd-cluster-20230129.internal.shoplazza.site:2379" endpoint status

 

Etcd的使用 - Etcd集羣安裝 - 《Go學習手冊(For learning Go Tutorial)》_取值_02

IS LEADER(是否為領導者)

  • 含義:該節點當前是否是 Raft 協議的領導者
  • 取值:
  • true:是領導者
  • false:是跟隨者
  • 重要性:
  • 有且只有一個節點會是 true
  • 所有寫操作必須通過領導者
  • 領導者負責日誌複製

IS LEARNER(是否為學習者)

  • 含義:該節點是否是學習者(只讀副本)
  • 取值:
  • true:學習者(不參與選舉,只同步數據)
  • false:正式成員(參與選舉)
  • 用途:
  • 用於擴展讀取能力
  • 降低新節點加入對集羣的影響
  • 可作為故障轉移的備用節點

RAFT TERM(Raft任期)

  • 含義:當前 Raft 選舉的任期編號
  • 規則:
  • 每次選舉後遞增
  • 集羣中所有節點的 RAFT TERM 應該完全一致
  • 如果不一致,説明發生了網絡分區或選舉問題
  • 示例:2 表示這是第2個任期

RAFT INDEX(Raft日誌索引)

  • 含義:當前最新的 Raft 日誌條目索引
  • 特點:
  • 單調遞增
  • 反映寫入操作的次數
  • 每次寫入都會增加這個值
  • 用途:用於數據同步和一致性檢查

RAFT APPLIED INDEX(Raft已應用索引)

  • 含義:已應用到狀態機的 Raft 日誌索引
  • 重要性:
  • 正常情況下,RAFT INDEX ≈ RAFT APPLIED INDEX
  • 如果兩者差距很大,説明:
  • 節點正在追趕數據
  • 節點性能有問題
  • 可能有網絡延遲
  • 健康狀態:這個值應該和 RAFT INDEX 基本一致

ERRORS(錯誤信息)

  • 含義:節點的錯誤狀態
  • 通常為空:表示節點健康
  • 可能的錯誤:
  • "NOSPACE":磁盤空間不足
  • 連接錯誤
  • 心跳超時
  • 重要性:任何非空值都表示節點有問題

 

3、查看集羣健康狀態

etcdctl --endpoints="http://member01.etcd-cluster-20230129.internal.shoplazza.site:2379,http://member02.etcd-cluster-20230129.internal.shoplazza.site:2379,http://member03.etcd-cluster-20230129.internal.shoplazza.site:2379" endpoint health

 

Etcd的使用 - Etcd集羣安裝 - 《Go學習手冊(For learning Go Tutorial)》_數據_03

 

二、KV操作

注意:對於集羣來説,寫操作必須通過 Leader,Raft 協議要求所有寫操作必須由 Leader 發起,如果客户端連接了 Follower進行寫操作,Follower會轉發寫請求給Leader。結果是寫操作執行成功,但實際寫操作是Leader執行。

1、設置鍵值

# etcdctl put /key value
etcdctl put /t1 123

 

2、獲取鍵值

#etcdctl get /key
#etcdctl get /key --print-value-only  # 只顯示值
#etcdctl get /key -w json  #  獲取鍵值及詳細信息
#etcdctl get /prefix --prefix  # 獲取前綴匹配的所有鍵
etcdctl get /t1

 

3、刪除鍵

#etcdctl del /key
#etcdctl del /prefix --prefix  # 刪除前綴匹配的所有鍵

 

4、獲取所有鍵值或獲取所有鍵

#etcdctl get / --prefix # 獲取所有鍵(從根開始)
#etcdctl get / --prefix --keys-only=false # 獲取所有鍵和值
#etcdctl get / --prefix --keys-only # 只獲取鍵名,不獲取值