クラスター
DB Branch は 1 台でも動きますが、3 台以上でクラスターを組むと、1 台が停止しても使い続けられます。クラスターの状態は Raft で全ノードに共有されるため、どのノードからでも操作できます。Snapshot もノード間で複製されます。
Raft の書き込みは、投票権を持つノードの過半数が応答するまで待ちます。投票ノードが偶数台の場合、1 台少ない奇数台と比べて耐えられる故障の数は増えません。また、半数ずつに分断されると、どちらの側も過半数に届かず書き込めなくなります。そのため DB Branch は、投票ノードを奇数台、最大 5 台(1、3、5 台)に制限しています。それ以外のノードは非投票ノードになります。非投票ノードもログを受け取ってデータをすべて保持しますが、リーダーの選出や過半数の計算には加わりません。
投票ノードへの昇格と降格は自動で行われます。新しく参加したノードは非投票ノードとして始まり、正常な状態がしばらく続くと投票ノードに昇格します。各ノードが投票ノードかどうかは、db-branch cluster status で確認できます。
クラスターを作る
Section titled “クラスターを作る”最初のノードで、root 権限で次のコマンドを実行します。
sudo db-branch cluster initdb-branch cluster token追加するノードでは、パッケージをインストールして db-branch init --pool <pool> を実行したあと、次のコマンドでクラスターに参加します。
sudo db-branch cluster join <first-node>:7070 --token <token>メンバーとリーダーは、次のコマンドで確認できます。
db-branch cluster statusノードごとに、役割(leader または follower)、投票ノードかどうか、状態、プールの空き容量、インストール済みのエンジン、バージョンが表示されます。新しいトークンを発行すると、それまでのトークンは使えなくなります。
クラスターでの動作
Section titled “クラスターでの動作”- Branch は、Base の Snapshot を持つノードの中から、負荷を見て配置先が決まります。
--nodeで配置先を指定することもできます。 runtime installは、常にクラスター全体にインストールします。- どのノードの ProxySQL に接続しても、すべての Branch にアクセスできます。詳しくはBranch への接続を参照してください。
- リーダーが不在の間、クラスターの状態を変更する操作は
503 no_leaderを返します。既存の Branch への接続は止まりません。 - ノードが失われた場合、そのノードにあった Branch は
branch recreateで別のノードに作り直せます。
ノード間の通信には、7070 番ポート(ノード間 API、相互 TLS)と 7071 番ポート(Raft)を使います。Web コンソールと外部向けの API は 7080 番ポートです。