नेता का विकल्प
1) आपको एक नेता की आवश्यकता क्यों है और जब वह बिल्कुल भी उचित है
नेता - एक नोड जिसे महत्वपूर्ण कार्यों को करने का विशेष अधिकार है: एक मुकुट/ईटीएल शुरू करना, शार्क का समन्वय करना, कुंजी वितरित करना, कॉन्फ़िगरेशन को बदलना। यह आक्रमणकारियों ("एक कलाकार") को सरल बनाता है, लेकिन जोखिम (एसपीओएफ, फिर से चुनाव, अंतराल) जोड़ ता है।
नेतृत्व का उपयोग करें यदि:- निष्पादन की विशिष्टता की आवश्यकता है (उदाहरण के लिए, एक मिनट में एक बार बिलिंग एग्रीगेटर);
- परिवर्तनों को क्रमबद्ध करने की आवश्यकता है (कॉन्फ़िगरेशन रजिस्टर, वितरित ताले)
- क्लस्टर प्रोटोकॉल नेतृत्व प्रतिकृति (रफ) मानता है।
- समस्या को कुंजी द्वारा पहचान और आदेश द्वारा हल किया जाता है;
- कार्य-चोरी/कतारों के माध्यम से समानांतर किया जा सकता है;
- "नेता" एकमात्र संकीर्ण बिंदु (व्यापक प्रशंसक-इन) बन जाता है।
2) बेस मॉडल: लीज + कोरम + युग
शर्तें
पट्टा: नेता टी सेकंड का हकदार है; नवीनीकरण करना होगा।
दिल की धड़ कन: आवधिक विस्तार/लाइव सिग्नल।
युग/शब्द: नीरस रूप से बढ़ ती नेतृत्व संख्या। "पुराने" नेताओं को पहचानने में मदद करता है।
तलवारबाजी टोकन: वही मोनोटोन नंबर जो संसाधन उपभोक्ता (डेटाबेस/भंडारण) पुराने नेता के संचालन की जांच और अस्वीकार करता है।
आक्रमणकारी
किसी भी समय, एक से अधिक वास्तविक नेता (सुरक्षा) नहीं।
असफलता के मामले में, प्रगति संभव है: एक नया (जीवन) एक उचित समय में चुना जाता है।
नेता संचालन एक युग के साथ होते हैं; सिंकी केवल नए युग स्वीकार करते हैं।
3) एल्गोरिदम और प्रोटोकॉल का अवलोकन
3. 1 बेड़ा (नेतृत्व प्रतिकृति)
स्थिति: अनुयायी उम्मीदवार - नेता।
टाइमर: यादृच्छिक चुनाव समय समाप्ति (जिटर), Vote; नेता दिल की धड़ कन के रूप में परिशिष्ट रखता है।
गारंटी: कोरम, मानक शर्तों के तहत कोई विभाजन-मस्तिष्क, तार्किक एकरसता (शब्द/सूचकांक) के साथ लॉगबुक।
3. 2 पैक्सोस/सिंगल-डिक्री/मल्टी-पैक्सोस
सर्वसम्मति का सैद्धांतिक आधार; व्यवहार में - "चुने हुए समन्वयक" (नेता एनालॉग) के साथ भिन्नताएं (जैसे, मल्टी-पैक्सोस)।
सीधे लागू करने के लिए कठिन; तैयार किए गए कार्यान्वयन/पुस्तकालयों का उपयोग अधिक बार किया जाता है।
3. 3 ZAB (ज़ूकीपर परमाणु प्रसारण)
ZK तंत्र: वसूली चरणों के साथ नेतृत्व जर्नल प्रतिकृति; नेतृत्व जैसे प्राइमिटिव के लिए युग (zxid) और अनुक्रमिक पंचांग नोड्स।
3. 4 बुली/चांग-रॉबर्ट्स (रिंग्स/मोनार्क)
कोरम के बिना स्थिर टोपोलॉजी के लिए "प्रशिक्षण" एल्गोरिदम। आंशिक नेटवर्क विफलताओं/विभाजन को ध्यान में न रखें - बिक्री में लागू न करें।
4) व्यावहारिक प्लेटफॉर्म
4. 1 ज़ूकीपर
EPHEMERAL_SEQUENTIAL पैटर्न: प्रक्रिया '/लीडर/लॉक-XXXX 'बनाती है, न्यूनतम संख्या नेता है।
सत्र का नुकसान नोड गायब हो जाता है - पुन: चयन तात्कालिक है।
"पूर्ववर्ती" की प्रतीक्षा के माध्यम से न्याय।
4. 2 आदि (रफ)
क्लस्टर स्तर पर ही मूल नेतृत्व; आवेदनपत्रों के लिए - etcd संगामिति: 'सत्र + म्यूटेक्स/चुनाव'।
लीज-आईडी с टीटीएल, कीपलाइव; आप एक युग को कुंजी मान में संग्रहीत कर सकते हैं।
4. 3 कांसुल
'सेशन' + 'केवी अधिग्रहण': जो कोई भी कुंजी रखता है वह नेता है। सत्र में टीटीएल/दिल की धड़ कन।
4. 4 कुबेरनेट्स
पट्टे समन्वय एपीआई ('समन्वय। k8s। io/v1 '): ресурс' लीज 'c' होल्डरआइडेंटिटी ',' leaseDurationSeconds ',' renewTime '।
ग्राहक पुस्तकालय 'लीडरेक्शन' (क्लाइंट-गो) कैप्चर/नवीकरण को लागू करता है; नेता-फली के लिए आदर्श।
5) "सुरक्षित" नेता का निर्माण कैसे करें
5. 1 युग और बाड़ लगाए रखें
प्रत्येक लीड युग को बढ़ाता है (उदा। etcd/ZK संशोधन zxid या अलग काउंटर)।
नेता के सभी दुष्प्रभावों (डेटाबेस पर लिखना, कार्य करना) को 'युग' प्रेषित किया जाना चाहिए और इसकी तुलना की जानी चाहिए:sql
UPDATE cron_state
SET last_run = now(), last_epoch =:epoch
WHERE name = 'daily-rollup' AND:epoch > last_epoch;
पुराने नेता (विभाजन-मस्तिष्क के बाद) को अस्वीकार कर दिया जाए
5. 2 समय
'leaseDuration' ≥ '2-3 × दिल धड़ कने वाला इंटरनेट + नेटवर्क + p99 GC ठहराव'।
चुनाव समय - यादृच्छिक (जिटर) ताकि उम्मीदवार टकरा न सकें।
यदि नवीकरण खो जाता है, तो तुरंत महत्वपूर्ण संचालन बंद कर दें।
5. 3 पहचान
'HolderId = नोड # pid # StartTime # rand'। अद्यतन/हटाने के दौरान, एक ही धारक की जाँच करें।
5. 4 पहरेदार
सभी अनुयायी 'लीज/इलेक्शन' परिवर्तनों की सदस्यता लेते हैं और स्थिति के अनुसार शुरू/रुकते हैं।
6) कार्यान्वयन: टुकड़े
6. 1 कुबेरनेट्स (जाओ)
go import "k8s. io/client-go/tools/leaderelection"
lec:= leaderelection. LeaderElectionConfig{
Lock: &rl. LeaseLock{
LeaseMeta: metav1. ObjectMeta{Name: "jobs-leader", Namespace: "prod"},
Client: coordClient,
LockConfig: rl. ResourceLockConfig{Identity: podName},
},
LeaseDuration: 15 time. Second,
RenewDeadline: 10 time. Second,
RetryPeriod: 2 time. Second,
Callbacks: leaderelection. LeaderCallbacks{
OnStartedLeading: func(ctx context. Context) { runLeader(ctx) },
OnStoppedLeading: func() { stopLeader() },
},
}
leaderelection. RunOrDie(context. Background(), lec)
6. 2 etcd (जाओ)
go cli, _:= clientv3. New(...)
sess, _:= concurrency. NewSession(cli, concurrency. WithTTL(10))
e:= concurrency. NewElection(sess, "/election/rollup")
_ = e. Campaign (ctx, podID )//blocking call epoch: = sess. Lease ()//use as part of fencing defer e. Resign(ctx)
6. 3 ज़ूकीपर (जावा, क्यूरेटर)
java
LeaderSelector selector = new LeaderSelector(client, "/leaders/rollup", listener);
selector. autoRequeue();
selector. start(); // listener. enterLeadership () performs leader work with try/finally
7) पुन: चुनाव और सेवा क्षरण
चार्ट में नेता की तीव्र फ्लैपिंग - "मछली की हड्डी"। LeaseDuration/renewDeadine बढ़ाकर और GC/CPU आरी को समाप्त करके इलाज किया जाता है।
पुन: चयन अवधि के लिए, ब्राउनआउट सक्षम करें: पृष्ठभूमि कार्यों की तीव्रता को कम करें या उन्हें पूरी तरह से एक पुष्ट नेतृत्व में फ्रीज करें।
लंबी नौकरियों के लिए, नेता के परिवर्तन के बाद चौकियों + अज्ञात डॉकट करें।
8) स्प्लिट-ब्रेन: बाहर कैसे रहना है
कोरम के साथ सीपी स्टोर (etcd/ZK/Consul) का उपयोग करें; आप कोरम के बिना नेता नहीं ले सकते।
कोरम मध्यस्थ के बिना एपी कैश पर नेतृत्व का निर्माण कभी न करें।
यहां तक कि सीपी मॉडल में, संसाधन स्तर पर बाड़ लगाते रहें - यह दुर्लभ असामान्य परिदृश्यों (ठहराव, अटक ड्राइवरों) के खिलाफ बीमा है।
9) अवलोकन और संचालन
मेट्रिक्स
'लीडरशिप _ is _ leader {app}' (गेज 0/1)।
'चुनाव _ कुल {परिणाम =' जीता 'इस्तीफा}'।
'lease _ renew _ latency _ ms {p50, p95, p99}', 'lease _ renew _ fail _ total'।
'epoch _ value' (क्लस्टर मोनोटनी)।
'फ्लैप्स _ टोटल' प्रति विंडो नेता शिफ्ट की संख्या है।
ZK/etcd के लिए: प्रतिकृति अंतराल, कोरम स्वास्थ्य।
अलर्ट
बार-बार सीसा परिवर्तन (> एन एक घंटे में)।
नवीकरण विफलताएं 'नवीनीकृत '/उच्च p99।
युग की संक्रामकता (अलग-अलग नोड्स में दो अलग-अलग युग)।
एक्स सेकंड से अधिक समय तक कोई नेता नहीं है (यदि व्यवसाय अनुमति नहीं देता है)।
लॉग/ट्रेल्स
लिंक घटनाएँ: 'epoch', 'HolderId', 'कारण' (खोया हुआ पट्टा, सत्र समाप्त हो गया), 'अवधि _ ms'.
10) टेस्ट प्लेबुक (गेम डेज़)
विभाजन: 2 क्षेत्रों के बीच नेटवर्क को तोड़ ना - नेतृत्व केवल कोरम भाग में स्वीकार्य है।
जीसी-स्टॉप: कृत्रिम रूप से नेता को 5-10 के दशक के लिए रोकें - पट्टे को खो देना चाहिए और काम करना बंद करना चाहिए।
घड़ी तिरछा/बहाव: सुनिश्चित करें कि शुद्धता दीवार-घड़ीपर निर्भर नहीं करती है (बाड ़/युग बच जाता है)।
किल -9: अचानक नेता दुर्घटना - नया नेता - leaseDuration।
धीमा भंडारण: डिस्क को धीमा करें/रफ लॉग - चुनाव समय का अनुमान लगाएं, डिबग समय।
11) एंटी-पैटर्न
Redis 'SET NX PX' with नो फेंसिंग और नो कोरम के माध्यम से "लीडर"।
'LeaseDuration' महत्वपूर्ण ऑपरेशन अवधि के p99 से कम है।
नेतृत्व खोने के बाद काम रोकना/जारी रखना ("मैं एक मिनट खत्म करूंगा")।
चुनाव के समय में झटके की कमी - चुनावी तूफान।
बिना किसी चौकियों के एक एकल लंबी नौकरी - प्रत्येक फ्लैप के परिणामस्वरूप खरोंच से एक रीप्ले होता है।
फॉलबैक के बिना नेतृत्व और ट्रैफिक रूटिंग (चिपचिपा) का करीबी लिंक - फ्लैप के साथ बोतलों को 5xx मिलता है।
12) कार्यान्वयन चेकलिस्ट
- कोरम मध्यस्थ चुना गया है etcd/ZK/Consul/K8s लीज।
- सभी नेता दुष्प्रभावों में स्टोर और पास युग/तलवारबाजी।
- कॉन्फ़िगर किए गए समय नेटवर्क/जीसी मार्जिन के साथ 'लीज़ड्यूरेशन', 'रेनडेडलाइन', 'रीट्रायपीरियम' हैं।
- नेतृत्व खो जाने पर बिल्ट-इन वॉचर्स और सही शटडाउन।
- नेतृत्व के कार्य अज्ञात और चौकी हैं।
- मेट्रिक्स/अलर्ट और लॉगिंग 'epoch/holderId' सक्षम हैं।
- खेल के दिन: विभाजन, जीसी-स्टॉप, मार, घड़ी तिरछा।
- राजनेताओं को प्रलेखित किया जाता है: कौन/क्या नेता करता है, कौन उसकी जगह ले सकता है, युग संघर्षों को कैसे हल किया जाए।
- क्षरण योजना: एक नेतृत्वहीन प्रणाली क्या करती है।
- प्रदर्शन परीक्षण: लोड के तहत फ्लैप एसएलओ को नष्ट नहीं करते हैं।
13) एफएक्यू
प्रश्न: क्या कोरम के बिना नेतृत्व बनाया जा सकता है?
A: प्रोड में, नहीं। आपको एक सीपी घटक (कोरम) या समतुल्य गारंटी के साथ क्लाउड सेवा की आवश्यकता है।
प्रश्न: अगर पट्टा है तो युग क्यों?
A: पट्टा उत्तरजीविता प्रदान करता है, लेकिन अलगाव/ठहराव के बाद "पुराने नेता" से रक्षा नहीं करता है। युग/बाड़लगाना पुराने नेता के प्रभावों को अमान्य करता है।
प्रश्न: K8s में समय की चूक क्या है?
A: अक्सर 'LeaseDuration≈15s', 'RenewDeadline≈10s', 'RetryPeriod≈2s' का इस्तेमाल किया जाता है। अपने पी 99 लोड और जीसी से मिलान करें।
प्रश्न: आप स्थानीय स्तर पर नेतृत्व का परीक्षण कैसे करते हैं?
A: 3-5 उदाहरण चलाएं, नेटवर्क (tc/netem), ठहराव (SIGSTOP), किल लीडर (SIGKILL), मेट्रिक्स/लॉग/युग की जाँच करें।
प्रश्न: नेताओं को बदलते समय लंबे कार्यों का क्या करना है?
A: Checkpoint + idempotent docat; नेतृत्व के नुकसान के मामले में - तत्काल रोक और संसाधनों की रिहाई।
14) कुल
नेता का एक विश्वसनीय विकल्प युगों का एक कोरम मध्यस्थ + अनुशासन है। नेतृत्व को दिल की धड़ कन के साथ एक पट्टे के रूप में रखें, एक तलवार टोकन के साथ सभी प्रभावों को हराएं, एक मार्जिन के साथ समय निर्धारित करें, नेता के कार्यों को मूर्त और अवलोकनीय बनाएं, नियमित रूप से दुर्घटनाएं खो दें। फिर "एक और केवल एक" कलाकार एक नारा नहीं होगा, लेकिन एक गारंटी जो ठहराव, नेटवर्क सनक और मानवीय त्रुटियों के लिए प्रतिरोधी है।