本篇內(nèi)容主要講解“etcd調(diào)優(yōu)方法是什么”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“etcd調(diào)優(yōu)方法是什么”吧!
創(chuàng)新互聯(lián)專(zhuān)注于巴彥網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供巴彥營(yíng)銷(xiāo)型網(wǎng)站建設(shè),巴彥網(wǎng)站制作、巴彥網(wǎng)頁(yè)設(shè)計(jì)、巴彥網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造巴彥網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供巴彥網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
調(diào)優(yōu)(Tuning)
etcd默認(rèn)設(shè)置適用于網(wǎng)絡(luò)低延遲。但網(wǎng)絡(luò)延遲高,如網(wǎng)絡(luò)跨域數(shù)據(jù)中心,那么心跳間隔和選舉超時(shí)的設(shè)置就需要優(yōu)化(tuning).
網(wǎng)絡(luò)慢不僅僅由于延遲,還可能被Leader和follower的低速磁盤(pán)IO影響。每一次超時(shí)設(shè)置應(yīng)該包含一個(gè)請(qǐng)求發(fā)出到響應(yīng)成功的時(shí)間。
時(shí)間參數(shù)
當(dāng)一個(gè)節(jié)點(diǎn)掛掉(stalls)變慢或者下線,分布式一致性協(xié)議(distributed consensus protocol)依賴(lài)兩個(gè)時(shí)間參數(shù)保證領(lǐng)導(dǎo)力切換。
第一個(gè)參數(shù)叫心跳間隔(Heartbeat Interval)。它代表leader通知所有的followers,他還是Leader的頻率。最佳實(shí)踐,它應(yīng)該被設(shè)置為節(jié)點(diǎn)之間網(wǎng)絡(luò)往返時(shí)間(round-trip time)。etcd默認(rèn)心跳間隔是100ms。
第二個(gè)參數(shù)是選舉超時(shí)(Election TimeoutRTT)。它表示follower在多久后還沒(méi)有收到leader的心跳,它自己就變成Leader。etcd的默認(rèn)選舉超時(shí)是1000ms。
調(diào)整參數(shù)需要做一些權(quán)衡。心跳間隔推薦設(shè)置為節(jié)點(diǎn)之前的最大RTT,一般可設(shè)置為RTT的0.5-1.5倍。如果心跳間隔太短,etcd會(huì)發(fā)送沒(méi)必要心跳增加CPU和網(wǎng)絡(luò)的使用率。另外,過(guò)長(zhǎng)的心跳間隔會(huì)增長(zhǎng)選舉超時(shí)時(shí)間。過(guò)長(zhǎng)的選舉超時(shí)導(dǎo)致要更長(zhǎng)的時(shí)間才能發(fā)現(xiàn)Leader故障。測(cè)量RTT最簡(jiǎn)單方法就是用PING工具。
選舉超時(shí)應(yīng)該基于心跳間隔和節(jié)點(diǎn)的平均RTT去設(shè)置。選舉超時(shí)應(yīng)該至少是RTT的10倍,這樣才能視為網(wǎng)絡(luò)延遲出現(xiàn)方差(variance)。例如,節(jié)點(diǎn)間的RTT是10ms,那么超時(shí)時(shí)間至少應(yīng)該是100ms。
選舉超時(shí)時(shí)間最大限制是50000ms(50s), 只有etcd被部署在全球范圍內(nèi)時(shí),才應(yīng)該使用這個(gè)值。美國(guó)大陸的RTT是130ms,美國(guó)和日本的RTT是350-400ms。如果不均勻的網(wǎng)絡(luò)性能或者常規(guī)的網(wǎng)絡(luò)延遲和丟失,會(huì)引起多次網(wǎng)絡(luò)重試,所以5s是一個(gè)安全的RTT最高值。5s是心跳間隔的最高值,所以超時(shí)時(shí)間最高值應(yīng)該是50s。
一個(gè)集群中的所有節(jié)點(diǎn)應(yīng)該設(shè)置一樣的心跳間隔和選舉超時(shí)。如果設(shè)置不一樣可能使集群不穩(wěn)定。
默認(rèn)值可以被命令行參數(shù)或環(huán)境參數(shù)覆蓋,單位是ms。
# 令行參數(shù):
$ etcd --heartbeat-interval=100 --election-timeout=500
# 環(huán)境參數(shù):
$ ETCD_HEARTBEAT_INTERVAL=100 ETCD_ELECTION_TIMEOUT=500 etcd
快照(Snapshots)
etcd追加key的變更到日志中。這些日志用一行記錄一個(gè)key的變更,日志就不斷的增長(zhǎng)。當(dāng)簡(jiǎn)單使用etcd時(shí)這些日志增長(zhǎng)不會(huì)有問(wèn)題,但大集群的時(shí)候日志就會(huì)越來(lái)越多。
為了避免大量日志,etcd會(huì)定期制作快照。這些快照通過(guò)保存日志里的修改到當(dāng)前狀態(tài)和移除老的日志去壓縮日志。
快照優(yōu)化
創(chuàng)建快照對(duì)于v2版是昂貴的,所有只有當(dāng)更改記錄操作一定數(shù)量后,才會(huì)制作快照。默認(rèn),是每10000次更改才會(huì)制作快照。如果etcd的內(nèi)存和磁盤(pán)使用率過(guò)高,可以降低這個(gè)閥值(threshold)。
# Command line arguments:
$ etcd --snapshot-count=5000
# Environment variables:
$ ETCD_SNAPSHOT_COUNT=5000 etcd
磁盤(pán)
etcd集群對(duì)磁盤(pán)的延遲非常敏感。因?yàn)閑tcd需要存儲(chǔ)變更日志,多個(gè)進(jìn)程操作磁盤(pán)可能引起更高的fsync延遲。這些可能引起etcd丟失心跳,請(qǐng)求超時(shí)或者Leader臨時(shí)丟失。可以通過(guò)提高etcd進(jìn)程的磁盤(pán)優(yōu)先級(jí)。
在Linux, etcd的磁盤(pán)優(yōu)先級(jí)可以通過(guò)ionic去配置
# best effort, highest priority
$ sudo ionice -c2 -n0 -p `pgrep etcd`
網(wǎng)絡(luò)
如果etcd的Leader服務(wù)大量并發(fā)客戶(hù)端,這就會(huì)導(dǎo)致follower的請(qǐng)求的處理被延遲因?yàn)榫W(wǎng)絡(luò)延遲。follower的send buffer中能看到錯(cuò)誤的列表。
dropped MsgProp to 247ae21ff9436b2d since streamMsg's sending buffer is full
dropped MsgAppResp to 247ae21ff9436b2d since streamMsg's sending buffer is full
這些錯(cuò)誤可以通過(guò)提高Leader的網(wǎng)絡(luò)優(yōu)先級(jí)來(lái)提高follower的請(qǐng)求的響應(yīng)。可以通過(guò)流量控制機(jī)制來(lái)提高
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
到此,相信大家對(duì)“etcd調(diào)優(yōu)方法是什么”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!