حل مشکل ارور 1204 SQL Server

حل مشکل ارور 1204 SQL Server: راهنمای جامع رفع مشکل “نود کلاستر در دسترس نیست”

ارور 1204 در SQL Server، که با توضیح “Cluster node not available” یا “نود کلاستر در دسترس نیست” همراه است، یک هشدار حیاتی است که نشان‌دهنده مشکلی در پایداری و در دسترس بودن سیستم پایگاه داده شماست. این خطا معمولاً در محیط‌هایی که از قابلیت‌های High Availability (HA) یا Disaster Recovery (DR) SQL Server مانند AlwaysOn Availability Groups (AGs) یا Failover Cluster Instances (FCIs) استفاده می‌کنند، رخ می‌دهد. اساس این قابلیت‌ها، وجود یک Windows Server Failover Cluster (WSFC) سالم و فعال است. وقتی ارور 1204 ظاهر می‌شود، به این معنی است که یکی یا چند گره (node) از کلاستر ویندوز که وظیفه مدیریت منابع SQL Server را بر عهده دارند، به درستی کار نمی‌کنند یا از شبکه خارج شده‌اند. این وضعیت می‌تواند منجر به عدم دسترسی به پایگاه داده، تأخیر در Failover و در نهایت اختلال در خدمات کسب‌وکار شود. درک عمیق این ارور و داشتن یک رویکرد سیستماتیک برای رفع آن برای مدیران پایگاه داده (DBA) و مهندسان سیستم امری ضروری است. این مقاله به بررسی علل رایج این خطا و ارائه راهکارهای عملی و گام به گام برای تشخیص و رفع آن می‌پردازد.

علل رایج بروز ارور 1204 SQL Server

ارور 1204 SQL Server اغلب ناشی از مشکلات زیرساختی است که بر عملکرد Windows Server Failover Cluster تأثیر می‌گذارد. تشخیص دقیق علت اصلی کلید حل این مشکل است. در ادامه به برخی از رایج‌ترین دلایل بروز این خطا می‌پردازیم:

مشکلات ارتباطات شبکه (Network Connectivity Issues)

یکی از شایع‌ترین دلایل عدم دسترسی نود کلاستر، مشکلات شبکه است. این مشکلات می‌توانند شامل موارد زیر باشند:
* **قطعی شبکه:** کابل‌های شبکه قطع شده، سوئیچ‌های معیوب یا مشکلات در کارت‌های شبکه (NIC) نودها.
* **پیکربندی اشتباه IP:** آدرس‌های IP تکراری، ماسک ساب‌نت (subnet mask) نادرست یا گیت‌وی (gateway) اشتباه.
* **از دست دادن بسته‌های داده (Packet Loss):** ترافیک بالای شبکه یا مشکلات سخت‌افزاری شبکه می‌تواند منجر به از دست رفتن بسته‌های ارتباطی بین نودهای کلاستر شود که برای حفظ وضعیت کلاستر حیاتی است.
* **تغییرات شبکه:** تغییرات اخیر در زیرساخت شبکه، مانند تغییر VLANها یا آدرس‌دهی IP بدون به‌روزرسانی پیکربندی کلاستر.

مشکلات سرویس کلاستر (Cluster Service Issues)

سرویس کلاستر ویندوز (cluSvc) هسته اصلی هر WSFC است. اگر این سرویس روی یک نود متوقف شود یا به درستی کار نکند، آن نود از دید کلاستر “در دسترس نیست” تلقی می‌شود.
* **متوقف شدن سرویس:** سرویس cluSvc ممکن است به دلایل مختلفی مانند خطاهای سیستم‌عامل، کمبود منابع یا ناسازگاری‌های نرم‌افزاری متوقف شده باشد.
* **عدم شروع سرویس:** در برخی موارد، سرویس cluSvc ممکن است پس از راه‌اندازی مجدد سرور شروع نشود یا با خطاهایی در هنگام راه‌اندازی مواجه شود.

مشکلات Quorum (اجماع)

Quorum مکانیزمی است که کلاستر از آن برای اطمینان از اینکه تعداد کافی از نودها در دسترس هستند و کلاستر می‌تواند به کار خود ادامه دهد، استفاده می‌کند. اگر Quorum به خطر بیفتد، کلاستر ممکن است آفلاین شود یا نودهای آن نتوانند با یکدیگر ارتباط برقرار کنند.
* **از دست دادن گواه (Witness):** در کلاسترهایی که از دیسک شاهد (Disk Witness) یا فایل شیر شاهد (File Share Witness) استفاده می‌کنند، اگر شاهد از دسترس خارج شود و تعداد نودهای فعال نیز به زیر آستانه Quorum برسد، نودها ممکن است از کلاستر جدا شوند.
* **تقسیم شبکه (Split-Brain Scenario):** در موارد نادر، اگر ارتباطات شبکه بین نودها به گونه‌ای قطع شود که دو گروه از نودها فکر کنند گروه دیگر آفلاین است، هر گروه ممکن است سعی در کنترل منابع کند که منجر به وضعیت “Split-Brain” و از دست دادن Quorum واقعی می‌شود.

مشکلات فایروال و سیاست‌های امنیتی (Firewall and Security Policies)

فایروال‌های فعال روی نودهای کلاستر یا در شبکه می‌توانند ارتباطات حیاتی بین نودها را مسدود کنند.
* **پورت‌های مسدود شده:** پورت‌هایی مانند 135 (RPC) و 3343 (Cluster Network Driver) که برای ارتباطات کلاستر ضروری هستند، و همچنین پورت‌های SQL Server (مانند 1433 برای TCP/IP و 5022 برای Endpointهای AlwaysOn) باید باز باشند.
* **سیاست‌های گروهی (Group Policies):** سیاست‌های امنیتی اعمال شده توسط Group Policy می‌تواند دسترسی‌ها را محدود کرده یا پورت‌ها را مسدود کند.

مشکلات DNS (Domain Name System)

نام‌گذاری صحیح و تفکیک DNS برای ارتباطات کلاستر بسیار مهم است.
* **رکورد‌های DNS منسوخ:** رکوردهای DNS قدیمی یا نادرست برای نام‌های شبکه کلاستر یا listenerها می‌توانند باعث شوند نودها نتوانند یکدیگر را پیدا کنند.
* **مشکلات سرور DNS:** در دسترس نبودن یا عملکرد نادرست سرورهای DNS می‌تواند به مشکلات ارتباطی منجر شود.

مشکلات سرویس SQL Server

اگرچه ارور 1204 به طور مستقیم به سرویس کلاستر ویندوز مربوط می‌شود، اما اگر سرویس SQL Server روی یک نود خاص نتواند شروع به کار کند یا با خطا مواجه شود، می‌تواند به عنوان یک عامل جانبی در گزارش‌های کلاستر ظاهر شود و منجر به عدم دسترسی منابع SQL Server شود.

مشکلات سخت‌افزاری یا سیستم‌عامل

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

تشخیص دقیق این علل نیازمند بررسی دقیق لاگ‌ها، وضعیت سرویس‌ها و پیکربندی‌های شبکه و کلاستر است.

راهکارهای عملی برای رفع ارور 1204 SQL Server

برای رفع ارور 1204 و بازگرداندن پایداری به کلاستر SQL Server، باید یک رویکرد سیستماتیک برای تشخیص و عیب‌یابی دنبال کنید. در ادامه، مراحل عملی و گام‌به‌گام برای رفع این مشکل ارائه شده است:

1. بررسی وضعیت کلی کلاستر و نودها

اولین گام، بررسی وضعیت فعلی Windows Server Failover Cluster است. این کار را می‌توان از طریق ابزار GUI Cluster Failover Manager یا با استفاده از دستورات PowerShell انجام داد.

* **با استفاده از Failover Cluster Manager:**
* ابزار Failover Cluster Manager را باز کنید.
* به بخش Nodes بروید و وضعیت هر نود را بررسی کنید. نودی که “Down” یا “Offline” باشد، مقصر اصلی است.
* به بخش Roles (یا Services and Applications) بروید و وضعیت منابع SQL Server (مانند Availability Group یا Failover Cluster Instance) را بررسی کنید.

* **با استفاده از PowerShell:**
* PowerShell را به عنوان Administrator اجرا کنید.
* برای مشاهده وضعیت کلی نودها، دستور زیر را وارد کنید:

“`powershell
Get-ClusterNode
“`
* این دستور لیستی از نودهای کلاستر و وضعیت آن‌ها (Up, Down, Paused) را نمایش می‌دهد. به دنبال نودی باشید که وضعیت “Down” دارد.
* برای مشاهده وضعیت منابع کلاستر، دستور زیر را اجرا کنید:

“`powershell
Get-ClusterResource
“`
* این دستور وضعیت تمام منابع (مانند IP Address, Network Name, SQL Server) را نشان می‌دهد و به شما کمک می‌کند تا منابع آفلاین را شناسایی کنید.

2. بررسی سرویس کلاستر ویندوز (Cluster Service)

اطمینان حاصل کنید که سرویس کلاستر ویندوز (cluSvc) روی همه نودها، به خصوص نودهایی که مشکل دارند، در حال اجرا است.

* **با استفاده از Services Manager:**
* `services.msc` را اجرا کنید.
* سرویس “Failover Cluster” را پیدا کنید.
* اطمینان حاصل کنید که وضعیت آن “Running” باشد و نوع راه‌اندازی (Startup Type) آن “Automatic” باشد.
* اگر متوقف شده است، سعی کنید آن را راه‌اندازی کنید.

* **با استفاده از PowerShell:**
* برای بررسی وضعیت سرویس:

“`powershell
Get-Service -Name ClusSvc
“`
* اگر سرویس متوقف شده است، برای راه‌اندازی آن از دستور زیر استفاده کنید:

“`powershell
Start-Service -Name ClusSvc
“`

3. تایید ارتباطات شبکه (Network Connectivity)

مشکلات شبکه یکی از علل اصلی ارور 1204 است. باید ارتباطات بین تمام نودهای کلاستر را بررسی کنید.

* **تست Ping و DNS:**
* از هر نود، نودهای دیگر را با نام و IP آدرس Ping کنید.
* از دستور `nslookup` برای اطمینان از تفکیک صحیح نام‌های نودها و منابع کلاستر استفاده کنید.

“`cmd
ping
ping
nslookup
“`
* **بررسی لاگ‌های رویداد شبکه:**
* در Event Viewer (Windows Logs -> System)، به دنبال خطاهای مربوط به آداپتورهای شبکه (NICs) یا ارتباطات TCP/IP باشید.

4. بررسی تنظیمات فایروال (Firewall Configuration)

فایروال‌ها می‌توانند ارتباطات حیاتی بین نودهای کلاستر و همچنین ارتباط SQL Server را مسدود کنند.

* **غیرفعال‌سازی موقت فایروال:** برای عیب‌یابی، می‌توانید فایروال ویندوز را روی نودهای درگیر به طور موقت غیرفعال کنید. اگر مشکل حل شد، باید قوانین فایروال را به درستی پیکربندی کنید.
* **قوانین فایروال ضروری:**
* پورت‌های 135 (RPC) و 3343 (Cluster Network Driver) برای ارتباطات WSFC.
* پورت‌های SQL Server (پیش‌فرض 1433 برای Instance پیش‌فرض) و پورت‌های مربوط به AlwaysOn Availability Group Endpoints (پیش‌فرض 5022).
* برای بررسی قوانین فایروال موجود (با PowerShell به عنوان Administrator):

“`powershell
Get-NetFirewallRule | Where-Object {$_.DisplayName -like “*SQL*” -or $_.DisplayName -like “*Cluster*”}
“`
* این دستور به شما کمک می‌کند تا قوانین مربوط به SQL و کلاستر را مشاهده کنید.

5. بررسی Quorum کلاستر

اطمینان حاصل کنید که Quorum کلاستر سالم و پایدار است.

* **با استفاده از Failover Cluster Manager:**
* کلاستر را انتخاب کنید و به بخش “More Actions” -> “Configure Cluster Quorum Settings” بروید.
* تنظیمات فعلی Quorum را بررسی کنید و اطمینان حاصل کنید که شاهد (Witness) در دسترس است (اگر پیکربندی شده باشد).
* **با استفاده از PowerShell:**
* برای مشاهده تنظیمات Quorum:

“`powershell
Get-ClusterQuorum
“`
* اگر مشکل از شاهد (Disk Witness یا File Share Witness) است، از دسترس بودن آن اطمینان حاصل کنید.

6. بررسی لاگ‌های رویداد و لاگ‌های کلاستر

لاگ‌ها منبع غنی اطلاعات برای تشخیص مشکل هستند.

* **Event Viewer:**
* `eventvwr.msc` را اجرا کنید.
* به بخش “Windows Logs” -> “System” و “Application” بروید. به دنبال خطاهای مرتبط با “Failover Clustering” یا “SQL Server” باشید.
* به “Applications and Services Logs” -> “Microsoft” -> “Windows” -> “FailoverClustering” -> “Diagnostic” بروید تا لاگ‌های تشخیصی کلاستر را مشاهده کنید.
* **Cluster Log:**
* این لاگ‌ها جزئیات بسیار دقیق‌تری از فعالیت‌های کلاستر ارائه می‌دهند. برای جمع‌آوری لاگ کلاستر برای 20 دقیقه گذشته (یا بازه زمانی مورد نظر):

“`powershell
Get-ClusterLog -TimeSpan 20 -Destination C:\ClusterLogs
“`
* این دستور لاگ را در مسیر مشخص شده ذخیره می‌کند. فایل متنی ایجاد شده را برای خطاهای مربوط به نود، شبکه یا منابع SQL Server به دقت بررسی کنید.

7. بررسی سرویس SQL Server

اگرچه مشکل اصلی 1204 مربوط به کلاستر است، اما عدم شروع به کار سرویس SQL Server روی یک نود می‌تواند به این مشکل دامن بزند یا نشانه‌ای از یک مشکل عمیق‌تر باشد.

* **با استفاده از SQL Server Configuration Manager:**
* اطمینان حاصل کنید که سرویس SQL Server و SQL Server Agent (در صورت نیاز) روی نودهای مربوطه در حال اجرا هستند.
* لاگ خطای SQL Server (SQL Server Error Log) را برای هرگونه پیغام خطا در هنگام راه‌اندازی یا حین کار بررسی کنید.

8. اجرای اعتبارسنجی کلاستر (Cluster Validation)

ابزار اعتبارسنجی کلاستر ویندوز می‌تواند به شناسایی مشکلات پیکربندی یا سخت‌افزاری که ممکن است باعث بروز ارور 1204 شوند، کمک کند.

* **با استفاده از Failover Cluster Manager:**
* کلاستر را انتخاب کنید، روی “Validate Cluster” کلیک کنید و تمام تست‌ها را اجرا کنید.
* **با استفاده از PowerShell:**

“`powershell
Test-Cluster
“`
* گزارش تولید شده را به دقت بررسی کنید و هرگونه هشدار (Warning) یا خطا (Error) را رفع کنید. این گزارش می‌تواند مشکلات شبکه، دیسک، سرویس‌ها و … را نشان دهد.

9. بررسی و به‌روزرسانی درایورها و سیستم‌عامل

اطمینان حاصل کنید که سیستم‌عامل و درایورهای شبکه (NIC drivers) همه نودها به‌روز هستند. درایورهای قدیمی می‌توانند باعث ناپایداری‌های شبکه شوند.

10. بررسی تنظیمات DNS

رکورد‌های DNS برای نام‌های شبکه کلاستر و Listenerهای Availability Group را در سرور DNS بررسی کنید.
* اطمینان حاصل کنید که رکوردهای `A` و `PTR` (در صورت استفاده) صحیح و به‌روز هستند.
* رکورد‌های منسوخ شده را حذف کنید.
* برای پاک کردن کش DNS در نودها، از دستور زیر استفاده کنید:

“`cmd
ipconfig /flushdns
“`

با دنبال کردن این مراحل به ترتیب، می‌توانید علت اصلی ارور 1204 SQL Server را شناسایی کرده و راهکارهای مناسب را برای رفع آن اعمال کنید. مستندسازی هر گام و نتایج آن می‌تواند در فرآیندهای عیب‌یابی آینده بسیار مفید باشد.

SqlError
Comments (0)
Add Comment