مجموعههای ZooKeeper بهگونهای طراحی شدهاند که با وجود ازدست رفتن یک یا چند گره ZooKeeper، همچنان فعال بمانند و هیچ دادهای ازدست نرود. از این انعطافپذیری میتوان بهطور مؤثری برای انجام تعمیرات در گرههای ZooKeeper بدون زمان اَکار سیستم استفاده کرد.
درباره ZooKeeper و Edge
در Edge، گرههای ZooKeeper حاوی دادههای پیکربندی درباره مکان و پیکربندی مؤلفههای مختلف Edge هستند و مؤلفههای مختلف را از تغییرات پیکربندی مطلع میکنند. همه توپولوژیهای Edge پشتیبانیشده برای سیستم تولید از حداقل سه گره ZooKeeper استفاده میکنند.
از ویژگیهای ZK_HOSTS و ZK_CLIENT_HOSTS در فایل پیکربندی Edge برای مشخص کردن گرههای ZooKeeper استفاده کنید. برای مثال:
ZK_HOSTS="$IP1 $IP2 $IP3" ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"
مکان:
ZK_HOSTSنشانیهای IP گرههای ZooKeeper را مشخص میکند. نشانیهای IP باید در همه گرههای ZooKeeper با ترتیب یکسانی فهرست شوند.در محیط چندمرکز داده، همه گرههای ZooKeeper را از همه مراکز داده فهرست کنید.
ZK_CLIENT_HOSTSنشانیهای IP گرههای ZooKeeper را که فقط توسط این «مرکز داده» استفاده میشود مشخص میکند. نشانیهای IP باید با همان ترتیب در همه گرههای ZooKeeper در «مرکز داده» فهرست شوند.در نصب یک «مرکز داده»، این گرهها همان گرههایی هستند که توسط ZK_HOSTS مشخص شدهاند. در محیط چندمرکز داده، فایل پیکربندی Edge برای هر مرکز داده باید فقط گرههای ZooKeeper را برای آن مرکز داده فهرست کند.
بهطور پیشفرض، همه گرههای ZooKeeper بهعنوان گرههای رأیدهنده تعیین میشوند. یعنی همه گرهها در انتخاب رهبر ZooKeeper مشارکت میکنند. میتوانید اصلاحکننده
:observer را با ZK_HOSTS اضافه کنید تا نشان دهید
گره یک گره ناظر است و نه رأیدهنده. گره ناظر در انتخاب رهبر شرکت نمیکند.
معمولاً هنگام ایجاد چندین «مرکز داده Edge» یا زمانی که یک «مرکز داده» تعداد زیادی گره ZooKeeper دارد، اصلاحکننده :observer را مشخص میکنید. برای مثال، در یک
نصب Edge با ۱۲ میزبان و دو مرکز داده، ZooKeeper در گره ۹ در مرکز داده ۲
ناظر است:

سپس از تنظیمات زیر در فایل پیکربندی خود برای «مرکز داده ۱» استفاده میکنید:
ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer" ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"
و برای «مرکز داده ۲»:
ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer" ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"
بخشهای زیر حاوی جزئیات بیشتری درباره گرههای رهبر، رأیدهنده، و ناظر است و ملاحظات مربوط به افزودن گرههای رأیدهنده و ناظر را شرح میدهد.
درباره رهبران، دنبالکنندگان، رأیدهندگان، و ناظران
در نصب ZooKeeper چندگرهای، یکی از گرهها بهعنوان رهبر تعیین میشود. همه گرههای ZooKeeper دیگر بهعنوان دنبالکننده تعیین میشوند. درحالیکه خواندن میتواند از هر گره ZooKeeper انجام شود، همه درخواستهای نوشتن به رهبر ارسال میشوند. برای مثال، «پردازشگر پیام» جدیدی به Edge اضافه میشود. این اطلاعات در رهبر ZooKeeper نوشته میشود. همه دنبالکنندگان سپس دادهها را تکرار کنید.
در زمان نصب Edge، هر گره ZooKeeper را بهعنوان رأیدهنده یا ناظر تعیین میکنید. سپس رهبر توسط همه گرههای رأیدهنده ZooKeeper انتخاب میشود. تنها شرط لازم برای انتخاب رهبر این است که حدنصاب گرههای رأیدهنده ZooKeeper فعال دردسترس باشد. حد نصاب یعنی بیشاز نیمی از همه گرههای ZooKeeper رأیدهنده، در همه مراکز داده، فعال هستند.
اگر حد نصاب گرههای رأیدهنده دردسترس نباشد، هیچ رهبری نمیتواند انتخاب شود. در این سناریو، Zookeeper نمیتواند به درخواستها پاسخ دهد. این یعنی تا زمانی که حد نصاب بازیابی نشود، نمیتوانید درخواستی به Edge Management Server ارسال کنید، درخواستهای Management API را پردازش کنید، یا به Edge UI وارد شوید.
برای مثال، در یک نصب «مرکز داده»:
- سه گره ZooKeeper نصب کردید
- همه گرههای ZooKeeper رأیدهنده هستند
- حدنصاب دو گره رأیدهنده فعال است
- اگر فقط یک گره رأیدهنده دردسترس باشد، دراینصورت مجموعه ZooKeeper نمیتواند کار کند
در نصب با دو مرکز داده:
- سه گره ZooKeeper برای هر مرکز داده نصب کردهاید، درمجموع شش گره
- مرکز داده ۱ سه گره رأیدهنده دارد
- مرکز داده ۲ دو گره رأیدهنده و یک گره ناظر دارد
- حدنصاب براساس پنج رأیدهنده در هر دو مرکز داده است و بنابراین سه گره رأیدهنده فعال است
- اگر فقط دو گره رأیدهنده یا کمتر دردسترس باشد، مجموعه ZooKeeper نمیتواند عمل کند
ملاحظات مربوط به افزودن گرهها بهعنوان رأیدهنده یا ناظر
الزامات سیستم شما ممکن است نیاز داشته باشد که گرههای ZooKeeper بیشتری به نصب Edge خود اضافه کنید. سند افزودن گرههای ZooKeeper نحوه افزودن گرههای ZooKeeper بیشتر به Edge را شرح میدهد. هنگام افزودن گرههای ZooKeeper، باید نوع گرههایی را که میخواهید اضافه کنید درنظر بگیرید: رأیدهنده یا ناظر.
باید مطمئن شوید که گرههای رأیدهنده کافی دارید تا اگر یک یا چند گره رأیدهنده ازکار افتاد، مجموعه ZooKeeper همچنان بتواند کار کند، یعنی هنوز حد نصاب گرههای رأیدهنده دردسترس باشد. با افزودن گرههای رأیدهنده، اندازه حد نصاب را افزایش میدهید و بنابراین میتوانید ازکارافتادن گرههای رأیدهنده بیشتری را تحمل کنید.
بااینحال، افزودن گرههای رأیدهنده اضافی میتواند بر عملکرد نوشتن تأثیر منفی بگذارد زیرا عملیات نوشتن مستلزم توافق حدنصاب درباره رهبر است. زمان لازم برای تعیین رهبر براساس تعداد گرههای رأیدهنده است که با افزودن گرههای رأیدهنده بیشتر افزایش مییابد. بنابراین، نمیخواهید همه گرهها رأیدهنده باشند.
بهجای افزودن گرههای رأیدهنده، میتوانید گرههای ناظر اضافه کنید. افزودن گرههای ناظر عملکرد خواندن کلی سیستم را افزایش میدهد بدون اینکه به سربار انتخاب رهبر اضافه کند، زیرا گرههای ناظر رأی نمیدهند و بر اندازه حد نصاب تأثیر نمیگذارند. بنابراین، اگر گره ناظر ازکار بیفتد، بر توانایی مجموعه برای انتخاب رهبر تأثیری نمیگذارد. بااینحال، ازدست دادن گرههای ناظر میتواند باعث کاهش عملکرد خواندن مجموعه ZooKeeper شود زیرا گرههای کمتری برای ارائه درخواستهای داده دردسترس است.
در یک «مرکز داده»، Apigee توصیه میکند که صرفنظر از تعداد گرههای ناظر، بیشاز پنج رأیدهنده نداشته باشید. در دو «مرکز داده»، Apigee توصیه میکند که بیشاز نه رأیدهنده نداشته باشید (پنج رأیدهنده در یک «مرکز داده» و چهار رأیدهنده در مرکز داده دیگر). سپس میتوانید هر تعداد گره ناظر را که برای الزامات سیستم شما لازم است اضافه کنید.
برداشتن گره Zookeeper
دلایل زیادی وجود دارد که ممکن است بخواهید یک گره Zookeeper را حذف کنید؛ برای مثال، یک گره خراب شده است یا به محیط اشتباهی اضافه شده است.
این بخش نحوه برداشتن گره Zookeeper را در شرایطی که گره ازکار افتاده و دردسترس نیست شرح میدهد.
برای برداشتن گره Zookeeper:
- فایل پیکربندی بیصدا را ویرایش کنید و نشانی IP گره Zookeeper را که میخواهید بردارید حذف کنید.
- فرمان
setupرا برای Zookeeper دوباره اجرا کنید تا گرههای باقیمانده ZooKeeper را دوباره پیکربندی کنید:/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
- بازراهاندازی همه گرههای Zookeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
- گره «سرور مدیریت» را دوباره پیکربندی کنید:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart - پیکربندی مجدد همه رهیابها:
/opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-router restart - همه «پردازشگرهای پیام» را دوباره پیکربندی کنید:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart - پیکربندی مجدد همه گرههای Qpid:
/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart - همه گرههای Postgres را دوباره پیکربندی کنید:
/opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart
ملاحظات تعمیر و نگهداری
میتوانید تعمیر ZooKeeper را روی یک مجموعه کاملاً فعال بدون زمان خرابی انجام دهید، اگر آن را روی یک گره در یک زمان انجام دهید. با اطمینان از اینکه فقط یک گره ZooKeeper در هر زمان غیرفعال است، میتوانید مطمئن شوید که همیشه حد نصابی از گرههای رأیدهنده برای انتخاب رهبر دردسترس است.
تعمیر و نگهداری در چندین مرکز داده
When working with multiple Data Centers, remember that the ZooKeeper ensemble does not distinguish between Data Centers. مجموعههای ZooKeeper همه گرههای ZooKeeper را در همه مراکز داده بهعنوان یک گروه واحد مشاهده میکنند.
مکان گرههای رأیدهنده در یک «مرکز داده» مشخص عاملی نیست که ZooKeeper هنگام انجام محاسبات حد نصاب درنظر بگیرد. گرههای مجزا میتوانند در سراسر «مراکز داده» ازکار بیفتند، اما تا زمانی که حد نصاب در کل مجموعه حفظ شود، ZooKeeper فعال باقی میماند.
پیامدهای نگهداری
در زمانهای مختلف، باید یک گره ZooKeeper را برای تعمیر و نگهداری، چه یک گره رأیدهنده یا یک گره ناظر، از کار بیندازید. برای مثال، ممکن است لازم باشد نسخه Edge را در گره ارتقا دهید، دستگاه میزبان ZooKeeper ممکن است ازکار بیفتد، یا گره ممکن است بهدلیل دیگری مثل خطای شبکه دردسترس نباشد.
اگر گرهای که ازکار میافتد گره ناظر باشد، میتوانید انتظار افت جزئی در عملکرد مجموعه ZooKeeper را داشته باشید تا زمانی که گره بازیابی شود. اگر گره یک گره رأیدهنده باشد، میتواند بر پایداری مجموعه ZooKeeper تأثیر بگذارد، زیرا گرهای که در فرایند انتخاب رهبر شرکت میکند ازدست میرود. صرفنظر از دلیل ازکار افتادن گره رأیدهنده، حفظ حد نصاب گرههای رأیدهنده دردسترس مهم است.
روال تعمیر و نگهداری
فقط پساز اطمینان از عملکرد مجموعه ZooKeeper، رویههای نگهداری را انجام دهید. این فرض میکند که گرههای ناظر فعال هستند و تعداد کافی گره رأیدهنده درطول تعمیرات برای حفظ حد نصاب دردسترس است.
وقتی این شرایط برآورده شود، یک مجموعه ZooKeeper با اندازه دلخواه میتواند ازدست رفتن یک گره را در هر نقطهای بدون ازدست رفتن داده یا تأثیر معنادار بر عملکرد تحمل کند. این یعنی شما آزادید که روی هر گره در مجموعه نگهداری انجام دهید، به شرطی که این کار در هر زمان فقط روی یک گره انجام شود.
بهعنوان بخشی از انجام تعمیر و نگهداری، از روش زیر برای تعیین نوع گره ZooKeeper (رهبر، رأیدهنده، یا ناظر) استفاده کنید:
- اگر روی گره ZooKeeper نصب نشده است،
ncرا نصب کنید:sudo yum install nc
- فرمان
ncزیر را در گره اجرا کنید، که در آن ۲۱۸۱ درگاه ZooKeeper است:echo stat | nc localhost 2181
باید برونداد را در فرم ببینید:
Zookeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT Clients: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0) Latency min/avg/max: 0/0/0 Received: 1 Sent: 0 Connections: 1 Outstanding: 0 Zxid: 0xc00000044 Mode: follower Node count: 653
در خط
Modeخروجی گرهها، بایدobserver،leader، یاfollower(بهمعنای رأیدهندهای که رهبر نیست) را بسته به پیکربندی گره ببینید. - مراحل ۱ و ۲ را در هر گره ZooKeeper تکرار کنید.
خلاصه
بهترین روش برای انجام تعمیرات در مجموعه ZooKeeper این است که آن را برای هر گره بهصورت جداگانه انجام دهید. بهیاد داشته باشید که:
- باید درطول تعمیرات، حد نصاب گرههای رأیدهنده را حفظ کنید تا مطمئن شوید که مجموعه ZooKeeper فعال میماند.
- ازکار انداختن گره ناظر بر حد نصاب یا توانایی انتخاب رهبر تأثیری نمیگذارد.
- حدنصاب در همه گرههای ZooKeeper در همه «مراکز داده» محاسبه میشود.
- پساز اینکه سرور قبلی عملیاتی شد، تعمیر و نگهداری سرور بعدی را ادامه دهید.
- از فرمان
ncبرای بازرسی گره ZooKeeper استفاده کنید.