# 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 ```bash # 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 ```bash # 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 # 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. ```bash 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 ` (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.