रखा गया VRRP_script विफल नहीं हुआ


11

इसलिए मैं दो सर्वरों पर रख-रखाव कर रहा हूं और मैं इसे दूसरे को विफल नहीं कर सकता।

नीचे मेरा एक सर्वर के लिए मेरा कॉन्फिगरेशन है। दोनों के बीच एकमात्र भिन्नता है प्राथमिकता संख्या मास्टर 110 और पीछे 109 हो रही है।

लेकिन जब मैं अपनी प्रक्रिया को /etc/init.d/process स्टॉप के साथ बंद कर देता हूं तो वह विफल नहीं होती है। मुझे अभी VRRP_Script (chk_script) मिला है और कुछ नहीं। कोई फेलोवर या कुछ नहीं।

vrrp_script chk_script {
script "/usr/local/bin/failover.sh"
interval 2
weight 2
}

vrrp_instance HAInstance {
state BACKUP
interface eth0
virtual_router_id 8
priority 109
advert_int 1
nopreempt
vrrp_unicast_bind 10.10.10.8
vrrp_unicast_peer 10.10.10.9
virtual_ipaddress {
  10.10.10.10/16 dev eth0
}
notify /usr/local/bin/keepalivednotify.sh
track_script {
  chk_script weight 20
}
}

यह नीचे मेरा chk_script है। यही समस्या तब भी होती है जब मैं अपने स्क्रिप्ट के रूप में -0 प्रक्रिया को मार देता हूं।

!/bin/bash
SERVICE='process'
STATUS=$(ps ax | grep -v grep | grep $SERVICE)

if [ "$STATUS" != "" ]
then
    exit 0
else
    exit 1
fi

किसी को भी इसके लिए एक तय पता है? धन्यवाद।


क्या आपका बैकअप उदाहरण प्राथमिकता परिवर्तन को नोटिस करता है या कुछ भी लॉग करता है? दोनों से लॉग मददगार होगा।
जिम जी।

नहीं, यह नहीं है। केवल एक बार यह परिवर्तन नोटिस करता है जब मास्टर चला जाता है। जैसे कि जब मैं रखना बंद कर देता हूं। मैं जिस प्रक्रिया की निगरानी कर रहा हूं उसे रोकना केवल मास्टर पर VRRP_Script (chk_script) दिखाता है। गुलाम पर कुछ भी नहीं।
22

जवाबों:


13

मेरे पास वास्तव में एक ही मुद्दा था, हालांकि मेरी समस्या फ़ायरवॉल में नहीं थी और न ही मेरे ईथरनेट एडॉप्टर में, लेकिन चेक स्क्रिप्ट की "वेट" सेटिंग्स में थी।

यह मेरा कॉन्फ़िगरेशन था:

गुरुजी:

vrrp_instance haproxy {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1

बैकअप:

vrrp_instance haproxy {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1

Check_script:

vrrp_script chk_haproxy {
   script "python /root/ha_check.py"
   interval 2     # check every 2 seconds
   weight 2
   rise 2
   fall 2

}

मास्टर द्वारा वीआईपी को जारी करने से इनकार करने का कारण यह था क्योंकि इस तथ्य के बावजूद कि स्क्रिप्ट विफल हो गई थी, मास्टर अभी भी बैकप सर्वर से उच्च प्राथमिकता संख्या वाले थे। ऐसा इसलिए हुआ क्योंकि Check_script पर "भार" सेटिंग प्राथमिकता संख्या के बीच "GAP" को कवर करने के लिए पर्याप्त नहीं थी, जिसका अर्थ है कि मास्टर सर्वर के एक से अधिक BACKUP सर्वर की प्राथमिकता संख्या बढ़ाना। मैं आगे बताऊंगा:

रखने की नियमावली के अनुसार, "वजन" सेटिंग पर एक सकारात्मक संख्या उस संख्या को प्राथमिकता में जोड़ देगी यदि चेक सफल होता है।
यदि चेक विफल हो जाता है तो एक ऋणात्मक संख्या उस संख्या को प्राथमिकता संख्या से घटा देगी।

तो, मेरे विन्यास के अनुसार:

सर्वर प्राथमिकताएँ स्क्रिप्ट की पूर्व विफलता:
मास्टर: 152
बैकअप: 100
फ़ेलओवर_आईपी: मास्टर

मास्टर सर्वर द्वारा फेलओवर आईपी को सही ढंग से "पकड़ा" गया क्योंकि मास्टर की बैकअप सर्वर (152> 100) की तुलना में उच्च प्राथमिकता है।

सर्वर प्राथमिकताएँ स्क्रिप्ट की विफलता के बाद:
मास्टर सर्वर: 148
बैकअप सर्वर: 102
विफलता_आईपी: मास्टर पर क्लिक करें

फ़ेलओवर आईपी अभी भी मास्टर सर्वर पर है क्योंकि मास्टर ने BACKUP (148> 102) की तुलना में फिर से उच्च प्राथमिकता दी है। MASTER सर्वर IP को जारी करने से इनकार कर रहा था और उसकी प्राथमिकता अन्य सर्वर की तुलना में अधिक होने के बाद से उसने सही किया था।

मेरी स्थिति पर समाधान था:

समाधान -1: दोनों सर्वरों की प्राथमिकता संख्या बदलें ताकि उनके पास ज्यादा "गैप" न हो।
उदाहरण के लिए:
मास्टर प्राथमिकता: 150
बैकअप प्राथमिकता: 149
चेक_स्क्रिप्ट वजन: जैसा कि यह है (2)।

उपरोक्त कॉन्फ़िगरेशन के साथ, जब स्क्रिप्ट सफल हो जाती है (मतलब सब ठीक है) प्राथमिकताएं होंगी:
मास्टर: 152
बैकअप: 149
IP_Location: मास्टर पर (152> 149)

जब स्क्रिप्ट विफल हो जाती है:
मास्टर: 150
बैकअप: 151
IP_Location: बैकअप पर (151> 150)

समाधान - 2: स्क्रिप्ट का भार संख्या 2 से, -60 तक बदलें


यह भी ऐसा लगता है जैसे किसी भी तरह से एक वजन निर्दिष्ट नहीं करने का मतलब है कि एक असफल ट्रैक_स्क्रिप्ट सीधे गलती की स्थिति को ट्रिगर करेगा
ऑस्कर

@ उत्तर: कृपया इस उत्तर को स्वीकार करें क्योंकि मैंने भी अपना मुद्दा हल कर लिया है।
अंकुर सोनी

4

मेरे पास एक ही मुद्दा है - दो CentOS 7.1 सर्वर, जो track_script के साथ हैं, और MASTER पर vrrp_script को विफल करने के परिणामस्वरूप केवल लॉग लॉग संदेश "VRRP_Script (chk_script) विफल हुआ", विफलता में नहीं। हालांकि, बैकप सर्वर पर, मुझे वर्चुअल आईपी पर अधिक से अधिक समय तक टिके रहने के संदेश मिलते रहे, जब तक कि मैं मास्टर सर्वर पर Track_script विफल था।

मेरे मामले में समाधान: वीएसआरपी पैकेट / मल्टीकास्ट पैकेट की अनुमति देने के लिए, मास्टर सर्वर पर फ़ायरवॉल (आईपीटेबल्स) को सही ढंग से कॉन्फ़िगर नहीं किया गया था, जबकि उसी समय दूसरे सर्वर, बीयूकेयूपी पर फ़ायरवॉल को सही ढंग से कॉन्फ़िगर किया गया था।

मैंने दोनों सर्वरों में समान iptables नियम प्रविष्ट किए हैं:

iptables -A INPUT -i eth0 -d 224.0.0.0/8 -j ACCEPT
iptables -A INPUT -p vrrp -i eth0 -j ACCEPT

यह सर्वरों (बैकप वीआरआरपी सर्वर) में से एक पर काम करता है, लेकिन मास्टर में से एक नहीं है क्योंकि मैं यह भूल गया था कि इंटरफ़ेस को मास्टर सर्वर पर 'एथ0' नाम नहीं दिया गया था, इस प्रकार दोनों नियमों का कोई प्रभाव नहीं पड़ा।

यह मेरे द्वारा देखे गए व्यवहार की व्याख्या करता है:

अगर किसी भी वर्चुअल VR_Pter स्पीकर को किसी निश्चित virtual_router_id के लिए नहीं देखा जा सकता है, तो यह अभी भी खुद को एक नकारात्मक वजन संशोधन के बाद भी सर्वोच्च प्राथमिकता (इस प्रकार सही मास्टर) के रूप में मानता है क्योंकि यह कभी भी अपनी प्राथमिकता से अधिक VRRP संदेशों को प्राप्त नहीं करता है ( क्योंकि अन्य वक्ताओं के विज्ञापनों को फ़ायरवॉल द्वारा अवरुद्ध किया जाता है और यह उनके बारे में जागरूक करने के लिए रखने की प्रक्रिया तक नहीं पहुँच सकता है)। यही कारण है कि आप इसे VIP जारी नहीं करते हैं।

हालांकि, बैकप सर्वर, (अब विफल) के विज्ञापन को देखने में सक्षम था, मास्टर ने उन पैकेटों में प्राथमिकता को अपने से कम मूल्य पर पाया, और खुद को मास्टर घोषित करने और वीआईपी का दावा करने के लिए ग्रेच्युटी एआरपी भेजने के लिए आगे बढ़ा। इसलिए हम एक ऐसी स्थिति में समाप्त हो गए जहां दोनों सर्वरों ने सोचा कि उन्हें वीआईपी के रूप में मास्टर की सेवा करने की आवश्यकता होगी।

निष्कर्ष: - यदि आप अजीब व्यवहार (कोई विफलता नहीं, कई मास्टर) का अनुभव करते हैं, तो हमेशा सभी वीआरआरपी वक्ताओं पर फ़ायरवॉल कॉन्फ़िगरेशन की जांच करें। Keepalived लॉगिंग काफी मददगार नहीं है क्योंकि यह (VRRP_Script (chk_script) विफल होने के बाद एक सरल संदेश "VIP जारी नहीं किया गया क्योंकि मैं अभी भी सबसे अधिक बेशकीमती हूं" लाइन बहुत मुश्किल से समस्या निवारण में ढील दी होगी।

  • एक Track_script स्विच ऑफ / ऑन प्रकार का नहीं है ("यदि स्क्रिप्ट ठीक है: VIP चुनाव के लिए योग्य; यदि ठीक नहीं है तो: VIP चुनाव के लिए पूरी तरह से अयोग्य है") - यह केवल चुनाव जीतने की संभावना को बढ़ाता / घटाता है और यदि केवल रखा गया है कभी केवल वीआरआरपी स्पीकर के रूप में खुद को देखता है और कभी भी अन्य वक्ताओं के कोई संदेश प्राप्त नहीं करता है, वास्तव में बहुत ज्यादा चुनाव नहीं होते हैं - आप हमेशा जीतते हैं।

0

मैं बस आप के रूप में एक ही स्थिति में टकरा गया और रखवाले के बारे में कुछ अध्ययन किया। प्रत्येक सर्वर में क्या हो रहा है लगता है। मान लेते हैं कि आप मैनुअल फेलबैक आर्किटेक्चर को लागू करना चाहते हैं,

1 बैकपैक नोड पर

हर बार जब track_script की संख्या में विफल रहता है गिरावट बार यह 2 बैकअप नोड के लिए विज्ञापन भेजता है। यहाँ बिंदु विज्ञापन के अंदर प्राथमिकता सेट है। आपके मामले में,

129 (109 + 20)

2nd BACKUP सर्वर पर भेजा जाता है।

2 बैकपूप सर्वर पर

अगला 2 BACKUP नोड पर है।

RFC के अनुसार ,

If the Priority in the ADVERTISEMENT is Zero, then:

  o  Set the Master_Down_Timer to Skew_Time
else:

  If Preempt_Mode is False, or If the Priority in the
  ADVERTISEMENT is greater than or equal to the local
  Priority, then:

    o Reset the Master_Down_Timer to Master_Down_Interval
  else:

    o Discard the ADVERTISEMENT
  endif
endif

चूंकि, आपके पास nopreempt सक्षम है और उच्च प्राथमिकता वाला vrrp प्राप्त करना है, 2nd BACKUP नोड राज्य संक्रमण चरण में नहीं जा रहा है।

समाधान

इसलिए यदि आप 2 रा नोड पर राज्य परिवर्तन करना चाहते हैं, तो आप या तो कर सकते हैं,

  1. सेट वजन करने के लिए 0 1 बैकअप नोड पर। इससे प्रायोरिटी 0 का विज्ञापन 2nd BACKUP नोड को भेजा जाएगा । डॉक्टर वजन 0 के बारे में अधिक बताते हैं।

  2. 2 बैकपैक नोड पर nopreempt को बंद करें ।

  3. 1 बैकअप नोड पर कम से कम -2 वजन सेट करें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.