Skip to content
Published on

etcdクラスター運用: 障害復旧とパフォーマンスチューニング

Authors

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_secondsWAL 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メカニズムを分析します。