3 VPS nodunda Cloudflare Tünelləri və Docker Swarm istifadə edərək veb tətbiqləriniz üçün yüksək mövcudluq (HA) qurmaq üçün tam təlimat.
Bu təlimat aşağıdakıları istifadə edərək 3 VPS nodunda yüksək mövcudluqlu veb tətbiq qurmağı göstərir:
Bu quruluş tətbiqinizin ayrı-ayrı VPS nodları çöksə belə onlayn qalmasını təmin edir, bütün mövcud nodlarda avtomatik load balancing ilə.
┌─────────────────┐
│ Cloudflare │
│ Edge │
└────────┬────────┘
│ Load Balancing
┌────┴────┬────┬────┐
│ │ │ │
┌───▼───┐ ┌──▼──┐ ┌▼───┐ ┌▼───┐
│ VPS 1 │ │VPS 2│ │VPS 3│ │ ... │
│ NC2 │ │NC3 │ │NC4 │ │ │
└───┬───┘ └──┬──┘ └┬───┘ └┬───┘
│ │ │ │
└───────┴──────┴──────┘
Docker Swarm
Overlay Network
Hər VPS işlədir:
Manager nodda (NC2-net):
docker swarm init --advertise-addr <MANAGER_IP>Worker nodlarda (NC3-org, NC4-de):
docker swarm join --token <TOKEN> <MANAGER_IP>:2377Inter-service kommunikasiya üçün attachable overlay şəbəkə yarat:
docker network create --driver overlay --subnet 10.0.1.0/24 --gateway 10.0.1.1 --attachable cloudflared-haCloudflared direktoriyanda .env faylı yarat:
TUNNEL_TOKEN=your_tunnel_token_hereservices:
cloudflared-ha:
image: cloudflare/cloudflared:latest
command: tunnel run
env_file:
- .env
networks:
- cloudflared-ha
healthcheck:
test: ["CMD", "cloudflared", "version"]
interval: 60s
timeout: 20s
retries: 5
start_period: 60s
start_interval: 5s
deploy:
mode: replicated
replicas: 3
placement:
max_replicas_per_node: 1
restart_policy:
condition: any
networks:
cloudflared-ha:
external: trueservices:
frontend:
image: your-registry/frontend:latest
env_file:
- ./frontend/.env
networks:
- cloudflared-ha
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://127.0.0.1/health"]
interval: 60s
timeout: 20s
retries: 5
start_period: 60s
start_interval: 5s
deploy:
mode: replicated
replicas: 3
placement:
max_replicas_per_node: 1
update_config:
parallelism: 1
delay: 10s
order: start-first
restart_policy:
condition: any
backend:
image: your-registry/backend:latest
env_file:
- ./backend/.env
networks:
- cloudflared-ha
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 60s
timeout: 20s
retries: 5
start_period: 60s
start_interval: 5s
deploy:
mode: replicated
replicas: 3
placement:
max_replicas_per_node: 1
update_config:
parallelism: 1
delay: 10s
order: start-first
restart_policy:
condition: any
networks:
cloudflared-ha:
external: truecd /path/to/cloudflared-ha
docker stack deploy -c cloudflared.yaml cloudflaredDeploy-i yoxla:
docker service ps cloudflared_cloudflared-haHər nodda 1 replika işləməlidir.
cd /path/to/your-app
docker stack deploy -c swarm.yaml blogDeploy-i yoxla:
docker service ps blog_frontend
docker service ps blog_backendCloudflare Zero Trust dashboard-da:
yourdomain.comhttp://frontend:80api.yourdomain.comhttp://backend:8000Cloudflare dashboard → Networks → Connectors keç:
Metod 1: Cloudflare Live Logs
# Bir neçə request et
for i in {1..10}; do curl -I https://yourdomain.com; sleep 1; doneFərqli connector ID-lərə traffikin paylandığını görməlisiniz.
Metod 2: Node Çatışmazlığını Simulyasyon Et
# Cloudflared-i 2 replikaya endir
docker service scale cloudflared_cloudflared-ha=2
# Saytın hələ də işlədiyini yoxla
curl -I https://yourdomain.com
# 3-ə geri qaytar
docker service scale cloudflared_cloudflared-ha=3Metod 3: Service Replikalarını Yoxla
# Bütün service-lərin işlədiyini yoxla
docker service ls
# Fərdi service distribusiyasını yoxla
docker service ps cloudflared_cloudflared-ha
docker service ps blog_frontend
docker service ps blog_backendHər biri hər nodda 1 replika göstərməlidir.
# Service health-i yoxla
docker service ps blog_frontend --format "table \t"
# Fərdi konteyner health-i yoxla
docker inspect <container_id> --format ''# Overlay şəbəkə konfiqurasiyasını yoxla
docker network inspect cloudflared-ha
# Konteynerlərin kommunikasiya edə biləcəyini yoxla
docker exec <frontend_container> wget -qO- http://backend:8000/healthSimptomlar: Yalnız bəzi replikalar işləyir, digərləri rədd olunur
Həll:
# Şəbəkə konfiqurasiyasını yoxla
docker network inspect cloudflared-ha
# Şəbəkəni sil və yenidən yarat
docker network rm cloudflared-ha
docker network create --driver overlay --subnet 10.0.1.0/24 --gateway 10.0.1.1 --attachable cloudflared-ha
# Stack-ləri yenidən deploy et
docker stack rm cloudflared blog
docker stack deploy -c cloudflared.yaml cloudflared
docker stack deploy -c swarm.yaml blogSimptomlar: Konteynerlər "health: starting" vəziyyətində qalır
Həll:
docker exec <container_id> <health_check_command>Simptomlar: Dashboard-da connectorlar disconnected göstərilir
Həll:
# Cloudflared loglarını yoxla
docker service logs cloudflared_cloudflared-ha -f
# Tunnel tokenının doğru olduğunu yoxla
# Nodlar arası şəbəkə connectivity-sini yoxla
# Overlay şəbəkəsinin işlədiyini yoxlaSimptomlar: Bütün traffik tək connectora gedir
Həll:
Resource exhaustionsun qarşısını almaq üçün resource constraint-lər əlavə et:
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256MZero-downtime deploy-lər üçün rolling updates istifadə et:
update_config:
parallelism: 1
delay: 10s
order: start-first
failure_action: rollbackBu HA quruluşu təmin edir:
Docker Swarm və Cloudflare Tünellərinin birləşməsi nod uğursuzluqları zamanı service mövcudluğunu saxlayan güclü, production-ready infrastruktur yaradır.