天天看點

etcd使用

etcd簡介

  etcd 是 coreOs 團隊于 2013 年 6 發起的開源項目, 他的目标是建構一個高可用的分布式鍵值(key-value)資料庫. etcd 内部采用 raft 協定作為一緻性算法, etcd基于 go 語言實作.

  項目位址: https://github.com/coreos/etcd/

  推薦文章: https://blog.csdn.net/bbwangj/article/details/82584988

特性

  • 簡單: 安裝配置簡單, 而且提供了 HTTP API 進行互動, 使用也很簡單.
  • 安全: 支援 SSL 證書驗證.
  • 快速: 根據官方提供的 benchmark 資料, 單執行個體支援每秒 2k+ 讀操作.
  • 可靠: 采用 raft 算法, 實作分布式資料庫的可用性和一緻性.

etcd 叢集介紹

  etcd 叢集 是一個分布式系統. 使用 Raft 協定來維護叢集内各個節點狀态的一緻性.

  主機狀态分為: Leader, Follower, Candidate

  當叢集初始化的時候,每個節點都是 Follower 角色.

  通過心跳與其他節點同步資料.當 Follower 在一定時間内沒有收到來自主節點的心跳,會将自己角色變為 Candidate ,并發起一次選主投票.

  配置 etcd 叢集,建議盡可能是奇數個節點,而不要是偶數節點.

單節點etcd配置

1. 安裝 etcd
[root@test1 ~]# yum install etcd -y

# 2. 修改配置檔案
[root@test1 ~]# cat /etc/etcd/etcd.conf 
#[Member]
# 資料目錄
ETCD_DATA_DIR="/var/lib/etcd/cluster.etcd"
# 叢集通信的監聽位址
ETCD_LISTEN_PEER_URLS="http://172.16.0.111:2380,http://localhost:2380"
# 用戶端的連接配接位址
ETCD_LISTEN_CLIENT_URLS="http://172.16.0.111:2379,http://localhost:2379"
# 名字辨別符
ETCD_NAME="test1"

# 啟動 etcd
[root@test1 ~]# systemctl start etcd
[root@test1 ~]# systemctl enable etcd

# 3. 檢視節點
[root@test1 ~]# etcdctl member list
8e9e05c52164694d: name=test1 peerURLs=http://localhost:2380 clientURLs=http://localhost:2379 isLeader=true
# 4. 檢視健康狀态
[root@test1 ~]# etcdctl cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://localhost:2379
cluster is healthy

# 5. 操作 etcd
[root@test1 ~]# etcdctl mkdir /test
[root@test1 ~]# etcdctl ls /
/test
[root@test1 ~]# etcdctl rmdir /test      

 etcd叢集配置

  叢集的安裝方法都一樣,配置檔案也類似,除了IP位址和唯一辨別之外沒有差別,提前配置好 hosts 檔案.

etcd叢集配置檔案

[root@test1 ~]# cat /etc/etcd/etcd.conf 
#[Member]
#ETCD_CORS=""
# 資料目錄
ETCD_DATA_DIR="/var/lib/etcd/cluster.etcd"
#ETCD_WAL_DIR=""
# 叢集通信的監聽位址
ETCD_LISTEN_PEER_URLS="http://172.16.0.111:2380"
# 用戶端的連接配接位址 提供 Http API服務
ETCD_LISTEN_CLIENT_URLS="http://172.16.0.111:2379,http://localhost:2379"

# 儲存最大的快照檔案數 0表示不受限制
ETCD_MAX_SNAPSHOTS="10"
# 要保留的最大wal檔案數(0表示不受限制)
ETCD_MAX_WALS="5"
# 名字辨別符
ETCD_NAME="test1"
# 該參數作用指定有多少個事務被送出時,觸發快照功能儲存到磁盤.
ETCD_SNAPSHOT_COUNT="100000"
# leader 多久發送一次心跳 預設 100ms
ETCD_HEARTBEAT_INTERVAL="100"
# 該參數的作用是重新投票的逾時時間,如果follow在該+ 時間間隔沒有收到心跳包,會觸發重新投票,預設為1000ms。 
ETCD_ELECTION_TIMEOUT="1000"
# 事務中允許的最大操作數。
ETCD_QUOTA_BACKEND_BYTES="0"

# 伺服器将接受的最大用戶端請求大小(位元組)。
ETCD_MAX_REQUEST_BYTES="1572864"

# 用戶端在ping伺服器之前應等待的最短持續時間間隔。 
ETCD_GRPC_KEEPALIVE_MIN_TIME="5s"

# 伺服器到用戶端ping的頻率持續時間,以檢查連接配接是否處于活動狀态(0表示禁用)。
#ETCD_GRPC_KEEPALIVE_INTERVAL="2h0m0s"
#  關閉非響應連接配接之前的額外持續等待時間(0表示禁用)。
#ETCD_GRPC_KEEPALIVE_TIMEOUT="20s"
#
# [Clustering]
# ETCD_ADVERTISE_CLIENT_URLS
# 對外公告該節點同伴監聽位址,這個值會告訴叢集中的其他節點
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://172.16.0.111:2380"
# 對外公告的該節點用戶端監聽位址,這個值會告訴叢集中的其他節點.
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.0.111:2379,http://localhost:2379"
# 叢集中所有節點的資訊
ETCD_INITIAL_CLUSTER="test1=http://172.16.0.111:2380,test2=http://172.16.0.112:2380,test3=http://172.16.0.113:2380"
# 建立叢集的 token,這個值每個叢集保持唯一。
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
# 設定new為初始靜态或DNS引導期間出現的所有成員。如果将此選項設定為existing,則etcd将嘗試加入現有群集。
ETCD_INITIAL_CLUSTER_STATE="new"      

etcd配置檔案詳解

--name
含義:此成員的名稱。
預設值:default
環境變量:ETCD_NAME
作用:此配置值作為此節點在--initial-cluster标志中列出的條目(例如,default=http://localhost:2380)引用。若使用靜态引導,則需要比對标志中使用的密鑰。使用發現時,每個成員必須具有唯一的名稱。建議使用Hostname或者machine-id。
注意:使用發現時,每個成員必須具有唯一的名稱。
--data-dir
含義:服務運作資料儲存的路徑。
預設值:${name}.etcd
環境變量:ETCD_DATA_DIR
作用:設定資料儲存的目錄。
--wal-dir
含義:專用wal目錄的路徑。
預設值:--data-dir的路徑下
環境變量:ETCD_WAL_DIR
作用:獨立設定wal目錄,etcd會将WAL檔案寫入--wal-dir而不是--data-dir。獨立的wal路徑,有助于避免日志記錄和其他IO操作之間的競争。
--snapshot-count
含義:觸發快照到磁盤的已送出事務數。
預設值:100000
環境變量:ETCD_SNAPSHOT_COUNT
作用:指定有多少事務(transaction)被送出時,觸發截取快照儲存到磁盤。
--heartbeat-interval
含義:心跳間隔的時間(以毫秒為機關)
預設值:100
環境變量:ETCD_HEARTBEAT_INTERVAL
作用:leader 多久發送一次心跳到 followers。
--election-timeout
含義:選舉逾時的時間(以毫秒為機關)
預設值:1000
環境變量:ETCD_ELECTION_TIMEOUT
作用:重新投票的逾時時間,如果 follow 在該時間間隔沒有收到心跳包,會觸發重新投票,預設為 1000 ms。
--listen-peer-urls
含義:和成員之間通信的位址。
預設值:http://localhost:2380
環境變量:ETCD_LISTEN_PEER_URLS
作用:用于監聽其他etcd member的url
提示:域名為無效值,如http://example.com:2380為錯誤配置。
--listen-client-urls
含義:對外提供服務的位址
預設值:http://localhost:2379
環境變量:ETCD_LISTEN_CLIENT_URLS
作用:對外提供服務的位址。
提示:域名為無效值,如http://example.com:2379為錯誤配置。
--max-snapshots
含義:要保留的最大快照檔案數(0表示不受限制)。
預設值:5
環境變量:ETCD_MAX_SNAPSHOTS
作用:
提示:Windows上的使用者預設值不受限制,建議手動清除至5。
--max-wals
含義:要保留的最大wal檔案數(0表示不受限制)。
預設值:5
環境變量:ETCD_MAX_WALS
作用:
提示:Windows上的使用者預設值不受限制,建議手動清除至5。
--cors
含義:逗号分隔的CORS原始白名單(跨源資源共享)
預設值:
環境變量:ETCD_CORS
--quota-backend-bytes
含義:當後端大小超過給定配額時(0預設為低空間配額),引發警報。
預設值:0
環境變量:ETCD_QUOTA_BACKEND_BYTES
--max-txn-ops
含義:事務中允許的最大操作數。
預設值:128
環境變量:ETCD_MAX_TXN_OPS
--max-request-bytes
含義:伺服器将接受的最大用戶端請求大小(位元組)。
預設值:1572864
環境變量:ETCD_MAX_REQUEST_BYTES
--grpc-keepalive-min-time
含義:用戶端在ping伺服器之前應等待的最短持續時間間隔。
預設值:5s
環境變量:ETCD_GRPC_KEEPALIVE_MIN_TIME
--grpc-keepalive-interval
含義:伺服器到用戶端ping的頻率持續時間,以檢查連接配接是否處于活動狀态(0表示禁用)。
預設值:2h
環境變量:ETCD_GRPC_KEEPALIVE_INTERVAL
--grpc-keepalive-timeout
含義:關閉非響應連接配接之前的額外持續等待時間(0表示禁用)。
預設值:20s
環境變量:ETCD_GRPC_KEEPALIVE_TIMEOUT
2.2 叢集相關辨別
提示:--initial-advertise-peer-urls, --initial-cluster, --initial-cluster-state, and --initial-cluster-token辨別用于引導一個新成員,當重新開機一個已經存在的成員時将忽略。
--initial-advertise-peer-urls
含義:該節點成員對等URL位址,且會通告群集的其餘成員節點。
預設值:http://localhost:2380
環境變量:ETCD_INITIAL_ADVERTISE_PEER_URLS
作用:
--initial-cluster
含義:叢集中所有節點的資訊。
預設值:default=http://localhost:2380
環境變量:ETCD_INITIAL_CLUSTER
作用:
注意:此處default為節點的--name指定的名字;localhost:2380為--initial-advertise-peer-urls指定的值。
--initial-cluster-state
含義:初始叢集狀态
預設值:new
環境變量:ETCD_INITIAL_CLUSTER_STATE
作用:設定new為初始靜态或DNS引導期間出現的所有成員。如果将此選項設定為existing,則etcd将嘗試加入現有群集。
--initial-cluster-token
含義:建立叢集的 token,這個值每個叢集保持唯一。
預設值:etcd-cluster
環境變量:ETCD_INITIAL_CLUSTER_TOKEN
作用:此配置可使重新建立叢集,即使配置和之前一樣,也會再次生成新的叢集和節點 uuid;否則會導緻多個叢集之間的沖突,造成未知的錯誤。
--advertise-client-urls
含義:此成員的用戶端URL清單,用于通告群集的其餘部分。這些URL可以包含域名。
預設值:http://localhost:2379
環境變量:ETCD_ADVERTISE_CLIENT_URLS
作用:對外公告的該節點用戶端監聽位址。
--discovery
含義:用于引導群集的發現URL。
預設值:
環境變量:ETCD_DISCOVERY
作用:
--discovery-srv
含義:DNS srv域用于引導群集。
預設值:
環境變量:ETCD_DISCOVERY_SRV
作用:
--discovery-srv-name
含義:使用DNS引導時查詢的DNS srv名稱的字尾。
預設值:
環境變量:ETCD_DISCOVERY_SRV_NAME
作用:
--discovery-fallback
含義:發現服務失敗時的預期行為(“退出”或“代理”)。“proxy”僅支援v2 API。
預設值:proxy
環境變量:ETCD_DISCOVERY_FALLBACK
作用:
--discovery-proxy
含義:用于流量到發現服務的HTTP代理。
預設值:
環境變量:ETCD_DISCOVERY_PROXY
作用:
--strict-reconfig-check
含義:拒絕可能導緻仲裁丢失的重新配置請求。
預設值:false
環境變量:ETCD_STRICT_RECONFIG_CHECK
作用:
--auto-compaction-retention
含義:在一個小時内為mvcc鍵值存儲的自動壓實保留。0表示禁用自動壓縮。
預設值:0
環境變量:ETCD_AUTO_COMPACTION_RETENTION
作用:
--auto-compaction-mode
含義:說明--auto-compaction-retention配置的基于時間保留的三種模式:periodic, revision. periodic
預設值:periodic
環境變量:ETCD_AUTO_COMPACTION_MODE
作用:
--enable-v2
含義:接受etcd V2用戶端請求
預設值:true
環境變量:ETCD_ENABLE_V2
作用:
2.3 代理相關辨別
提示:--proxy配置etcd以在代理模式下運作,“proxy”僅支援v2 API。
--proxy
含義:代理模式設定,("off", "readonly" or "on")
預設值:off
環境變量:ETCD_PROXY
作用:
--proxy-failure-wait
含義:在重新考慮代理請求之前,endpoints 将處于失敗狀态的時間(以毫秒為機關)。
預設值:5000
環境變量:ETCD_PROXY_FAILURE_WAIT
作用:
--proxy-refresh-interval
含義:endpoints 重新整理間隔的時間(以毫秒為機關)。
預設值:30000
環境變量:ETCD_PROXY_REFRESH_INTERVAL
作用:
--proxy-dial-timeout
含義:撥号逾時的時間(以毫秒為機關)或0表示禁用逾時
預設值:1000
環境變量:ETCD_PROXY_DIAL_TIMEOUT
作用:
--proxy-write-timeout
含義:寫入逾時的時間(以毫秒為機關)或0以禁用逾時。
預設值:5000
環境變量:ETCD_PROXY_WRITE_TIMEOUT
作用:
--proxy-read-timeout
含義:讀取逾時的時間(以毫秒為機關)或0以禁用逾時。
預設值:0
環境變量:ETCD_PROXY_READ_TIMEOUT
作用:
2.4 安全相關辨別
--ca-file
提示:已棄用,可以替換為--trusted-ca-file ca.crt、--client-cert-auth,etcd将執行相同的操作。
--cert-file
含義:用戶端伺服器TLS證書檔案的路徑。
預設值:
環境變量:ETCD_CERT_FILE
作用:
--key-file
含義:用戶端伺服器TLS密鑰檔案的路徑。
預設值:
環境變量:ETCD_KEY_FILE
作用:
--client-cert-auth
含義:啟用用戶端證書驗證。
預設值:false
環境變量:ETCD_CLIENT_CERT_AUTH
作用:
--client-crl-file
含義:用戶端證書吊銷清單檔案的路徑。
預設值:
環境變量:ETCD_CLIENT_CRL_FILE
作用:
--trusted-ca-file
含義:用戶端伺服器的路徑TLS可信CA憑證檔案。
預設值:
環境變量:ETCD_TRUSTED_CA_FILE
作用:
--auto-tls
含義:用戶端TLS使用生成的證書
預設值:false
環境變量:ETCD_AUTO_TLS
作用:
--peer-ca-file
提示:已棄用,可以替換為--peer-trusted-ca-file ca.crt --peer-client-cert-auth,etcd将執行相同的操作。
--peer-cert-file
含義:對等伺服器TLS證書檔案的路徑。這是對等流量的證書,用于伺服器和用戶端。
預設值:
環境變量:ETCD_PEER_CERT_FILE
作用:
--peer-key-file
含義:對等伺服器TLS密鑰檔案的路徑。這是對等流量的關鍵,用于伺服器和用戶端。
預設值:
環境變量:ETCD_PEER_KEY_FILE
作用:
--peer-client-cert-auth
含義:啟用對等用戶端證書驗證。
預設值:false
環境變量:ETCD_PEER_CLIENT_CERT_AUTH
作用:
--peer-crl-file
含義:對等證書吊銷清單檔案的路徑。
預設值:
環境變量:ETCD_PEER_CRL_FILE
作用:
--peer-trusted-ca-file
含義:對等伺服器TLS可信CA檔案的路徑。
預設值:
環境變量:ETCD_PEER_TRUSTED_CA_FILE
作用:
--peer-auto-tls
含義:Peer TLS使用自動生成的證書
預設值:false
環境變量:ETCD_PEER_AUTO_TLS
作用:
--peer-cert-allowed-cn
含義:允許CommonName進行對等體認證。
預設值:none
環境變量:ETCD_PEER_CERT_ALLOWED_CN
作用:
2.5 日志相關辨別
--logger
含義:為結構化日志記錄指定'zap'或'capnslog'。
預設值:capnslog
環境變量:ETCD_LOGGER
作用:
--log-outputs
含義:指定'stdout'或'stderr'以跳過日志記錄,即使在systemd或逗号分隔的輸出目标清單下運作也是如此。
預設值:default
環境變量:ETCD_LOG_OUTPUT
作用:
--debug
含義:将所有子包的預設日志級别設定為DEBUG。
預設值:false(所有包的INFO)
環境變量:ETCD_DEBUG
作用:
--log-package-levels
含義:将單個etcd子包設定為特定的日志級别。一個例子是etcdserver=WARNING,security=DEBUG
預設值:(所有包的INFO)
環境變量:ETCD_LOG_PACKAGE_LEVELS
作用:
2.6 非安全相關辨別
--force-new-cluster
含義:強制建立新的單成員群集。它送出配置更改,強制删除叢集中的所有現有成員并添加自身。需要将其設定為還原備份。
預設值:false
環境變量:ETCD_FORCE_NEW_CLUSTER
作用:
2.7 配置檔案相關辨別
--enable-pprof
含義:通過HTTP伺服器啟用運作時分析資料。位址位于用戶端URL +“/ debug / pprof /”
預設值:false
環境變量:
作用:
--metrics
含義:設定導出的名額的詳細程度,指定“擴充”以包括直方圖名額。
預設值:basic
環境變量:
作用:
--listen-metrics-urls
含義:要監聽的其他URL清單将響應端點/metrics和/health端點
預設值:
環境變量:
作用:
2.8 其他相關辨別
--version
含義:列印版本并退出。
預設值:false
環境變量:
作用:
--config-file
含義:從檔案加載伺服器配置。
預設值:
環境變量:
作用:從配置檔案加載相關配置。
2.9 認證相關辨別
--auth-token
略
--bcrypt-cost
含義:為散列身份驗證密碼指定bcrypt算法的成本/強度。有效值介于4和31之間。
預設值:10
環境變量:
作用:      

etcd叢集增加節點

1. 現在叢集的節點資訊
[root@test1 ~]# etcdctl member list 
3098763f11736063: name=test3 peerURLs=http://172.16.0.113:2380 clientURLs=http://172.16.0.113:2379,http://localhost:2379 isLeader=false
a4c992617e0f82a1: name=test1 peerURLs=http://172.16.0.111:2380 clientURLs=http://172.16.0.111:2379,http://localhost:2379 isLeader=true
e198241381008009: name=test2 peerURLs=http://172.16.0.112:2380 clientURLs=http://172.16.0.112:2380 isLeader=false

2. 增加節點 指定 name 及 URL
[root@test1 ~]# etcdctl member add test4 http://172.16.0.114:2380
Added member named test4 with ID 9e3ee0c2cc5c6dd8 to cluster

ETCD_NAME="test4"
ETCD_INITIAL_CLUSTER="test3=http://172.16.0.113:2380,test4=http://172.16.0.114:2380,test1=http://172.16.0.111:2380,test2=http://172.16.0.112:2380"
ETCD_INITIAL_CLUSTER_STATE="existing"

3. 檢查
3098763f11736063: name=test3 peerURLs=http://172.16.0.113:2380 clientURLs=http://172.16.0.113:2379,http://localhost:2379 isLeader=false
9e3ee0c2cc5c6dd8: name=test4 peerURLs=http://172.16.0.114:2380 clientURLs=http://172.16.0.114:2379,http://localhost:2379 isLeader=false
a4c992617e0f82a1: name=test1 peerURLs=http://172.16.0.111:2380 clientURLs=http://172.16.0.111:2379,http://localhost:2379 isLeader=true
e198241381008009: name=test2 peerURLs=http://172.16.0.112:2380 clientURLs=http://172.16.0.112:2380 isLeader=false      

etcd叢集删除節點

1. 檢視所有節點
[root@test1 ~]# etcdctl member list 
3098763f11736063: name=test3 peerURLs=http://172.16.0.113:2380 clientURLs=http://172.16.0.113:2379,http://localhost:2379 isLeader=false
9e3ee0c2cc5c6dd8: name=test4 peerURLs=http://172.16.0.114:2380 clientURLs=http://172.16.0.114:2379,http://localhost:2379 isLeader=false
a4c992617e0f82a1: name=test1 peerURLs=http://172.16.0.111:2380 clientURLs=http://172.16.0.111:2379,http://localhost:2379 isLeader=true
e198241381008009: name=test2 peerURLs=http://172.16.0.112:2380 clientURLs=http://172.16.0.112:2380 isLeader=false

2. 删除選中節點id 進行删除
[root@test1 ~]# etcdctl member remove 3098763f11736063
Removed member 3098763f11736063 from cluster

3. 檢查
[root@test1 ~]# etcdctl member list 
9e3ee0c2cc5c6dd8: name=test4 peerURLs=http://172.16.0.114:2380 clientURLs=http://172.16.0.114:2379,http://localhost:2379 isLeader=false
a4c992617e0f82a1: name=test1 peerURLs=http://172.16.0.111:2380 clientURLs=http://172.16.0.111:2379,http://localhost:2379 isLeader=true
e198241381008009: name=test2 peerURLs=http://172.16.0.112:2380 clientURLs=http://172.16.0.112:2380 isLeader=false
      

  

作者:闫世成

出處:http://cnblogs.com/yanshicheng

聯系:[email protected]

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接。如有問題或建議,請聯系上述郵箱,非常感謝。

繼續閱讀