etcd-io/etcdは、分散システムの最も重要なデータを保存するための分散型・信頼性の高いキー・バリューストアです。Raftコンセンサスアルゴリズムを用いて複数ノード間でデータを複製し、Kubernetesのメタデータストアなど強い一貫性が要求される用途で広く使われています。
リポジトリは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データ不整合事例)など、運用上の注意点がドキュメント化されている点も特徴です。
- STEP 01
まずMakefileのmake buildを実行すると、Goのマルチモジュール(api, client/pkg, client/v3, server等)が順にビルドされ、bin配下にetcd・etcdctl・etcdutlバイナリが生成されるのを確認できます。
- STEP 02
./bin/etcdでシングルノードを起動すると、デフォルトで2379(クライアント)と2380(ピア)ポートで待ち受け、ログにRaftのリーダー選出やクラスタID情報が出力されます。
- STEP 03
etcdctl put/getコマンドでキーを書き込み・読み出しすると、gRPC経由でetcdserverにリクエストが届き、応答としてリビジョン番号付きの値が返るのを目にします。
- STEP 04
Documentation/contributor-guide/local_cluster.mdの手順に沿って複数ノードを起動すると、Raftのリーダー選出ログとフォロワーの追従状況がターミナルに流れ、クラスタの合意形成過程を体感できます。
- STEP 05
etcdutlを使ってスナップショットファイルを直接操作すると、稼働中のクラスタに接続せずオフラインでデータ整合性の検査や復元ができることが分かります。
- STEP 06
CHANGELOG/READMEやTHREAT_MODEL.mdを読むと、v3.5系での既知のデータ破損問題(高負荷下でのプロセスkill時)とその対処バージョンが明記されており、本番導入前に必読であることに気づきます。
ビルドすればetcd(サーバー本体)、etcdctl(操作用CLI)、etcdutl(オフラインデータ操作ツール)の3つの実行可能バイナリが手に入り、単体または複数ノードのRaftベース分散KVクラスタをローカルで動かして読み書き・Watch・スナップショット操作を試せます。また、api/etcdserverpb等のgRPC定義から自分のアプリ用クライアントを生成する土台にもなります。
README(本体)はCHANGELOGルールのみを掲載する断片であり、実際のインストール手順やクイックスタートは別ページ(Documentation配下)に依存しているため、提供情報だけでは全体像がやや掴みにくいです。
v3.5.0〜v3.5.2には高負荷下でプロセスがkillされた際にデータ不整合が生じる既知の重大バグがあり、本番では必ずv3.4.22+またはv3.5.6+以降を使う必要があります。
マルチモジュール構成(api, client/pkg, client/v3, cache, etcdctl, etcdutl等がそれぞれ独自go.mod)のため、ローカルでのビルド・依存関係解決がやや複雑になりやすいです。
本番運用にはRaftやMVCCの仕組み、クラスタのメンバーシップ変更、ディスクI/O性能要件などの理解が前提となり、単純なKVストアとして気軽に使うにはやや専門知識が必要です。
Kubernetesの背後で実際に使われているような、強一貫性が必須の分散システム基盤(サービスディスカバリ、設定管理、リーダー選出など)を必要とするエンジニアに向いています。CNCFプロジェクトとして長年の実運用実績とCHANGELOG・postmortem・THREAT_MODELなど運用ドキュメントが充実しており、ファイル構成(api/client/etcdctl/etcdutl/cacheの分離、Raft+MVCCという設計)からも成熟した分散データベースであることが読み取れるため、実際にインストールしなくても、ここに示した構造とドキュメントの記述だけで信頼性の高い判断ができます。ただし既知のバージョン別データ破損リスクだけは必ず確認してから採用すべきです。