FAILOVER(8) NUT Manual FAILOVER(8)

failover - درایور تغییر وضعیت خودکار و افزونگی برای یوپی‌اس (UPS Failover Driver)

failover -h

failover -a UPS_NAME [OPTIONS]


یادداشت

این صفحه راهنما فقط ویژگی‌های خاص درایور failover را مستند می‌کند. برای کسب اطلاعات درباره درایور هسته، به nutupsdrv(8) مراجعه کنید.

درایور failover مانند یک پراکسی هوشمند برای چندین درایور «واقعی» UPS عمل می‌کند. این درایور به درایورهای زیرین UPS از طریق سوکت‌های محلی UNIX (یا لوله‌های نام‌گذاری‌شده در Windows) متصل شده و آن‌ها را نظارت می‌کند، و سلامت و شایستگی آن‌ها را برای وظیفه «اصلی» (primary) طبق مجموعه‌ای از قواعد و اولویت‌های قابل‌پیکربندی توسط کاربر به‌طور مداوم ارزیابی می‌نماید.

در هر لحظه مشخص، failover یک درایور UPS را به عنوان primary برمی‌گزیند، و دستورات، متغیرها و وضعیت آن را به دنیای بیرون ارائه می‌دهد، درست مانند این‌که مستقیماً با آن UPS در حال ارتباط است. از دید کلاینت‌ها (مانند upsmon(8) یا upsc(8))، درایور failover رفتاری دقیقاً شبیه یک UPS منفرد دارد، افزونگی زیرین را پنهان می‌سازد، و امکان انتقال بدون وقفه و یکپارچه میان تمام درایورهای UPS تحت‌نظارت و داده‌های آن‌ها را فراهم می‌کند.

درایور بر اساس موارد زیر به‌صورت پویا درایور اصلی UPS را ارتقا داده یا تنزل رتبه می‌دهد:

•در دسترس بودن سوکت و وضعیت ارتباط
•تازگی داده‌ها و نشانگرهای برخط/آفلاین بودن UPS
•فیلترهای وضعیت تعریف‌شده توسط کاربر (مثلاً وجود یا عدم وجود OL، LB، و...)
•نادیده‌گیری و بازنویسی مدیریتی از طریق دستورات کنترلی (force.primary، force.ignore)

اگر درایور اصلی فعلی از دسترس خارج شود یا دیگر معیارهای لازم را برآورده نکند، درایور به‌طور خودکار به یک درایور مناسب‌تر تغییر وضعیت می‌دهد (failover). در طول انتقال، تضمین می‌کند که داده‌ها بلافاصله جایگزین شوند، بدون این‌که upsd(8) آن‌ها را منقضی (stale) قلمداد کند یا کلاینت‌ها بر اساس هرگونه وضعیت افت‌کرده قبلی عمل نمایند.

هنگامی که هیچ درایور اصلی مناسبی در دسترس نباشد، سیستم وارد یک وضعیت جایگزین (fallback) قابل‌پیکربندی می‌شود:

•حفظ آخرین درایور اصلی و اعلام داده‌ها به عنوان منقضی (stale)
•ارسال هشدار ALARM و اعلام داده‌ها به عنوان منقضی (stale)
•ارسال هشدار ALARM و تنظیم خاموشی اجباری (FSD)

رسانه‌های ارتباطی مختلفی را می‌توان برای اتصال به هر درایور منفرد UPS استفاده کرد (مانند USB، Serial، Ethernet). درایور failover مستقیماً در سطح سوکت ارتباط برقرار می‌کند و بنابراین متکی بر فعال بودن upsd(8) نیست.

این درایور از تنظیمات زیر پشتیبانی می‌کند:

port=drivername-devicename,drivername2-devicename2,...

الزامی است. سوکت‌های محلی (یا لوله‌های نام‌گذاری‌شده در Windows) مربوط به درایورهای زیرین UPS را جهت ردیابی مشخص می‌کند. مقادیر یا باید یک مسیر فایل باشند یا از قالب drivername-devicename، همان‌گونه که در کنوانسیون نام‌گذاری سوکت داخلی NUT استفاده می‌شود (مانند usbhid-ups-myups) پیروی کنند. ورودی‌های چندگانه با کاما و بدون فاصله جدا می‌شوند.

inittime=seconds

اختیاری است. دوره مهلتی را پس از راه‌اندازی درایور برحسب ثانیه تعیین می‌کند که در طول آن، نبود یک درایور اصلی تحمل می‌شود. این قابلیت زمان لازم را برای راه‌اندازی اولیه درایورهای زیرین فراهم می‌سازد. برای اتصالات شبکه‌ای یا درایورهایی که نیاز به شناسایی و گشودن قفل پروتکل ارتباطی خود دارند، افزایش این مقدار را جهت تطبیق با تأخیرهای احتمالی طولانی‌تر در نظر بگیرید. مقدار پیش‌فرض ۳۰ ثانیه است.

deadtime=seconds

اختیاری است. دوره مهلتی را برحسب ثانیه تنظیم می‌کند که پس از آن یک درایور پاسخ‌نداده UPS به عنوان ازکارافتاده (dead) تلقی می‌شود. مقدار پیش‌فرض ۳۰ ثانیه است.

relogtime=seconds

اختیاری است. بازه زمانی برحسب ثانیه که در آن لاگ‌های شکست مکرر اتصال برای یک UPS ثبت می‌شوند تا از ثبت بیش‌ازحد پیام‌ها (log spam) در شرایط ناپایدار جلوگیری شود. مقدار پیش‌فرض ۵ ثانیه است.

noprimarytime=seconds

اختیاری است. مدت‌زمان انتظار در وضعیت نبود درایور اصلی مناسب، پیش از ورود به حالت جایگزین پیکربندی‌شده (fsdmode). مقدار پیش‌فرض ۱۵ ثانیه است.

maxconnfails=count

اختیاری است. تعداد دفعات مجاز شکست‌های متوالی در اتصال برای هر درایور UPS قبل از ورود به دوره استراحت (coolofftime). مقدار پیش‌فرض ۵ است.

coolofftime=seconds

اختیاری است. دوره استراحتی برحسب ثانیه که در طول آن درایور پس از فراتر رفتن از maxconnfails، تلاش‌های مجدد برای اتصال را متوقف می‌کند. مقدار پیش‌فرض ۱۵ ثانیه است.

fsdmode=0|1|2

اختیاری است. رفتار درایور را در صورتی که پس از سپری شدن noprimarytime هیچ درایور اصلی مناسبی یافت نشود، تعیین می‌کند. مقدار پیش‌فرض 0 است.
•0: آخرین درایور اصلی را تنزل ندهید، بلکه داده‌های آن را منقضی (stale) علامت‌گذاری کنید. این رفتار مشابه وضعیتی است که در آن یک درایور عادی UPS اتصال خود را به دستگاه هدف از دست می‌دهد. upsmon(8) بر اساس آخرین وضعیت شناخته‌شده (برخط یا غیره) عمل کرده و خود تصمیم می‌گیرد که آیا آن UPS بحرانی تلقی شود یا خیر.
•1: درایور اصلی را تنزل رتبه دهید، هشدار ALARM را فعال کنید، و پس از سپری شدن چند ثانیه اضافی (جهت تضمین انتشار کامل داده‌ها)، داده‌ها را به عنوان منقضی (stale) علامت بزنید. این کار باعث می‌شود که upsmon(8) تشخیص دهد دستگاهی که قبلاً در وضعیت هشدار بوده اتصالش قطع شده، درایور UPS را بحرانی بداند و احتمالاً به دلیل تخلیه MINSUPPLIES، خاموشی اجباری (FSD) را فعال کند.
•2: درایور اصلی را تنزل رتبه دهید، هشدار ALARM را فعال کنید، و بلافاصله FSD را اعمال نمایید. این حالت، FSD را از سمت درایور تنظیم کرده و پیش از آن‌که خود upsmon(8) آن را صادر کند اقدام می‌نماید. این حالت برای سناریوهایی مناسب است که خاموشی فوری بدون در نظر گرفتن شرایط دیگر الزام دارد و رساندن سریع FSD به کلاینت‌ها بالاترین اولویت را دارد.

checkruntime=0|1|2|3

اختیاری است. نحوه استفاده از مقادیر battery.runtime را برای شکستن تساوی میان دستگاه‌های UPS با وضعیت غیرکاملاً برخط در اولویت ۳ یا پایین‌تر کنترل می‌کند. بر انتخاب اولیه بر اساس اولویت، یا هنگامی که strictfiltering فعال است، تأثیری ندارد. مقدار پیش‌فرض 1 است.
•0: غیرفعال. هیچ مقایسه‌ای روی مدت‌زمان کارکرد (runtime) انجام نمی‌شود. اولین نامزد دارای بهترین اولویت بر اساس ترتیب آرگومان port انتخاب می‌گردد.
•1: مقایسه battery.runtime. دستگاه UPS با مقدار بالاتر ترجیح داده می‌شود. اگر مقدار ناموجود یا نامعتبر باشد، آن UPS نمی‌تواند در شرایط تساوی برنده شود.
•2: مقایسه battery.runtime.low. دستگاه UPS با مقدار بالاتر ترجیح داده می‌شود. اگر مقدار ناموجود یا نامعتبر باشد، آن UPS نمی‌تواند در شرایط تساوی برنده شود.
•3: مقایسه دقیق هر دو متغیر. دستگاه UPS تنها در صورتی ترجیح داده می‌شود که هر دو مقدار battery.runtime و battery.runtime.low در آن بالاتر باشد. اگر هر یک ناموجود یا نامعتبر باشد، آن UPS نمی‌تواند در شرایط تساوی برنده شود.

strictfiltering=0|1

اختیاری است. در صورت تنظیم روی 1، فقط درایورهای UPS که با فیلترهای وضعیت پیکربندی‌شده مطابقت دارند برای ارتقا به اصلی در نظر گرفته می‌شوند. در صورت تنظیم روی 0، منطق پیش‌فرض داخلی نیز هنگامی که هیچ فیلتر وضعیتی مطابقت نداشته باشد در نظر گرفته می‌شود (در بخش اولویت‌ها (PRIORITIES) توضیحات بیشتری آمده است). مقدار پیش‌فرض 0 است.

status_have_any=OL,CHRG,...

اختیاری است. اگر هر یک از این شناسه‌های جداشده با کاما در ups.status درایور UPS موجود باشد، این معیار فیلتر وضعیت پذیرفته می‌شود. در حالت پیش‌فرض تنظیم نشده است.

status_have_all=OL,CHRG,...

اختیاری است. تمام شناسه‌های فهرست‌شده با کاما باید در ups.status موجود باشند تا درایور UPS بتواند این معیار فیلتر وضعیت را برآورده سازد. در حالت پیش‌فرض تنظیم نشده است.

status_nothave_any=OB,OFF,...

اختیاری است. اگر هر یک از این شناسه‌های جداشده با کاما در ups.status موجود باشد، درایور UPS این معیار فیلتر وضعیت را احراز نخواهد کرد. در حالت پیش‌فرض تنظیم نشده است.

status_nothave_all=OB,LB,...

اختیاری است. اگر تمام این شناسه‌های جداشده با کاما در ups.status موجود باشند، درایور UPS این معیار فیلتر وضعیت را احراز نخواهد کرد. در حالت پیش‌فرض تنظیم نشده است.

یادداشت

آرگومان‌های status_* عمدتاً برای تنظیم وزن‌دهی درایورهای UPS در نظر گرفته شده‌اند، تا اجازه دهند برخی از آن‌ها بر اساس وضعیت خود بر دیگران اولویت یابند. به عنوان مثال، درایوری که وضعیت OL را گزارش می‌کند ممکن است بر درایوری با گزارش ALARM OL ترجیح داده شود. با این‌که strictfiltering می‌تواند فعال شود، اما فیلترهای وضعیت بیشترین اثربخشی را هنگام استفاده در ترکیب با مجموعه پیش‌فرض PRIORITIES مبتنی بر اتصال دارند. برای جزئیات بیشتر، بخش مربوطه را در ادامه ببینید.

آرگومان port در ups.conf(5) باید به سوکت‌های محلی درایور (یا لوله‌های نام‌گذاری‌شده در Windows) که درایورهای «واقعی» UPS استفاده می‌کنند اشاره کند. یک پیکربندی پایه پیش‌فرض با چند درایور می‌تواند به این شکل باشد:

[realups]
   driver = usbhid-ups
   port = auto
[realups2]
   driver = usbhid-ups
   port = auto
[failover]
   driver = failover
   port = usbhid-ups-realups,usbhid-ups-realups2

تمام کلاینت‌های upsmon(8) باید طوری تنظیم شوند که UPS مربوط به failover را تحت نظر بگیرند.

درایور به‌طور کامل از تنظیم متغیرها و اجرای دستورات آنی روی درایور UPS اصلی انتخاب‌شده فعلی پشتیبانی می‌کند؛ این دستورات پراکسی می‌شوند و ردیابی سرتاسری نیز برای آن‌ها میسر است (upscmd(8) و upsrw(8) -w). ممکن است متوجه شوید برخی متغیرها و دستورات دارای پیشوند upstream. هستند؛ این امر برای تفکیک شفاف دستورات بالادستی از دستورات خود failover است.

جهت راحتی کار، دستورات مدیریتی بیشتری در دسترس قرار گرفته است تا مستقیماً بر فرآیند انتخاب درایور اصلی اثر بگذارند یا آن را لغو کنند، مثلاً برای عملیات نگهداری:

•<socketname>.force.ignore [seconds] از انتخاب درایور UPS مشخص‌شده به عنوان اصلی برای مدت‌زمان تعیین‌شده جلوگیری می‌کند، یا اگر مقداری منفی درج شود، به‌صورت دائمی مانع آن خواهد شد. مقدار 0 این نادیده‌گیری را بازنشانی کرده و امکان انتخاب مجدد را فعال می‌سازد.
•<socketname>.force.primary [seconds] درایور UPS مشخص‌شده را وادار می‌کند تا برای مدت‌زمان معین دارای بالاترین اولویت باشد، یا با درج مقداری منفی، این وضعیت را دائمی می‌سازد. مقدار 0 این بازنویسی را لغو می‌کند.

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

همان‌طور که در بالا اشاره شد، درایورهای اصلی به‌صورت پویا بر اساس وضعیت فعلی خود و طبق مجموعه‌ای دقیق از اولویت‌های تحت‌تأثیر کاربر انتخاب می‌شوند، که عبارتند از:

•0 (بالاترین): درایور UPS توسط دستور مدیریتی به صدر اولویت‌ها رانده شده است.
•1: درایور UPS از فیلترهای وضعیت تعریف‌شده توسط کاربر با موفقیت عبور کرده است.
•2: درایور UPS داده‌های تازه دارد و برخط است (در وضعیت OL).
•3: درایور UPS داده‌های تازه دارد، اما ممکن است کاملاً برخط نباشد.
•4 (پایین‌ترین): درایور UPS زنده و فعال است، اما ممکن است داده‌های تازه نداشته باشد.

درایور UPS با بالاترین اولویت محاسبه‌شده به عنوان اصلی برگزیده می‌شود؛ موارد تساوی بر اساس ترتیب نام سوکت‌های ارائه‌شده در آرگومان port حل‌وفصل می‌گردند.

برای فیلترهای وضعیت تعریف‌شده توسط کاربر، ترتیب داخلی زیر رعایت می‌شود:

1.status_nothave_any (اول)
2.status_have_all
3.status_nothave_all
4.status_have_any (آخر)

اگر strictfiltering فعال باشد، اولویت‌های ۲ تا ۴ اعمال نمی‌شوند.

اگر هیچ فیلتر وضعیتی توسط کاربر تنظیم نشده باشد، اولویت ۱ قابل‌اعمال نخواهد بود.


یادداشت

شرط اولیه و اساسی برای هرگونه انتخاب این است که سوکت UPS قابل‌اتصال باشد و درایور UPS حداقل یک دسته کامل از داده‌ها را در طول حیات خود منتشر کرده باشد. درایورهای UPS که این شرط را برآورده نسازند همواره رد صلاحیت می‌شوند.

در محیط‌های پیچیده تأمین برق، ارائه یک منبع واحد و سازگار از اطلاعات UPS به upsmon(8) گاهی نسبت به پایش مستقیم چندین درایور مستقل ترجیح دارد. درایور failover نقش یک پل را ایفا می‌کند و به upsmon(8) اجازه می‌دهد تصمیمات خود را بر اساس مناسب‌ترین داده‌های در دسترس اتخاذ کند، بدون آن‌که ناچار به تفسیر ورودی‌های متناقض یا منابع افت‌کیفیت‌یافته باشد.

درایور failover که در اصل برای سناریوهایی نظیر سیستم‌های دارای دو منبع تغذیه (dual-PSU) یا مسیرهای ارتباطی افزونه به یک UPS واحد طراحی شده بود، از پیکربندی‌های پیشرفته‌تر نیز پشتیبانی می‌کند - برای نمونه هنگامی که چندین دستگاه UPS بار پایینی مشترکی را تغذیه می‌کنند (از طریق سوییچ‌های خودکار STS/ATS)، یا هنگامی که قابلیت اطمینان درایورها با یکدیگر تفاوت دارد. در این موارد، درایور می‌تواند با منطق خارجی یا اسکریپت‌نویسی ترکیب شود تا انتخاب اصلی را به‌صورت پویا تنظیم کند و تنزل تدریجی عملکرد (graceful degradation) را تسهیل نماید. این ساختارها همچنین می‌توانند از یکپارچگی بیشتر با خانواده درایورهای clone، نظیر clone(8) یا clone-outlet(8)، برای کنترل دقیق‌تر و پایش تا سطح پریزهای خروجی (outlet) بهره‌مند شوند.

علاوه بر این، در سناریوهای خاص‌تر، برخی ابزارهای جانبی متصل به NUT یا رابط‌های کاربری گرافیکی ممکن است محدود به پایش تنها یک دستگاه UPS باشند. در چنین مواردی، failover می‌تواند با نمایش فقط مرتبط‌ترین یا پر‌اولویت‌ترین منبع داده کمک کند تا این ابزارها در چارچوب محدودیت‌های خود بدون از دست دادن اطلاعات حیاتی کار کنند.

در نهایت، این درایور نظارت و کنترل توان دقیق‌تری نسبت به منطق دودویی برخط/آفلاین صرف فراهم می‌آورد و به مدیران اجازه می‌دهد پیش از تبدیل شرایط نامساعد به رویدادهای بحرانی یا الزام upsmon(8) به واکنش، اقدامات لازم را در مراحل ابتدایی انجام دهند.

هنگام استفاده از failover برای افزونگی میان چند درایور UPS متصل به یک دستگاه واحد UPS، داده‌ها بین درایورها ترکیب یا مالتی‌پلاکس نمی‌شوند. در نتیجه، ممکن است برخی از نقاط داده در بعضی درایورها موجود باشند اما در دیگران یافت نشوند.

برای محاسبات checkruntime، واحد هر دو متغیر battery.runtime و battery.runtime.low برابر با ثانیه فرض می‌شود. درایورهای UPS که این مقادیر را با واحدهای متفاوتی گزارش دهند، ناسازگار با استانداردهای متغیرهای NUT در نظر گرفته شده و باید به عنوان نقص به توسعه‌دهندگان NUT گزارش داده شوند.

Sebastian Kuttnig <sebastian.kuttnig@gmail.com>

upscmd(8)، upsrw(8)، ups.conf(5)، upsc(8)، upsmon(8)، nutupsdrv(8)، clone(8)، clone-outlet(8)

صفحه اصلی NUT (Network UPS Tools): https://www.networkupstools.org/historic/v2.8.5

06/21/2026 Network UPS Tools 2.8.5