درباره نگهداری ZooKeeper

مجموعه‌های 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 ارسال کنید، درخواست‌های API را پردازش کنید، یا به سیستم New Edge UI وارد شوید.

برای مثال، در یک نصب «مرکز داده»:

  • سه گره ZooKeeper نصب کردید
  • همه گره‌های ZooKeeper رأی‌دهنده هستند
  • حدنصاب دو گره رأی‌دهنده فعال است
  • اگر فقط یک گره رأی‌دهنده دردسترس باشد، گروه ZooKeeper نمی‌تواند کار کند

در نصب با دو مرکز داده:

  • سه گره ZooKeeper در هر «مرکز داده» نصب کردید، درمجموع شش گره
  • مرکز داده ۱ سه گره رأی‌دهنده دارد
  • «مرکز داده ۲» دو گره رأی‌دهنده و یک گره ناظر دارد
  • حدنصاب براساس پنج رأی‌دهنده در هر دو مرکز داده است و بنابراین سه گره رأی‌دهنده فعال است
  • اگر فقط دو یا تعداد کمتری گره رأی‌دهنده دردسترس باشد، گروه ZooKeeper نمی‌تواند عمل کند

ملاحظات مربوط به افزودن گره‌ها به‌عنوان رأی‌دهنده یا ناظر

الزامات سیستم شما ممکن است نیاز داشته باشد که گره‌های ZooKeeper بیشتری به نصب Edge خود اضافه کنید. مستندات افزودن گره‌های ZooKeeper نحوه افزودن گره‌های ZooKeeper اضافی به Edge را شرح می‌دهد. هنگام افزودن گره‌های ZooKeeper، باید نوع گره‌هایی را که می‌خواهید اضافه کنید درنظر بگیرید: رأی‌دهنده یا ناظر.

باید مطمئن شوید که گره‌های رأی‌دهنده کافی دارید تا اگر یک یا چند گره رأی‌دهنده ازکار افتاد، مجموعه ZooKeeper همچنان بتواند کار کند، یعنی هنوز حد نصاب گره‌های رأی‌دهنده دردسترس باشد. با افزودن گره‌های رأی‌دهنده، اندازه حد نصاب را افزایش می‌دهید و بنابراین می‌توانید گره‌های رأی‌دهنده بیشتری را تحمل کنید.

بااین‌حال، افزودن گره‌های رأی‌دهنده اضافی می‌تواند بر عملکرد نوشتن تأثیر منفی بگذارد زیرا عملیات نوشتن به توافق اکثریت آرا درباره رهبر نیاز دارد. زمان لازم برای تعیین رهبر براساس تعداد گره‌های رأی‌دهنده است که با افزودن گره‌های رأی‌دهنده بیشتر افزایش می‌یابد. بنابراین، نمی‌خواهید همه گره‌ها رأی‌دهنده باشند.

به‌جای افزودن گره‌های رأی‌دهنده، می‌توانید گره‌های ناظر اضافه کنید. افزودن گره‌های ناظر عملکرد خواندن کلی سیستم را افزایش می‌دهد بدون اینکه به سربار انتخاب رهبر اضافه کند، زیرا گره‌های ناظر رأی نمی‌دهند و بر اندازه حد نصاب تأثیر نمی‌گذارند. بنابراین، اگر گره ناظر ازکار بیفتد، بر توانایی مجموعه برای انتخاب رهبر تأثیری نمی‌گذارد. بااین‌حال، ازدست دادن گره‌های ناظر می‌تواند باعث کاهش عملکرد خواندن مجموعه ZooKeeper شود زیرا گره‌های کمتری برای ارائه درخواست‌های داده دردسترس است.

در یک «مرکز داده»، Apigee توصیه می‌کند که صرف‌نظر از تعداد گره‌های ناظر، بیش‌از پنج رأی‌دهنده نداشته باشید. در دو «مرکز داده»، Apigee توصیه می‌کند که بیش‌از نه رأی‌دهنده نداشته باشید (پنج رأی‌دهنده در یک «مرکز داده» و چهار رأی‌دهنده در مرکز داده دیگر). سپس می‌توانید هر تعداد گره ناظر که برای الزامات سیستم خود نیاز دارید اضافه کنید.

برداشتن گره Zookeeper

دلایل زیادی وجود دارد که ممکن است بخواهید یک گره Zookeeper را حذف کنید؛ برای مثال، یک گره خراب شده است یا به محیط اشتباهی اضافه شده است.

این بخش نحوه برداشتن گره Zookeeper را در شرایطی که گره ازکار افتاده و دردسترس نیست شرح می‌دهد.

برای برداشتن گره Zookeeper:

  1. فایل پیکربندی بی‌صدای خود را ویرایش کنید و نشانی IP گره Zookeeper را که می‌خواهید بردارید حذف کنید.
  2. فرمان setup را برای Zookeeper دوباره اجرا کنید تا گره‌های باقی‌مانده ZooKeeper را دوباره پیکربندی کنید:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. بازراه‌اندازی همه گره‌های Zookeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. گره «سرور مدیریت» را دوباره پیکربندی کنید:
    /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
  5. پیکربندی مجدد همه «رهیاب‌ها»:
    /opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. همه «پردازشگرهای پیام» را دوباره پیکربندی کنید:
    /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
  7. بازپیکربندی همه گره‌های 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
  8. همه گره‌های 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 در هر زمان غیرفعال است، می‌توانید مطمئن شوید که همیشه حد نصابی از گره‌های رأی‌دهنده برای انتخاب رهبر دردسترس است.

نگهداری در چندین مرکز داده

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 (رهبر، رأی‌دهنده، یا ناظر) استفاده کنید:

  1. اگر روی گره ZooKeeper نصب نشده است، nc را نصب کنید:
    sudo yum install nc
  2. فرمان 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 (به‌معنای رأی‌دهنده‌ای که رهبر نیست) را بسته به پیکربندی گره ببینید.

  3. مراحل ۱ و ۲ را در هر گره ZooKeeper تکرار کنید.

خلاصه

بهترین روش برای انجام تعمیر و نگهداری روی گروه ZooKeeper این است که آن را در هر زمان روی یک گره انجام دهید. به‌یاد داشته باشید که:

  • باید درطول تعمیرات، حد نصاب گره‌های رأی‌دهنده را حفظ کنید تا مطمئن شوید که مجموعه ZooKeeper فعال می‌ماند.
  • ازکار انداختن گره ناظر بر حد نصاب یا توانایی انتخاب رهبر تأثیری نمی‌گذارد.
  • حدنصاب در همه گره‌های ZooKeeper در همه «مراکز داده» محاسبه می‌شود.
  • پس‌از اینکه سرور قبلی عملیاتی شد، نگهداری را در سرور بعدی ادامه دهید.
  • از فرمان nc برای بازرسی گره ZooKeeper استفاده کنید.