<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Raft on homelab89</title>
    <link>https://blog.homelab89.com/tags/raft/</link>
    <description>Recent content in Raft on homelab89</description>
    <generator>Hugo</generator>
    <language>ko-KR</language>
    <lastBuildDate>Mon, 29 Jun 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.homelab89.com/tags/raft/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>04. etcd 장애 실험 시나리오</title>
      <link>https://blog.homelab89.com/docs/k8s/etcd-failure-experiments/</link>
      <pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.homelab89.com/docs/k8s/etcd-failure-experiments/</guid>
      <description>&lt;h2 id=&#34;etcd-raft-쿼럼-기본-원리&#34;&gt;etcd Raft 쿼럼 기본 원리&lt;/h2&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;3-node etcd 클러스터:
  - 쿼럼(과반수) = 2
  - 1개 장애: 쿼럼 유지 (2/3 살아있음) → 클러스터 정상 운영
  - 2개 장애: 쿼럼 붕괴 (1/3만 살아있음) → 클러스터 읽기 전용 / 쓰기 불가
  - 3개 장애: 완전 다운

  장애 허용 공식: floor((n-1)/2)
  3노드: floor((3-1)/2) = 1개까지 허용
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;실험-전-준비&#34;&gt;실험 전 준비&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;KUBECONFIG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;~/.kube/k8s-etcd-lab.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 실험 전 etcd 상태 베이스라인 기록&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get nodes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;kubectl get pods -n kube-system
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# etcd 헬스체크 (ctrl1에서)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh k8s-ctrl1 &lt;span class=&#34;s2&#34;&gt;&amp;#34;sudo ETCDCTL_API=3 etcdctl \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --endpoints=https://203.0.113.11:2379,https://203.0.113.12:2379,https://203.0.113.13:2379 \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --cacert=/etc/ssl/etcd/ssl/ca.pem \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --cert=/etc/ssl/etcd/ssl/member-k8s-ctrl1.pem \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  --key=/etc/ssl/etcd/ssl/member-k8s-ctrl1-key.pem \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;  endpoint health -w table&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;h2 id=&#34;시나리오-1-단일-노드-장애-쿼럼-유지&#34;&gt;시나리오 1: 단일 노드 장애 (쿼럼 유지)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;목표&lt;/strong&gt;: etcd 노드 1개 정지 후 클러스터 운영 영향 확인&lt;/p&gt;</description>
    </item>
    <item>
      <title>05. etcd 복구 절차</title>
      <link>https://blog.homelab89.com/docs/k8s/etcd-recovery-runbook/</link>
      <pubDate>Mon, 29 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://blog.homelab89.com/docs/k8s/etcd-recovery-runbook/</guid>
      <description>&lt;h2 id=&#34;복구-시나리오-분류&#34;&gt;복구 시나리오 분류&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;상황&lt;/th&gt;
					&lt;th&gt;방법&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;단일 노드 장애 (데이터 intact)&lt;/td&gt;
					&lt;td&gt;etcd 재시작으로 자동 동기화&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;단일 노드 장애 (데이터 손상)&lt;/td&gt;
					&lt;td&gt;멤버 제거 → 재추가&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;과반수 장애 (데이터 intact)&lt;/td&gt;
					&lt;td&gt;모든 노드 재시작&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;전체 장애 / 데이터 손상&lt;/td&gt;
					&lt;td&gt;스냅샷으로 복구&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;복구-1-단일-노드-자동-재동기화&#34;&gt;복구 1: 단일 노드 자동 재동기화&lt;/h2&gt;
&lt;p&gt;etcd 데이터가 살아있고 단순히 프로세스가 죽은 경우입니다.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
