はじめに

Verticaには、データベースのデータを冗長化させるための機能があります。
当記事では、この冗長化機能を提供する「Buddy Projection」と「K-safety」についてご紹介します。

Buddy Projection(バディ・プロジェクション)とは

Verticaには、Buddy Projection(バディ・プロジェクション)と呼ばれるプロジェクションがあります。
Buddy Projectionとは、セグメンテーション化(分散化)されたプロジェクションのレプリカのことです。

以下にBuddy Projectionを図解します。
説明の途中に「K-Safety」が出てきますが、「K-Safety」については後述します。

この図では、セグメンテーション化(分散化)された状態を示しています。
3台のノードにセグメンテーション化された1つのプロジェクション(水色の帯)があります。そのプロジェクションの中にソースデータがAとBとCに分割され、各ノードに分散配置された状態を示しています。
データの冗長化はされていません。
k-safety

次の図では、K-Safetyを1に指定した場合のBuddy Projectionの状態を示しています。
上図で示した分散化されたプロジェクション(水色の帯)の状態は同じですが、レプリカとしてBuddy Projection(ピンクの帯)が存在する点が異なります。
下図のように、ノード1で持っているデータAの複製(データA#)をノード2に持たせます。同様に、ノード2で持っているデータBの複製(データB#)をノード3に持たせます。
このようにして、ノード1が障害でダウンしてしまっても、データAの複製をノード2が持っている事からデータの整合性を保つ事ができます。
k-safety2

K-Safetyとは

K-Safetyとは、データベースクラスタ内のフォールトトレランスの尺度で、数値で指定します。
K-Safetyの値は、データベースクラスタ内に存在するデータベース内のデータのレプリカ数を示し、0、1、2が指定できます。これらのレプリカは、ノード障害が発生してもデータの整合性を確保できるように他のノードが引き継ぎます。
もし、K-Safetyの値よりも多くのノード数で障害が発生すると、データベース内のデータの一部が利用できなくなる可能性があります。その場合、データベースは安全ではないとみなされ、自動的にシャットダウンされます。

例えば、Verticaクラスタが3台のノードで構成されていて、K-Safetyが1に設定されている場合は、
1台のノード障害までは耐えられます。2台以上のノード障害が発生した場合は、自動的にシャットダウンされます。

K-SafetyとVerticaクラスタノード数の関係

K-Safetyに必要なVerticaクラスタの最小ノード数を以下に記載します。
K-Safetyを1以上に設定するには、少なくとも3台のノードで構成する必要があります。
また、Verticaクラスタが1台構成の場合にはK-Safetyは0(ゼロ)しか設定する事ができず、データに冗長性を持たせる事ができません。
K-Safetyレプリカ数最小ノード数
00個1台
11個3台
22個5台


このように、K-Safetyで指定した数だけBuddy Projection(レプリカ)が作成され、データの冗長性を持たせる事ができます。

参考情報

セグメンテーションとレプリケーションの概要