今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

etcd-io/etcd

分散システムの信頼性の高い状態管理のために、Raft合意アルゴリズムを使用した分散キー・バリューストアです。

手元でetcdクラスタを立ち上げ、ノードを1台落としてもデータが消えず、書き込みが止まらずに進み続ける様子を実際に目にすると、Raft合意アルゴリズムという言葉が単なる理論ではなく手触りのある安心感に変わります。gRPC API経由でKubernetesの設定やサービスディスカバリ情報を読み書きしながら、秒間1万件を超える書き込みが淡々とさばかれていく様子を見れば、ミッションクリティカルなデータをここに預けたくなる感覚が湧いてきます。CNCF標準プロジェクトとして本番運用と厳しいrobustnessテストで鍛えられてきた実装だからこそ、今日試したその挙動がそのまま本番でも再現されるという確信を持って触ることができます。

01 / 概要
何をするものか一文で言うと
ひとことで分散システムの信頼性の高い状態管理のために、Raft合意アルゴリズムを使用した分散キー・バリューストアです。

etcd-io/etcdは、分散システムの最も重要なデータを保存するための分散型・信頼性の高いキー・バリューストアです。Raftコンセンサスアルゴリズムを用いて複数ノード間でデータを複製し、Kubernetesのメタデータストアなど強い一貫性が要求される用途で広く使われています。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

リポジトリはGoのマルチモジュール構成になっており、api(gRPC/Protobuf定義、authpb・etcdserverpb・mvccpb等)、client/pkg・client/v3(クライアントライブラリ)、cache(インデックス付きキャッシュ層)、etcdctl(CLI操作ツール、main.goがctlv3.MustStart()を呼び出す)、etcdutl(オフラインでetcdのデータファイルを操作するツール)などに分かれています。サーバー本体はRaftによるログ複製でクラスタ内の合意を形成し、MVCC(マルチバージョン同時実行制御)ベースのストレージにコミット済みエントリを適用することで、強一貫性のある読み書きを提供します。DockerfileはリリースされたビルドバイナリをGoogleのdistrolessイメージに配置するだけの構成で、実際のビルドはMakefileやCI(.github/workflows)が担っています。CHANGELOGやTHREAT_MODEL.md、postmortems(v3.5データ不整合事例)など、運用上の注意点がドキュメント化されている点も特徴です。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    まずMakefileのmake buildを実行すると、Goのマルチモジュール(api, client/pkg, client/v3, server等)が順にビルドされ、bin配下にetcd・etcdctl・etcdutlバイナリが生成されるのを確認できます。

  2. STEP 02

    ./bin/etcdでシングルノードを起動すると、デフォルトで2379(クライアント)と2380(ピア)ポートで待ち受け、ログにRaftのリーダー選出やクラスタID情報が出力されます。

  3. STEP 03

    etcdctl put/getコマンドでキーを書き込み・読み出しすると、gRPC経由でetcdserverにリクエストが届き、応答としてリビジョン番号付きの値が返るのを目にします。

  4. STEP 04

    Documentation/contributor-guide/local_cluster.mdの手順に沿って複数ノードを起動すると、Raftのリーダー選出ログとフォロワーの追従状況がターミナルに流れ、クラスタの合意形成過程を体感できます。

  5. STEP 05

    etcdutlを使ってスナップショットファイルを直接操作すると、稼働中のクラスタに接続せずオフラインでデータ整合性の検査や復元ができることが分かります。

  6. STEP 06

    CHANGELOG/READMEやTHREAT_MODEL.mdを読むと、v3.5系での既知のデータ破損問題(高負荷下でのプロセスkill時)とその対処バージョンが明記されており、本番導入前に必読であることに気づきます。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

ビルドすればetcd(サーバー本体)、etcdctl(操作用CLI)、etcdutl(オフラインデータ操作ツール)の3つの実行可能バイナリが手に入り、単体または複数ノードのRaftベース分散KVクラスタをローカルで動かして読み書き・Watch・スナップショット操作を試せます。また、api/etcdserverpb等のgRPC定義から自分のアプリ用クライアントを生成する土台にもなります。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

README(本体)はCHANGELOGルールのみを掲載する断片であり、実際のインストール手順やクイックスタートは別ページ(Documentation配下)に依存しているため、提供情報だけでは全体像がやや掴みにくいです。

02

v3.5.0〜v3.5.2には高負荷下でプロセスがkillされた際にデータ不整合が生じる既知の重大バグがあり、本番では必ずv3.4.22+またはv3.5.6+以降を使う必要があります。

03

マルチモジュール構成(api, client/pkg, client/v3, cache, etcdctl, etcdutl等がそれぞれ独自go.mod)のため、ローカルでのビルド・依存関係解決がやや複雑になりやすいです。

04

本番運用にはRaftやMVCCの仕組み、クラスタのメンバーシップ変更、ディスクI/O性能要件などの理解が前提となり、単純なKVストアとして気軽に使うにはやや専門知識が必要です。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

Kubernetesの背後で実際に使われているような、強一貫性が必須の分散システム基盤(サービスディスカバリ、設定管理、リーダー選出など)を必要とするエンジニアに向いています。CNCFプロジェクトとして長年の実運用実績とCHANGELOG・postmortem・THREAT_MODELなど運用ドキュメントが充実しており、ファイル構成(api/client/etcdctl/etcdutl/cacheの分離、Raft+MVCCという設計)からも成熟した分散データベースであることが読み取れるため、実際にインストールしなくても、ここに示した構造とドキュメントの記述だけで信頼性の高い判断ができます。ただし既知のバージョン別データ破損リスクだけは必ず確認してから採用すべきです。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する