63 lines
2.2 KiB
Markdown
63 lines
2.2 KiB
Markdown
# 증거 — Keycloak 멀티노드 클러스터 형성
|
|
|
|
`docs/keycloak-multinode-cluster.md`의 근거 자료.
|
|
**정상적으로 클러스터가 형성된 상태**에서 수집했으며, 이후 고장을 주입한
|
|
뒤 이것과 대조한다.
|
|
|
|
수집 시각: 2026-09-03 17:24 KST
|
|
|
|
| 파일 | 내용 |
|
|
|---|---|
|
|
| `01-cluster-formed.txt` | 파드 배치·클러스터 뷰 로그·JGROUPS_PING·OIDC discovery·자원 |
|
|
|
|
## 이 상태에서 확인된 것
|
|
|
|
**클러스터 뷰가 멤버 2를 보고한다**
|
|
|
|
```
|
|
ISPN000094: Received new cluster view for channel ISPN:
|
|
[keycloak-1-26938|1] (2) [keycloak-1-26938, keycloak-0-49501]
|
|
ISPN100000: Node keycloak-0-49501 joined the cluster
|
|
ISPN000079: physical addresses are [10.42.1.18:7800]
|
|
```
|
|
|
|
**디스커버리와 통신 경로가 한 테이블에 다 보인다**
|
|
|
|
```
|
|
name | cluster_name | ip | coord
|
|
------------------+--------------+-----------------+-------
|
|
keycloak-0-49501 | ISPN | 10.42.1.18:7800 | f
|
|
keycloak-1-26938 | ISPN | 10.42.0.16:7800 | t
|
|
```
|
|
|
|
`name`/`cluster_name`은 **DB 디스커버리**의 결과이고, `ip`의 `:7800`은
|
|
**실제 통신 경로**다. 7800을 막으면 이 표는 그대로 채워지면서 클러스터 뷰만
|
|
깨질 것으로 예상한다 — 다음 실험의 가설이다.
|
|
|
|
`coord = t` 인 `keycloak-1`이 코디네이터다.
|
|
|
|
**배치** — 서로 다른 노드에 하나씩. PostgreSQL은 `kc-lab-2`에 있으므로
|
|
**그 노드를 죽이면 Keycloak 하나와 DB가 동시에 사라진다.**
|
|
|
|
```
|
|
keycloak-0 10.42.1.18 kc-lab-2
|
|
keycloak-1 10.42.0.16 kc-lab-1
|
|
postgres 10.42.1.19 kc-lab-2
|
|
```
|
|
|
|
**issuer가 https로 발급된다** — 첫 실험(2홉 헤더 계약)의 결론이 적용된 결과다.
|
|
|
|
## 재수집
|
|
|
|
```bash
|
|
kubectl -n keycloak-lab get pods -o wide
|
|
kubectl -n keycloak-lab logs keycloak-0 | grep -E 'ISPN000094|ISPN000079|ISPN100000'
|
|
|
|
PG=$(kubectl -n keycloak-lab get pod -l app=postgres -o name | head -1)
|
|
kubectl -n keycloak-lab exec "$PG" -- \
|
|
psql -U keycloak -d keycloak -c "SELECT name, cluster_name, ip, coord FROM jgroups_ping ORDER BY name;"
|
|
|
|
curl -s https://auth.hyeonworks.com/realms/master/.well-known/openid-configuration | python3 -m json.tool
|
|
kubectl -n keycloak-lab top pods
|
|
```
|