第3章 信頼性の高い etcd パフォーマンスとスケーラビリティーの確保
etcd で最適なパフォーマンスを確保するには、ノードのスケーリング、リーダーの選出、ログのレプリケーション、チューニング、レイテンシー、ネットワークジッター、ピアのラウンドトリップ時間、データベースサイズ、Kubernetes API トランザクションレートなど、パフォーマンスに影響する条件を理解することが重要です。
3.1. etcd のリーダー選出とログレプリケーション リンクのコピーリンクがクリップボードにコピーされました!
etcd は、複製されたノードのクラスターとして動作する、一貫性のある分散型キー値ストアです。etcd は、Raft アルゴリズムに従って 1 つのノードをリーダーとして、他のノードをフォロワーとして選出することで動作します。リーダーは、システムの現在の状態を維持し、フォロワーが最新であることを確認します。
リーダーノードはログのレプリケーションを実行します。クライアントからの受信書き込みトランザクションを処理し、Raft ログエントリーを書き込み、それをフォロワーにブロードキャストします。
kube-apiserver などの etcd クライアントが、値の書き込みなどのクォーラムを必要とするアクションを要求している etcd メンバーに接続すると、その etcd メンバーがフォロワーである場合は、トランザクションをリーダーに送信する必要があることを示すメッセージを返します。
etcd クライアントが、クォーラムを必要とするアクションをリーダーに要求すると、リーダーはクライアントの接続を開いたまま、ローカルの Raft ログを書き込み、そのログをフォロワーにブロードキャストし、過半数のフォロワーからログが正常にコミットされたことを確認するまで待機します。その後、リーダーは etcd クライアントに完了通知を送信し、セッションを終了します。フォロワーから失敗通知を受信し、過半数が合意に達することができなかった場合、リーダーはクライアントにエラーメッセージを返し、セッションを閉じます。