این صفحه به طور کامل مفاهیم کلاسترها، Load Balancing، Geo DNS، Anycast DNS و Fault Tolerance در شبکههای کامپیوتری را از مبانی تا سطوح پیشرفته تشریح و آموزش میدهد، همراه با مثالهای کدنویسی عملی.
کلاستر (Cluster) به گروهی از سرورها یا سیستمها گفته میشود که با هم کار میکنند تا عملکرد بهتری نسبت به یک سیستم منفرد فراهم کنند. این سیستمها به گونهای ترکیب میشوند که به نظر یک سیستم واحد میرسند.
اهداف اصلی کلاسترها شامل افزایش دسترسپذیری (Availability)، مقیاسپذیری (Scalability) و کارایی (Performance) است. منابع سختافزاری و نرمافزاری بین سرورها به اشتراک گذاشته میشود تا بار کاری به طور موثر توزیع شود و در صورت خرابی یک سیستم، سایر سیستمها به طور خودکار جایگزین شوند.
کلاستر شامل نودهای متصل از طریق شبکههای پرسرعت (مانند InfiniBand) است. الگوهای معماری شامل:
# مقداردهی اولیه Docker Swarm
docker swarm init
# افزودن نودهای کارگر
docker swarm join --token <TOKEN> <MANAGER-IP>:2377
# استقرار سرویس توزیعشده
docker service create --name my-app --replicas 3 nginx
این کد یک کلاستر ساده با Docker Swarm ایجاد میکند که 3 کپی از یک اپلیکیشن NGINX را اجرا میکند.
Load Balancer دستگاه یا نرمافزاری است که ترافیک ورودی را بین چندین سرور توزیع میکند تا از overload شدن جلوگیری کرده و کارایی را افزایش دهد.
# فایل تنظیمات NGINX: /etc/nginx/nginx.conf
http {
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
# راهاندازی NGINX
sudo nginx -s reload
این تنظیم NGINX ترافیک را بین سه سرور backend توزیع میکند.
Geo DNS پاسخهای DNS را بر اساس موقعیت جغرافیایی کاربر سفارشی میکند. به جای یک IP ثابت، IP سروری نزدیک به کاربر برگردانده میشود.
// فایل تنظیمات BIND: /etc/bind/named.conf
acl "europe" { 192.168.1.0/24; }; // محدوده IP اروپا
acl "asia" { 10.0.0.0/24; }; // محدوده IP آسیا
view "europe" {
match-clients { europe; };
zone "example.com" {
type master;
file "/etc/bind/db.europe.example.com";
};
};
view "asia" {
match-clients { asia; };
zone "example.com" {
type master;
file "/etc/bind/db.asia.example.com";
};
};
// فایل db.europe.example.com
example.com. IN A 192.168.1.10
// فایل db.asia.example.com
example.com. IN A 10.0.0.10
این تنظیم کاربران اروپایی را به سرور 192.168.1.10 و کاربران آسیایی را به 10.0.0.10 هدایت میکند.
Anycast DNS روشی است که در آن یک آدرس IP واحد به چندین سرور DNS در مکانهای جغرافیایی مختلف اختصاص داده میشود. پروتکلهای روتینگ مانند BGP (Border Gateway Protocol) درخواستها را به نزدیکترین سرور هدایت میکنند، که این امر latency را کاهش میدهد و دسترسپذیری را افزایش میدهد.
Anycast با استفاده از روتینگ شبکه کار میکند: چندین سرور همان IP را تبلیغ میکنند، و شبکه درخواست را به نزدیکترین (از نظر روتینگ) سرور میفرستد. این متفاوت از Unicast (یک به یک) یا Multicast (یک به چند) است.
Anycast DNS اغلب با Geo DNS ترکیب میشود برای توزیع جغرافیایی بهتر. در حالی که Geo DNS بر اساس موقعیت کاربر در سطح DNS تصمیم میگیرد، Anycast از روتینگ شبکه برای هدایت به نزدیکترین PoP (Point of Presence) استفاده میکند. همچنین، برای Load Balancing جهانی مفید است زیرا بار را بین مکانهای مختلف توزیع میکند و از failover خودکار پشتیبانی میکند.
سرویسهایی مانند Cloudflare DNS، Google Public DNS (8.8.8.8) و Microsoft Azure DNS از Anycast استفاده میکنند. برای پیادهسازی، نیاز به پیکربندی BGP در روترها است، اما مثال ساده با ابزارهای ابری:
# مثال با AWS Route 53 برای فعالسازی Anycast (با AWS CLI)
aws route53 create-hosted-zone \
--name example.com \
--caller-reference $(date +%s) \
--hosted-zone-config Comment="Anycast enabled zone"
# افزودن رکوردهای A با TTL پایین برای توزیع
aws route53 change-resource-record-sets \
--hosted-zone-id /hostedzone/Z123456789 \
--change-batch '{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "anycast.example.com",
"Type": "A",
"TTL": 60,
"ResourceRecords": [{ "Value": "192.0.2.1" }] // IP مشترک برای چندین مکان
}
}]
}'
در این مثال، IP مشترک برای چندین مکان تبلیغ میشود و روتینگ BGP هدایت را مدیریت میکند.
Fault Tolerance توانایی سیستم برای ادامه کار در صورت خرابی یک یا چند جزء است. در کلاسترها، این شامل redundancy، failover و replication است.
# فایل تنظیمات HAProxy: /etc/haproxy/haproxy.cfg
frontend http_front
bind *:80
default_backend servers
backend servers
server server1 192.168.1.11:80 check
server server2 192.168.1.12:80 check backup
# راهاندازی HAProxy
sudo systemctl restart haproxy
در این تنظیم، اگر server1 خراب شود، HAProxy به server2 سوئیچ میکند.
این فناوریها با هم در Global Server Load Balancing (GSLB) ترکیب میشوند:
+-------------------+ +-------------------+ +-------------------+
| کاربر اروپا | | کاربر آسیا | | کاربر آمریکا |
+-------------------+ +-------------------+ +-------------------+
| | |
| | |
v v v
+-------------------+ +-------------------+ +-------------------+
| Geo / Anycast |-----| Geo / Anycast |-----| Geo / Anycast |
| DNS | | DNS | | DNS |
| (تشخیص موقعیت) | | (تشخیص موقعیت) | | (تشخیص موقعیت) |
+-------------------+ +-------------------+ +-------------------+
| | |
| (IP اروپا) | (IP آسیا) | (IP آمریکا)
v v v
+-------------------+ +-------------------+ +-------------------+
| Load Balancer EU | | Load Balancer AS | | Load Balancer US |
| (Failover فعال) | | (Failover فعال) | | (Failover فعال) |
+-------------------+ +-------------------+ +-------------------+
| | |
+-- توزیع بار محلی --+ |
| | |
v v v
+---------+---------+ +---------+---------+ +---------+---------+
| سرور 1 | سرور 2 | | سرور 1 | سرور 2 | | سرور 1 | سرور 2 |
| (Replication) | | | (Replication) | | | (Replication) | |
+---------+---------+ +---------+---------+ +---------+---------+
این دیاگرام نشان میدهد که Geo DNS و Anycast ترافیک را به data center مناسب هدایت میکنند، Load Balancer بار را توزیع میکند و Fault Tolerance با failover و replication از قطعی جلوگیری میکند.
در سطوح پیشرفته، تمرکز بر موارد زیر است:
# تعریف سیاست Geo در Route 53 (با AWS CLI)
aws route53 create-hosted-zone \
--name example.com \
--caller-reference $(date +%s)
aws route53 change-resource-record-sets \
--hosted-zone-id /hostedzone/Z123456789 \
--change-batch '{
"Changes": [{
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "example.com",
"Type": "A",
"SetIdentifier": "Europe",
"GeoLocation": { "ContinentCode": "EU" },
"TTL": 300,
"ResourceRecords": [{ "Value": "192.168.1.10" }]
}
}, {
"Action": "CREATE",
"ResourceRecordSet": {
"Name": "example.com",
"Type": "A",
"SetIdentifier": "Asia",
"GeoLocation": { "ContinentCode": "AS" },
"TTL": 300,
"ResourceRecords": [{ "Value": "10.0.0.10" }]
}
}]
}'
این کد Route 53 را برای هدایت کاربران اروپایی و آسیایی به IPهای مختلف تنظیم میکند.