- Authors

- Name
- Youngju Kim
- @fjvbn20031
etcdクラスター運用: 障害復旧とパフォーマンスチューニング
etcdクラスターの安定的な運用のための核心知識を扱います。メンバー管理、スナップショットバックアップ/リストア、災害復旧、パフォーマンスチューニングなど運用に必須の内容を説明します。
1. メンバー管理
1.1 クラスター構成推奨事項
etcdクラスターは奇数ノードで構成することが推奨されます。3ノードまたは5ノード構成が最も一般的です。
1.2 メンバー追加
# 1. 既存クラスターに新メンバー登録
etcdctl member add new-node \
--peer-urls=https://10.0.0.4:2380
# 2. 新ノードでetcd起動
etcd --name new-node \
--initial-cluster 'node1=https://10.0.0.1:2380,...,new-node=https://10.0.0.4:2380' \
--initial-cluster-state existing
1.3 Learnerメンバー
etcd 3.4+ではLearnerとして先に追加することを推奨します:
# Learnerとして追加
etcdctl member add new-node \
--peer-urls=https://10.0.0.4:2380 \
--learner
# ログに追いついた後投票メンバーに昇格
etcdctl member promote MEMBER_ID
Learnerの利点:
- 投票に参加しないのでクォーラムに影響なし
- ログに追いつく間クラスター安定性を維持
- ネットワーク問題時クラスターが影響を受けない
1.4 メンバー削除
etcdctl member list
etcdctl member remove MEMBER_ID
2. スナップショットとバックアップ
2.1 スナップショット保存
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/etcd/ca.crt \
--cert=/etc/etcd/server.crt \
--key=/etc/etcd/server.key
2.2 データディレクトリ構造
/var/lib/etcd/
member/
snap/ # スナップショットファイル
db # BoltDBデータファイル
wal/ # Write-Ahead Logファイル
2.3 スナップショットリストア
etcdutl snapshot restore /backup/etcd-snapshot.db \
--name node1 \
--data-dir /var/lib/etcd-restored \
--initial-cluster 'node1=https://10.0.0.1:2380,...' \
--initial-advertise-peer-urls https://10.0.0.1:2380
2.4 バックアップ戦略
- 定期的スナップショット(例: 30分ごと)
- スナップショットをリモートストレージにコピー
- バックアップ検証: 定期的にリストアテスト実行
- WALとデータを別ディスクに分離
3. 災害復旧
3.1 単一ノード障害
3ノードクラスターで1ノード障害時はクォーラム(2/3)が維持され正常動作します。
3.2 クォーラム喪失復旧
過半数ノード障害の場合:
# 残存ノードでスナップショット保存
etcdctl snapshot save /backup/emergency.db
# 新しい単一ノードクラスターとしてリストア
etcdutl snapshot restore /backup/emergency.db \
--name node1 \
--data-dir /var/lib/etcd-new \
--initial-cluster 'node1=https://10.0.0.1:2380'
# 残りのメンバーを1つずつ追加
3.3 データ破損対応
データ破損の兆候: etcd起動失敗、一貫性チェック失敗、CORRUPTアラーム
対応: ノードをクラスターから削除、データディレクトリ削除、新メンバーとして再追加(自動データ複製)、またはスナップショットからリストア
4. パフォーマンスチューニング
4.1 ディスクパフォーマンス
etcdパフォーマンスに最も大きな影響を与える要素はディスクです:
- SSD必須: HDD(回転ディスク)は不適切
- WAL専用ディスク: WALとデータを別ディスクに分離
- fioベンチマーク: 99thパーセンタイルfsyncレイテンシーが10ms以下か確認
fio --rw=write --ioengine=sync --fdatasync=1 \
--directory=/var/lib/etcd --size=22m \
--bs=2300 --name=etcd-fsync-test
4.2 ネットワーク設定
- メンバー間RTTが低いほど良い
- 同じデータセンター内配置推奨
- heartbeat-intervalとelection-timeoutをネットワークレイテンシーに応じて調整
4.3 リソース推奨
CPU: 2-4専用コア
Memory: 8GB以上
Disk: SSD、50GB以上
Network: 1Gbps以上
5. モニタリングとアラート
5.1 主要メトリクス
| メトリクス | 説明 | 閾値 |
|---|---|---|
| etcd_server_has_leader | リーダー存在有無 | 0は危険 |
| etcd_server_leader_changes_seen_total | リーダー変更回数 | 急増時注意 |
| etcd_disk_wal_fsync_duration_seconds | WAL fsyncレイテンシー | p99 > 10ms警告 |
| etcd_disk_backend_commit_duration_seconds | バックエンドコミットレイテンシー | p99 > 25ms警告 |
5.2 アラートルール例
- alert: EtcdNoLeader
expr: etcd_server_has_leader == 0
for: 1m
labels:
severity: critical
- alert: EtcdHighFsyncDuration
expr: histogram_quantile(0.99, etcd_disk_wal_fsync_duration_seconds_bucket) > 0.01
for: 5m
labels:
severity: warning
6. まとめ
etcdクラスター運用の核心は定期的なバックアップ、適切なモニタリング、ディスクパフォーマンス最適化です。Learnerノードを活用した安全なメンバー管理、クォーラム喪失時の復旧手順を熟知することが重要です。次の記事ではetcdのWatchとLeaseメカニズムを分析します。