.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "GDNSD-PLUGIN-MULTIFO 8" .TH GDNSD-PLUGIN-MULTIFO 8 2026-04-04 "gdnsd 3.8.3" gdnsd .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" gdnsd\-plugin\-multifo \- افزونه gdnsd برای گروه‌بندی تغییر مسیر اضطراری (failover) چندنشانی و تمام‌فعال .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" پیکربندی نمونه افزونه: .PP .Vb 10 \& plugins => { \& multifo => { \& up_thresh => 0.3 \& service_types => up, \& v4www => { \& lb01 => 192.0.2.200, \& lb02 => 192.0.2.201, \& lb03 => 192.0.2.202, \& } \& v6smtp => { \& service_types => [ smtp ], \& up_thresh => 0.1, \& lb01_v6 => 2001:DB8::1, \& lb02_v6 => 2001:DB8::2, \& lb03_v6 => 2001:DB8::3, \& } \& pubwww => { \& up_thresh => 0.5 \& service_types => corpwww_type \& addrs_v4 => [ 192.0.2.100, 192.0.2.101, 192.0.2.102 ] \& addrs_v6 => { \& service_types => [ up ], \& up_thresh => 0.7 \& lb01_v6 => 2001:DB8::1, \& lb02_v6 => 2001:DB8::2, \& lb03_v6 => 2001:DB8::3, \& } \& } \& } \& } .Ve .PP نمونه رکوردهای منبع (RR) در zonefile: .PP .Vb 3 \& web4 180 DYNA multifo!v4www \& smtp 180 DYNA multifo!v6smtp \& www 180 DYNA multifo!pubwww .Ve .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" افزونه \&\fBgdnsd\-plugin\-multifo\fR برای انجام گروه‌بندی تغییر مسیر اضطراری (failover) چندنشانی و تمام‌فعال (all\-active) طراحی شده است. اساساً برای هر نام منبع پیکربندی‌شده، یک فهرست برچسب‌دار از نشانی‌ها ارائه می‌دهید. افزونه \&\f(CW\*(C`multifo\*(C'\fR این نشانی‌ها را بر اساس \&\f(CW\*(C`service_types\*(C'\fR پایش می‌کند و به پرس‌وجوهای نشانی \&\f(CW\*(C`DYNA\*(C'\fR با استفاده از زیرمجموعه‌ای که در وضعیت \&\f(CW\*(C`DOWN\*(C'\fR نیستند پاسخ می‌دهد. کد اصلی gdnsd این رکوردها را هنگام ارسال خروجی به‌صورت نوبتی (round\-robin) می‌چرخاند، همان‌طور که برای تمام مجموعه‌رکوردهای (RR\-sets) نشانی انجام می‌دهد. .SH "پیکربندی سطح بالای افزونه (TOP\-LEVEL PLUGIN CONFIG)" .IX Header "TOP-LEVEL PLUGIN CONFIG" در بالاترین سطح از بخش پیکربندی افزونه، سه پارامتر ویژه \&\f(CW\*(C`up_thresh\*(C'\fR، \&\f(CW\*(C`service_types\*(C'\fR و \&\f(CW\*(C`ignore_health\*(C'\fR پشتیبانی می‌شوند. این پارامترها گزینه‌های پیش‌فرض هم‌نام را به ازای هر منبع، برای هر منبعی که آن‌ها را به‌طور صریح مشخص نکرده باشد، تنظیم می‌کنند. .PP باقی مدخل‌های هش در سطح بالا، نام منابعی هستند که شما تعریف می‌کنید. به هر منبع یک هش پیکربندی اختصاصی برای نگهداری پارامترهای مختص آن منبع و همچنین داده‌های واقعی نشانی‌ها تعلق می‌گیرد. .SH "پیکربندی منبع (RESOURCE CONFIG)" .IX Header "RESOURCE CONFIG" درون یک منبع، دو گزینه اساسی پیش رو دارید. می‌توانید مستقیماً مجموعه‌ای از جفت‌های \&\f(CW\*(C`label => address\*(C'\fR تعیین کنید که همگی از یک خانواده (IPv4 یا IPv6) باشند، یا می‌توانید از زیربخش‌های \&\f(CW\*(C`addrs_v4\*(C'\fR و/یا \&\f(CW\*(C`addrs_v6\*(C'\fR برای تعیین یک یا هر دو خانواده در همان منبع استفاده کنید. .PP پارامترهای \&\f(CW\*(C`up_thresh\*(C'\fR، \&\f(CW\*(C`service_types\*(C'\fR و \&\f(CW\*(C`ignore_health\*(C'\fR در تمام سطوح به ارث می‌رسند و می‌توان آن‌ها را در هر سطحی (حتی به ازای هر خانواده نشانی) بازنویسی کرد: .IP \fBup_thresh\fR 4 .IX Item "up_thresh" عدد ممیز شناور، پیش‌فرض 0.5، در بازه (0.0 \- 1.0]. این پارامتر مقدار آستانه \&\f(CW\*(C`up_thresh\*(C'\fR را به ازای منبع پیکربندی می‌کند. جزئیات بیشتر در بخش «آستانه فعال بودن (UP THRESH)» در زیر آمده است. .IP \fBservice_types\fR 4 .IX Item "service_types" آرایه‌ای از رشته‌ها، یا یک رشته منفرد. پیش‌فرض \&\f(CW\*(C`default\*(C'\fR. این پارامتر انواع سرویس‌های پایش‌شده را برای این منبع تعیین می‌کند. اگر آرایه‌ای شامل بیش از یک مورد ارائه شود، همه آن‌ها برای هر نشانی پایش می‌شوند و وضعیت نهایی پایش‌شده برابر با کمینه (بدترین) وضعیت مجموعه خواهد بود. برای جزئیات بیشتر درباره انواع سرویس به \&\fBgdnsd.config\fR\|(8) مراجعه کنید. .IP \fBignore_health\fR 4 .IX Item "ignore_health" بولی، پیش‌فرض false. اگر روی true تنظیم شود، وضعیت سلامت نشانی‌های منفرد بر افزودن آن‌ها به مجموعه نشانی‌های خروجی توسط multifo تأثیری نخواهد داشت؛ اما سلامت آن‌ها همچنان بررسی شده و برای محاسبه \&\f(CW\*(C`up_thresh\*(C'\fR به کار می‌رود که توسط فرامافزونه‌هایی مانند geoip و metafo مصرف می‌شود، و ممکن است از این اطلاعات برای تغییر مسیر اضطراری به یک مرکز داده کاملاً متفاوت استفاده کنند. .SH "پیکربندی میان‌بر (SHORTCUT CONFIG)" .IX Header "SHORTCUT CONFIG" اگر در یک بخش مشخص (پیکربندی مستقیم منبع تک‌خانواده، یا addrs_v[46]) پارامتری (مانند service_types، up_thresh یا ignore_health) برای پیکربندی ندارید و برچسب‌های توصیفی به ازای هر نشانی که در پایش استفاده می‌شوند برایتان اهمیت ندارد، می‌توانید هش را با آرایه‌ای از نشانی‌ها جایگزین کنید. برچسب‌ها به‌صورت دنباله‌ای از اعداد صحیح با شروع از \&\f(CW1\fR برای شما ایجاد خواهند شد. به‌عنوان مثال، موارد زیر با یکدیگر معادل هستند: .PP .Vb 2 \& res1 => { addrs_v4 => [ 192.0.2.1, 192.0.2.2 ] } \& res1 => { addrs_v4 => { 1 => 192.0.2.1, 2 => 192.0.2.2 } } .Ve .SH "مکانیزم‌های عملیاتی (OPERATIONAL MECHANICS)" .IX Header "OPERATIONAL MECHANICS" تمامی نشانی‌ها برای تمام منابع، با استفاده از \&\f(CW\*(C`service_types\*(C'\fR به‌ارث‌رسیده به ازای هر خانواده نشانی پایش می‌شوند (پیش‌فرض، پایشگر مجازی ایستای \&\f(CW\*(C`up\*(C'\fR خواهد بود). هنگامی که دیمن هسته یک جستجو برای رکوردهای نشانی از یک خانواده مشخص روی یکی از منابع این افزونه درخواست می‌کند، اساساً فرایند زیر را برای تعیین مجموعه نشانی‌های پاسخ برای آن خانواده نشانی طی می‌کند: ۱) افزودن تمامی نشانی‌های غیر\-DOWN به مجموعه نتایج. ۲) اگر مجموعه نشانی‌های غیر\-DOWN در بررسی up_thresh ناموفق شوند، افزودن *تمام* نشانی‌ها به مجموعه نتایج به‌عنوان حالت بازگشت به امن (fallback). ۳) اگر هر یک از نشانی‌ها در وضعیت DOWN باشد، نصف کردن مقدار TTL تعیین‌شده در zonefile. .PP اگر \&\f(CW\*(C`ignore_health\*(C'\fR برابر با true باشد، تمام نشانی‌ها بدون توجه به وضعیت سلامت به مجموعه نتایج اضافه می‌شوند، اما تأثیرات up_thresh و TTL همچنان رخ می‌دهند و وضعیت نهایی در سطح منبع نیز بازتاب‌دهنده وضعیت کلی خواهد بود، درست مانند حالتی که بدون \&\f(CW\*(C`ignore_health\*(C'\fR باشد. .PP در صورتی که یک منبع دارای هر دو خانواده نشانی پیکربندی‌شده باشد، این فرایند به‌طور مستقل برای هر یک از زیرمجموعه‌های نشانی IPv4 و IPv6 تکرار می‌شود (البته TTL فقط یک‌بار نصف می‌شود). جزئیات بررسی up_thresh در ادامه آمده است: .SH "آستانه فعال بودن (UP THRESH)" .IX Header "UP THRESH" اگر به تعداد کافی نشانی در وضعیت UP برای گذر از آستانه (به ازای هر خانواده نشانی) وجود نداشته باشد، تمام نشانی‌ها (از آن خانواده نشانی مشخص) به‌عنوان حالت بازگشت به امن (fallback) بازگردانده می‌شوند. .PP آستانه از نظر ریاضی همانند شبه‌کد زیر پیاده‌سازی شده است: .PP \&\f(CW\*(C`if(non_down >= ceil(thresh * total)) threshold_passed;\*(C'\fR. به‌عنوان مثال، اگر thresh روی مقدار پیش‌فرض \&\f(CW0.5\fR باشد و در مجموع ۳ نشانی IPv4 وجود داشته باشد، ۲ مورد از آن‌ها باید غیر\-down باشند تا از آستانه عبور کنند. نتیجه خالص این است که با آستانه پیش‌فرض، این افزونه هرگز یک نشانی تکی و جداافتاده را از میان مجموعه‌ای ۳ تایی بازنمی‌گرداند؛ یا هر ۳ نشانی را بازمی‌گرداند، یا در صورتی که یک نشانی با شکست مواجه شده باشد، ۲ مورد از ۳ نشانی را بازمی‌گرداند. .PP هنگامی که بررسی آستانه برای هر یک از خانواده‌های نشانی ناموفق شود (و تمام نشانی‌ها بازگردانده شوند)، شکست کامل در سطح منبع به هر فرامافزونه بالادستی مربوطه مانند metafo یا geoip نیز اعلام خواهد شد. .PP قواعد کلی برای نتایج فرمول up_thresh: .IP \(bu 4 آستانه 1.0 تنها زمانی از بررسی عبور می‌کند که \&\fBتمام\fR نشانی‌ها غیر\-down باشند. این حالت تا حد زیادی بی‌فایده است؛ چرا که می‌توانید اصلاً چیزی را پایش نکنید و این نشانی‌ها را به‌صورت مجموعه‌ای ایستا در zonefile قرار دهید. .IP \(bu 4 آستانه 0.01 حتی اگر تنها یک نشانی زنده باشد از بررسی عبور خواهد کرد و صرفاً همان یک نشانی را برمی‌گرداند، حتی اگر مثلاً تنها نشانی باقی‌مانده از ۴۰ نشانی باشد. .IP \(bu 4 از آنجا که آستانه 0.0 غیرمجاز است، در صورت down بودن تمام نشانی‌ها، بررسی آستانه همواره ناموفق خواهد بود و تمام نشانی‌ها بازگردانده می‌شوند. .PP مثال‌های مقادیر میانی: (آستانه: نسبت غیر\-down به کل مورد نیاز برای قبولی در آستانه): .IP \(bu 4 0.1: 1/1 1/2 1/3 1/4 1/5 1/6 1/7 1/8 2/16 .IP \(bu 4 0.2: 1/1 1/2 1/3 1/4 1/5 2/6 2/7 2/8 4/16 .IP \(bu 4 0.3: 1/1 1/2 1/3 2/4 2/5 2/6 3/7 3/8 5/16 .IP \(bu 4 0.4: 1/1 1/2 2/3 2/4 2/5 3/6 3/7 4/8 7/16 .IP \(bu 4 0.5: 1/1 1/2 2/3 2/4 3/5 3/6 4/7 4/8 8/16 .IP \(bu 4 0.6: 1/1 2/2 2/3 3/4 3/5 4/6 5/7 5/8 10/16 .IP \(bu 4 0.7: 1/1 2/2 3/3 3/4 4/5 5/6 5/7 6/8 12/16 .IP \(bu 4 0.8: 1/1 2/2 3/3 4/4 4/5 5/6 6/7 7/8 13/16 .IP \(bu 4 0.9: 1/1 2/2 3/3 4/4 5/5 6/6 7/7 8/8 15/16 .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" \&\fBgdnsd.config\fR\|(5), \fBgdnsd.zonefile\fR\|(5), \fBgdnsd\fR\|(8), \&\fBgdnsd\-plugin\-simplefo\fR\|(8) .PP راهنمای gdnsd. .SH "حق نشر و مجوز (COPYRIGHT AND LICENSE)" .IX Header "COPYRIGHT AND LICENSE" Copyright (c) 2012 Brandon L Black .PP این پرونده بخشی از gdnsd است. .PP نرم‌افزار gdnsd یک نرم‌افزار آزاد است: شما می‌توانید آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU General Public License) طبق آنچه بنیاد نرم‌افزارهای آزاد منتشر کرده است، چه ویرایش ۳ مجوز و چه (به انتخاب خودتان) هر ویرایش بالاتری بازتوزیع کرده و/یا تغییر دهید. .PP نرم‌افزار gdnsd به این امید توزیع می‌شود که مفید باشد، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابل فروش بودن یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به مجوز عمومی همگانی گنو مراجعه کنید. .PP باید همراه با gdnsd یک نسخه از مجوز عمومی همگانی گنو را دریافت کرده باشید. اگر این‌طور نیست، به نشانی نگاه کنید.