* 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`.
77 lines
2.6 KiB
Markdown
77 lines
2.6 KiB
Markdown
# 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 <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.
|
||
|
||
```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 <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.
|