Environment_Infrastructure/facts/swarm-node-recovery.md
Murat ÖZDEMİR 2198f932cd Implement: Gitea Actions runner, automated DB stack, and Turkish localization
*   Introduces an Ansible role for installing and registering `act_runner` for Gitea Actions.
*   Automates PostgreSQL and MongoDB deployment on Docker Swarm in the test environment, leveraging Docker named volumes for data persistence.
*   Translates core documentation, including `README.md` and `setup/04-test-db-docker-kurulum.md`, to Turkish.
*   Adds comprehensive documentation for firewall architecture (`facts/firewall.md`) and Docker Swarm node recovery (`facts/swarm-node-recovery.md`).
*   Enhances security hardening by ensuring `fail2ban` is enabled and streamlining admin SSH key management via Ansible.
*   Updates Ansible vault structure to support new secret variables and adds `.vault_pass` to `.gitignore`.
2026-05-12 18:34:24 +03:00

2.6 KiB
Raw Blame History

Docker Swarm — Node Recovery

Test ortamında tek manager (iklim-app-01) ve tek worker (iklim-db-01) bulunur. Hangi node'un yeniden kurulduğuna göre recovery süreci farklılaşır.

Senaryo 1: iklim-app-01 (Manager) Yeniden Kurulur

Sorun

Yeni iklim-app-01 üzerinde docker swarm init farklı cluster ID ile yeni bir küme başlatır. iklim-db-01 hâlâ eski kümeye bağlıdır. Ansible swarm role'u iklim-db-01'de Swarm'ı active görür, join denemez. İki node iki ayrı kümede kalır.

Çözüm

# 1. iklim-db-01 üzerinde — eski kümeden çık
docker swarm leave --force

# 2. Ansible ile her iki node'u yeniden kur
cd ansible/test
ansible-playbook -i inventory/generated/test.yml test-bootstrap.yml --ask-vault-pass

# 3. DB stack'i yeniden deploy et
ansible-playbook -i inventory/generated/test.yml test-db-post-stack.yml --ask-vault-pass

DB verileri iklim-db-01'deki named volume'larda korunur, kayıp yaşanmaz.


Senaryo 2: iklim-db-01 (Worker) Yeniden Kurulur

Durum

Yeni iklim-db-01 Swarm'dan habersiz başlar (inactive). Manager (iklim-app-01) eski dead node kaydını tutar.

Çözüm

# 1. Ansible bootstrap — yeni node otomatik join olur
cd ansible/test
ansible-playbook -i inventory/generated/test.yml test-bootstrap.yml --ask-vault-pass

# 2. iklim-app-01 üzerinde — eski dead node kaydını temizle
docker node ls                   # eski node ID'yi bul
docker node rm <eski-node-id>

# 3. DB stack'i yeniden deploy et (backup'tan restore sonrası)
ansible-playbook -i inventory/generated/test.yml test-db-post-stack.yml --ask-vault-pass

Ansible swarm role'u inactive durumu gördüğü için token alıp join eder, role=db label'ını uygular. DB servisleri placement constraint sayesinde yeni node'a schedule edilir.


Senaryo 3: Her İki Node Yeniden Kurulur

Her şey sıfırdan kurulur, Swarm uyumsuzluğu yaşanmaz.

cd ansible/test
ansible-playbook -i inventory/generated/test.yml test-bootstrap.yml --ask-vault-pass
ansible-playbook -i inventory/generated/test.yml test-db-post-stack.yml --ask-vault-pass

Özet

Senaryo Manuel Adım Ansible Yeterli mi?
Manager (iklim-app-01) ölür docker swarm leave --force (worker'da) Sonrasında evet
Worker (iklim-db-01) ölür docker node rm <id> (manager'da) Büyük ölçüde evet
Her ikisi ölür Yok Evet

Neden Prod'da Bu Sorun Yok

Prod ortamında birden fazla manager node (en az 3) çalıştırılır. Tek manager düşse diğerleri liderliği devralır, küme sağlıklı kalmaya devam eder.