您好,登錄后才能下訂單哦!
本篇內容主要講解“etcd調優方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“etcd調優方法是什么”吧!
調優(Tuning)
etcd默認設置適用于網絡低延遲。但網絡延遲高,如網絡跨域數據中心,那么心跳間隔和選舉超時的設置就需要優化(tuning).
網絡慢不僅僅由于延遲,還可能被Leader和follower的低速磁盤IO影響。每一次超時設置應該包含一個請求發出到響應成功的時間。
時間參數
當一個節點掛掉(stalls)變慢或者下線,分布式一致性協議(distributed consensus protocol)依賴兩個時間參數保證領導力切換。
第一個參數叫心跳間隔(Heartbeat Interval)。它代表leader通知所有的followers,他還是Leader的頻率。最佳實踐,它應該被設置為節點之間網絡往返時間(round-trip time)。etcd默認心跳間隔是100ms。
第二個參數是選舉超時(Election TimeoutRTT)。它表示follower在多久后還沒有收到leader的心跳,它自己就變成Leader。etcd的默認選舉超時是1000ms。
調整參數需要做一些權衡。心跳間隔推薦設置為節點之前的最大RTT,一般可設置為RTT的0.5-1.5倍。如果心跳間隔太短,etcd會發送沒必要心跳增加CPU和網絡的使用率。另外,過長的心跳間隔會增長選舉超時時間。過長的選舉超時導致要更長的時間才能發現Leader故障。測量RTT最簡單方法就是用PING工具。
選舉超時應該基于心跳間隔和節點的平均RTT去設置。選舉超時應該至少是RTT的10倍,這樣才能視為網絡延遲出現方差(variance)。例如,節點間的RTT是10ms,那么超時時間至少應該是100ms。
選舉超時時間最大限制是50000ms(50s), 只有etcd被部署在全球范圍內時,才應該使用這個值。美國大陸的RTT是130ms,美國和日本的RTT是350-400ms。如果不均勻的網絡性能或者常規的網絡延遲和丟失,會引起多次網絡重試,所以5s是一個安全的RTT最高值。5s是心跳間隔的最高值,所以超時時間最高值應該是50s。
一個集群中的所有節點應該設置一樣的心跳間隔和選舉超時。如果設置不一樣可能使集群不穩定。
默認值可以被命令行參數或環境參數覆蓋,單位是ms。
# 令行參數:
$ etcd --heartbeat-interval=100 --election-timeout=500
# 環境參數:
$ ETCD_HEARTBEAT_INTERVAL=100 ETCD_ELECTION_TIMEOUT=500 etcd
快照(Snapshots)
etcd追加key的變更到日志中。這些日志用一行記錄一個key的變更,日志就不斷的增長。當簡單使用etcd時這些日志增長不會有問題,但大集群的時候日志就會越來越多。
為了避免大量日志,etcd會定期制作快照。這些快照通過保存日志里的修改到當前狀態和移除老的日志去壓縮日志。
快照優化
創建快照對于v2版是昂貴的,所有只有當更改記錄操作一定數量后,才會制作快照。默認,是每10000次更改才會制作快照。如果etcd的內存和磁盤使用率過高,可以降低這個閥值(threshold)。
# Command line arguments:
$ etcd --snapshot-count=5000
# Environment variables:
$ ETCD_SNAPSHOT_COUNT=5000 etcd
磁盤
etcd集群對磁盤的延遲非常敏感。因為etcd需要存儲變更日志,多個進程操作磁盤可能引起更高的fsync延遲。這些可能引起etcd丟失心跳,請求超時或者Leader臨時丟失。可以通過提高etcd進程的磁盤優先級。
在Linux, etcd的磁盤優先級可以通過ionic去配置
# best effort, highest priority
$ sudo ionice -c2 -n0 -p `pgrep etcd`
網絡
如果etcd的Leader服務大量并發客戶端,這就會導致follower的請求的處理被延遲因為網絡延遲。follower的send buffer中能看到錯誤的列表。
dropped MsgProp to 247ae21ff9436b2d since streamMsg's sending buffer is full
dropped MsgAppResp to 247ae21ff9436b2d since streamMsg's sending buffer is full
這些錯誤可以通過提高Leader的網絡優先級來提高follower的請求的響應。可以通過流量控制機制來提高
tc qdisc add dev eth0 root handle 1: prio bands 3
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip sport 2380 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip dport 2380 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip sport 2739 0xffff flowid 1:1
tc filter add dev eth0 parent 1: protocol ip prio 2 u32 match ip dport 2739 0xffff flowid 1:1
到此,相信大家對“etcd調優方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。