Cluster Bootstrapping¶
HARPを使用オーダーには、最小限のメタデータがDCSに存在する必要があります。クラスターを「ブートストラップ」するプロセスとは、本質的に、ノード、場所、およびその他のランタイム構成を一度に、またはリソースごとに初期化することを意味します。
このプロセス全体は、harpctl applyコマンドによって管理されます。詳細については、 harpctl docs を確認してください。
このセクションでは、DCSがセットアップされ機能していることを前提としています。
重要
このドキュメントの例は、セクションごとにブートストラップを行う必要があることを示していますが、そうではありません。これらのいずれかまたはすべてを1つのYAMLドキュメントに結合し、一度にすべて適用することができます。説明と簡略化のために、これらのセクションを単純に分割します。
クラスター全体のブートストラップ¶
一部の設定はクラスタ全体に適用され、ブートストラップ中に指定できます。現在、これはevent_sync_intervalランタイムディレクティブにのみ適用されますが、他のものは後で追加される可能性があります。
このフォーマットは次のとおりです。
cluster:
name: mycluster
event_sync_interval: 100
そのファイルの名前付けがcluster.ymlであると仮定すると、次のように適用します。
harpctl apply cluster.yml
クラスター名前がDCS内でまだ定義されていない場合、これもその値を初期化します。
場所のブートストラップ¶
すべてのHARPノードは、最大で1つのロケーションに関連付けられます。このロケーションは、単一のデータセンター、マルチプルの基礎となるサーバーで構成されるグループ化されたリージョン、Amazonアベイラビリティーゾーンなどです。これは、 HARPがノードをグループ化して、そのロケーションのノードをリードマスターとして表すことができるようにするロジカル構造にすぎません。
したがって、1つ以上の場所を初期化する必要があります。このフォーマットは次のとおりです。
cluster:
name: mycluster
locations:
- location: dc1
- location: dc2
そのファイルの名前付けがlocations.ymlであると仮定すると、次のように適用します。
harpctl apply locations.yml
クラスターの操作を実行するときは、名前をプリアンブルとして含めて、変更が適切な場所に送られるようにしてください。
ロケーションがブートストラップされると、簡単な検査で表示されます。
> harpctl get locations
Cluster Location Leader Previous Leader Target Leader Lease Renewals
------- -------- ------ --------------- ------------- --------------
mycluster dc1 <nil>
mycluster dc2 <nil>
ここに見られるように、両方の場所はHARPによって認識され、ノードとプロキシの割り当てに使用できます。
ノードのブートストラップ¶
HARPノードは名前付けクラスター内に存在し、指定された名前を持つ必要があります。これを超えて、他のすべての設定は動的であり、 HARPがそれらと対話する方法に影響を与える可能性があるため、DCS自分自身内に保持されます。このため、各ノードは、 設定 の文書で説明されている1つ以上のランタイム指示子を使用してブートストラップする必要があります。
ノードのブートストラップ中に、いくつかの必須フィールドがあります。
namelocationdsnpg_data_dir
その他はすべてオプショナルであり、クラスター自分自身に依存する場合があります。一度にマルチプルのノードをブートストラップすることが可能であるため、一般的にこのフォーマットは次の構造に適合します。
cluster:
name: mycluster
nodes:
- name: node1
location: dc1
dsn: host=node1 dbname=bdrdb user=postgres
pg_data_dir: /db/pgdata
leader_lease_duration: 10
priority: 500
そのファイルの名前付けがnode1.ymlであると仮定すると、次のように適用します。
harpctl apply node1.yml
ノードがブートストラップされると、簡単な検査で表示されます。
> harpctl get nodes
Cluster Name Location Ready Fenced Allow Routing Routing Status Role Type Lock Duration
------- ---- -------- ----- ------ ------------- -------------- ---- ---- -------------
mycluster bdra1 dc1 true false true ok primary bdr 30
プロキシブートストラップ¶
ロケーションやノードとは異なり、プロキシは、ロケーション内のすべてのプロキシに適用される構成テンプレートを提供することもできます。これらは、globalの指定でDCSに保存されます。各プロキシにはインスタンスとして存在する名前も必要ですが、特定の設定が特定のオーバーライドをニーズとしない限り、それ以上のカスタマイズは必要ありません。
これは、クラスターのデフォルトの構成設定が同じであるプロキシがマルチプル存在する可能性が高いため、すべてのプロキシに対してこれらの値を繰り返す必要はないためです。
さらに、プロキシテンプレートをブートストラップする場合、接続の割り当て用に少なくとも1つのデータベースを定義する必要があります。これらの注意事項を念頭に置いて、このフォーマットは次のとおりです。
cluster:
name: mycluster
proxies:
monitor_interval: 5
default_pool_size: 20
max_client_conn: 1000
database_name: bdrdb
instances:
- name: proxy1
- name: proxy2
default_pool_size: 50
これにより、2つのプロキシproxy1とproxy2のHARPが構成され、proxy2のみがカスタムdefault_pool_sizeを持ち、それ以外の場合はグローバル設定を使用します。
そのファイルの名前付けがproxy.ymlであると仮定すると、次のように適用します。
harpctl apply proxy.yml
プロキシテンプレートがブートストラップされると、簡単な検査で表示されます。
> harpctl get proxies
Cluster Name Pool Mode Auth Type Max Client Conn Default Pool Size
------- ---- --------- --------- --------------- -----------------
mycluster global session md5 1000 20
mycluster proxy1 session md5 1000 20
mycluster proxy2 session md5 1000 50