こんにちは、GMOインターネット株式会社の長谷川泰斗です。今回は Kubernetes には欠かすことのできない etcd の仕組みや動作について語っていこうと思います。
etcd とは
あの車についてるやつだよね、、、、違います。ソースコードを自動でビルドして配布するあれだよね、、、、違います、CI/CD でもありません。
etcd とはオープンソースの分散型キーバリューストア(key-value store)で以下の特徴を持ちます。・一貫性と高可用性・1秒あたり1万回の書き込みが可能
一貫性と高可用性ではetcdの一貫性と高可用性について
etcdは、分散システムにおいて非常に重要な役割を担うキーバリューストアです。その特徴として、高い一貫性と高可用性が挙げられます。これらの特徴が、etcdがKubernetesなどの大規模な分散システムで広く利用されている理由です。
一貫性について
etcdは、強い一貫性を保証するよう設計されています。これは、etcdの全てのノードが、常に同じ最新のデータを持っていることを意味します。どのようなノードからデータを読み取っても、常に同じ結果が得られるということが保証されており、実際にバックアップからのレストアにおいてもどの etcd ノードからダンプしたバックアップファイルでも正常にクラスタ全体を復旧できることに繋がっています。
1秒あたり1万回の書き込みが可能
etcdは、複数のノード間で合意形成を行うためにRaftコンセンサスアルゴリズムを採用しています。このアルゴリズムは、etcdの性能に大きく影響を与える要素の一つです。Raftでは、リーダー選出手順が効率化されており、書き込み性能への影響を最小限に抑えています。また、etcdは、キーバリューストアであり、シンプルなデータ構造を採用しています。このシンプルなデータ構造は、高速なアクセスを可能にし、メモリ内キャッシュも高速アクセスに寄与しています。
etcdの動作(一貫性の理解)
基本的な概念として etcd クラスタのそれぞれのノードは raft アルゴリズムにより leader と follower の役割どちらかの役割を行います、 leader をやりつつ follower をやるといったブラックなお仕事はしません、そして leader の役割は etcd クラスタ内部で必ず 1 つの etcd ノードしか担当できず残りの etcd ノードは全て follower になります。leader ノードだけが書き込みを調整して、キーと値のペアを etcd クラスターに記録できます。
etcd は snapshot, Write Ahead Log (WAL), boltdb, gRPC Server を内包しています。etcd に対する変更は WAL にログをコミットされ、その後 boltdb に書き込まれます、この際に WAL に書き込みを続けていると WAL のサイズが大きくなるので etcd は定期的に snapshot を取ることで WAL のサイズを縮小します。gRPCサーバー はクライアントからの gRPC を利用したリクエストを高速かつ安全に処理します。
実際にキーバリューのデータを保持するのは boltdb で、Go言語で実装されシンプルかつ高速なキーバリューストアを実現しています。boltdb の B+ ツリー構造による高速なアクセス、トランザクション機能によるデータの整合性確保など、etcdの信頼性と性能に大きく貢献しています。
ここからは図を交えて説明します。
まずクライアントは書き込みのリクエストを出します 。
follower にリクエストした場合には leader に書き込みのリクエストがプロキシされます、leader にリクエストした場合にはプロキシされずに処理されます。
次に leader は WAL にキーバリューエントリをコミットします。
leader は他の follower に キーバリューエントリ に変更が有ったことを通知します。
follower は WAL にキーバリューエントリをコミットします。
follower は leader に WAL への書き込みが完了したことを通知します。
follower からの WAL 書き込み完了通知後に leader は boltdb に実際にキーバリューエントリをコミットします。
leader は boltdb にキーバリューエントリが書き込まれたことを follower に通知します。
follower は通知を受けたあとに boltdb にキーバリューエントリを書き込みます
まとめ
etcd の書き込みフローを知ることで、今回はデータの一貫性がどのように支えられているのかを知ることができました、次回については実際に etcd クラスタのバックアップ、レストアを通して運用の基礎を学びましょう。