گروههای 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 فعال دردسترس باشد. A حد نصاب یعنی بیشاز نیمی از همه گرههای رأیدهنده ZooKeeper در همه «مراکز داده» کار میکنند.
اگر تعداد کافی گره رأیدهنده دردسترس نباشد، هیچ رهبری نمیتواند انتخاب شود. در این سناریو، Zookeeper نمیتواند به درخواستها رسیدگی کند. این یعنی تا زمانی که حدنصاب بازگردانده نشود، نمیتوانید درخواستی به «سرور مدیریت Edge» ارسال کنید، درخواستهای API را پردازش کنید، یا به «واسط کاربر Edge» وارد شوید.
برای مثال، در نصب «مرکز داده» تکی:
- سه گره 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 را روی گروه کاملاً فعال بدون زمان توقف انجام دهید. با اطمینان از اینکه در هر زمان فقط یک گره ZooKeeper غیرفعال است، میتوانید مطمئن شوید که همیشه تعداد کافی از گرههای رأیدهنده برای انتخاب رهبر دردسترس است.
نگهداری در چندین مرکز داده
هنگام کار با چندین «مرکز داده»، بهیاد داشته باشید که مجموعه ZooKeeper بین «مراکز داده» تمایزی قائل نمیشود. نمای مونتاژهای 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 در همه «مراکز داده» محاسبه میشود.
- پساز اینکه سرور قبلی عملیاتی شد، نگهداری را در سرور بعدی ادامه دهید.
- برای بازرسی گره ZooKeeper، از فرمان
ncاستفاده کنید.