harpctl command-line tool

harpctl は、コンセンサスレイヤーのコンテンツを直接操作して、目的のクラスタージオメトリに合わせるためのコマンドラインツールです。これを使用して、ノードのステータスを調べたり、ノードをリードマスターに「昇格」させたり、クラスター管理を無効/有効にしたり、クラスター設定をブートストラップしたりすることができます。

概要

$ harpctl --help

Usage:
  harpctl [command]

Available Commands:
  apply       Command to set up a cluster
  completion  generate the autocompletion script for the specified shell
  fence       Fence specified node
  get         Command to get resources
  help        Help about any command
  manage      Manage Cluster
  promote     Promotes the sepcified node to be primary,
  set         Command to set resources.
  unfence     unfence specified node
  unmanage    Unmanage Cluster
  version     Command to get version information

Flags:
  -c, --cluster string       name of cluster.
  -f, --config-file string   config file (default is /etc/harp/config.yml)
      --dcs stringArray      Address of dcs endpoints. ie: 127.0.0.1:2379
  -h, --help                 help for harpctl
  -o, --output string         json, yaml.
  -t, --toggle               Help message for toggle

Use "harpctl [command] --help" for more information about a command.

この基本的な概要に加えて、使用可能な各コマンドには、独自のシリーズの許可されたサブコマンドとフラグがあります。

構成

harpctl は、動作するためにコンセンサスレイヤーと対話する必要があります。これは、正常に実行するには、 config.yml で特定の最小量の設定を定義する必要があることを意味します。これには以下が含まれます。

  • dcs.driver

  • dcs.endpoints

  • cluster.name

etcdを使用した例:

cluster:
  name: mycluster
dcs:
  driver: etcd
  endpoints:
    - host1:2379
    - host2:2379
    - host3:2379

詳細は 構成ファイルの指定 を参照してください。

実行

次のように harpctl を実行します。

harpctl command [flags]

各コマンドには、独自のシリーズのサブコマンドとフラグがあります。次のコマンドを実行すると、これらのヘルプを利用できます。

harpctl <command> --help

harpctl apply

apply コマンドを使用して、目的のクラスターのさまざまな属性を定義するファイルを使用してHARPクラスターを「ブートストラップ」する必要があります。

次のようなapply コマンドを実行します。

harpctl apply <filename>

これにより、基本的に、初期クラスターメタデータ、デフォルトまたはカスタムの管理設定などがすべて作成されます。これは、DCSがクラスターを管理するための最終的なソースとして使用され、これらの設定を動的に変更できるためです。

これは、クラスター全体をブートストラップするために1回、オブジェクトのタイプごとに1回、または簡単にするためにノードごとに実行できます。

これは、単一ノードのブートストラップファイルの例です。

cluster:
  name: mycluster
nodes:
  - name: firstnode
    dsn: host=host1 dbname=bdrdb user=harp_user
    location: dc1
    priority: 100
    db_data_dir: /db/pgdata

ここで見られるように、複数の環境が同じ環境で動作している場合、すべての変更が正しいHARPクラスタをターゲットと保証に、常にクラスタ名前のプリアンブルを含めることをお勧めします。

apply がエラーなしで完了すると、ノードはクラスターの残りの部分と統合されます。

注釈

定義されたすべてのセクションが同時に適用されるため、このコマンドを使用してクラスター全体を一度にブートストラップすることもできます。ただし、初期定義中にクラスターの各部分を検証するのが難しくなるため、テスト以外でのこの使用はお勧めしません。

harpctl fence

ローカルまたは指定されたノードをフェンス済みとしてマークします。このステータスのノードは、基本的にクラスターから完全に除外されます。 HARPプロキシはトラフィックを送信せず、その代表的なHARPマネージャーはリードマスターリースを要求せず、さらなる手順も実行されます。実行されている場合、 HARP ManagerはノードでPostgresも停止します。

次のようなfence コマンドを実行します。

harpctl fence (<node-name>)

node-nameはオプションです。省略された場合、 harpctl はローカルに構成されたノードの名前を使用します。

harpctl get

クラスターのさまざまな要素のコンセンサスレイヤーに保存されている情報を取得します。これには、ノード、場所、クラスターなどが含まれます。完全なリストには次のものが含まれます。

  • cluster —クラスターの状態を返します。

  • leader —現在または指定されたロケーションリーダーを返します。

  • location —現在または指定された場所情報を返します。

  • locations —すべてのロケーションのリストを返します。

  • node —指定されたPostgresノードを返します。

  • nodes —すべてのPostgresノードのリストを返します。

  • proxy —現在のプロキシ情報または指定されたプロキシ情報を返します。

  • proxies —すべてのプロキシノードのリストを返します。

harpctl get cluster

現在のクラスターのコンセンサスレイヤーに保存されている情報を取得します。

> harpctl get cluster

Name      Enabled
- ---      -------
mycluster true

harpctl get leader

指定された場所のDCSに保存されている現在のリードマスターのノード情報を取得します。ロケーションが渡されない場合、 harpctl は、実行された現在のノードのロケーションに基づいてそれを導き出そうとします。

例:

> harpctl get leader dc1

Cluster   Name   Ready Role    Type Location Fenced Lock Duration
- ------   ----   ----- ----    ---- -------- ------ -------------
mycluster mynode true  primary bdr  dc1      false  30

harpctl get location

指定された場所の場所情報を取得します。ロケーションが渡されない場合、 harpctl は、実行された現在のノードのロケーションに基づいてそれを導き出そうとします。

例:

> harpctl get location dc1

Cluster   Location Leader Previous Leader Target Leader Lease Renewals
- ------   -------- ------ --------------- ------------- --------------
mycluster dc1      mynode mynode                        <nil>

harpctl get locations

DCSに現在存在するすべてのロケーションの情報を取得します。

例:

> harpctl get locations

Cluster   Location Leader   Previous Leader Target Leader Lease Renewals
- ------   -------- ------   --------------- ------------- --------------
mycluster dc1      mynode   mynode                        <nil>
mycluster dc2      thatnode thatnode                      <nil>

harpctl get node

指定されたノードのDCSに格納されているノード情報を取得します。

例:

> harpctl get node mynode
Cluster    Name   Location Ready Fenced Allow Routing Routing Status Role    Type Lock Duration
- ------    ----   -------- ----- ------ ------------- -------------- ----    ---- -------------
mycluster  mynode dc1      true  false  true          ok               primary bdr  30

harpctl get nodes

クラスター内のすべてのノードのDCSに格納されているノード情報を取得します。

例:

> harpctl get nodes

Cluster    Name  Location Ready Fenced Allow Routing Routing Status Role    Type Lock Duration
- ------    ----  -------- ----- ------ ------------- -------------- ----    ---- -------------
myclusters bdra1 dc1      true  false  true          ok             primary bdr  30
myclusters bdra2 dc1      true  false  false         N/A            primary bdr  30
myclusters bdra3 dc1      true  false  false         N/A            primary bdr  30

harpctl get proxy

指定されたプロキシのDCSに格納されているプロキシ情報を取得します。このクラスターのプロキシのデフォルトを表示するには、 global を指定します。

例:

> harpctl get proxy proxy1

Cluster   Name   Pool Mode Auth Type Max Client Conn Default Pool Size
- ------   ----   --------- --------- --------------- -----------------
mycluster proxy1 session   md5       1000            20

harpctl get proxies

クラスター内のすべてのプロキシのDCSに保存されているプロキシ情報を取得します。さらに、デフォルトのプロキシ設定のglobal 擬似プロキシをリストします。

例:

> harpctl get proxies

Cluster   Name   Pool Mode Auth Type Max Client Conn Default Pool Size
- ------   ----   --------- --------- --------------- -----------------
mycluster global session   md5       500             25
mycluster proxy1 session   md5       1000            20
mycluster proxy2 session   md5       1500            30

harpctl manage

クラスターが管理状態にない場合、Postgresのモニタリングとコンセンサスレイヤーの更新を再開するようにすべてのHARP Managerサービスに指示します。これは、 HARPソフトウェアの更新またはクラスター全体に影響を与える可能性のあるその他の重要な変更に続いて、メンテナンスが完了した後に実行します。

次のようなmanage コマンドを実行します。

harpctl manage cluster

注釈

現在、クラスター管理は`cluster` レベルでのみ有効または無効にできます。後のバージョンでは、個々のノードまたはプロキシに対してこれを行うこともできます。

harpctl promote

リーダーシップ要件を満たす次の利用可能なノードを現在の場所のリードマスターに昇格させます。これは要求されたイベントであるため、次の場合にスムーズなハンドオーバーを呼び出します。

1.既存のリードCAMOがリードCAMOリースをCAMOする。 -古いリードマスターと昇格したノード間のレプリケーションラグはnode.maximum_lag 未満です。

2.昇格したノードは、リードマスターリースを取得する唯一の有効な候補であり、現在の所有者によって解放されるとすぐに取得します。他のすべてのノードは、設定されていないリードマスターリースを無視します。 CAMOが有効になっている場合、昇格したノードは、リードマスターリースを保持していても、 CAMOキューが完全に適用されるまでクライアントトラフィックを一時的に無効にします。

  1. HARPプロキシは、pgbouncerを使用している場合、進行中のトランザクションを完了できるようにPAUSE 接続します。昇格したノードがリードマスターリースを要求すると、新しい接続ターゲットのPgBouncerを再構成し、データベーストラフィックを再開します。 HARPプロキシがビルトインプロキシを使用している場合、クライアントから新しい接続が要求されると、既存の接続を終了し、リードマスターへの新しい接続を作成します。

次のようなpromote コマンドを実行します。

harpctl promote (<node-name>)

リードマスターになるための基準を満たさない場合でも、ノードを強制的にリードマスターに設定する--force オプションを提供します。これにより、 CAMOステータスまたはレプリケーションラグの検証が回避され、昇格したノードに即時に移行されます。これは、昇格するノードを正確に指定する唯一の方法です。

これを成功させるには、ノードがオンラインで動作している必要があります。このオプションは注意して使用してください。

harpctl set

クラスター内の特定の属性を指定された値に設定します。これは、 apply を使用するのではなく、特定のノード、プロキシ、場所、またはクラスターの構成設定を調整するために使用されます。これは、次のオブジェクトタイプに使用できます。

  • cluster —クラスター関連の属性を設定します。

  • location —特定のロケーション属性を設定します。

  • node —特定のノード属性を設定します。

  • proxy —特定のプロキシ属性を設定します。

harpctl set cluster

クラスター関連の属性のみを設定します。

例:

harpctl set cluster event_sync_interval=200

harpctl set node

指定されたノードのノード関連の属性を設定します。ここでは、 Node directives に記載されているオプションが有効です。

例:

harpctl set node mynode priority=500

harpctl set proxy

名前付けたプロキシのプロキシ関連の属性を設定します。

Proxy directives に記載されているオプションはここで有効です。この方法で設定されたプロパティでは、新しい値を有効にする前にプロキシを再起動する必要があります。

例:

harpctl set proxy proxy1 max_client_conn=750

クラスター全体のプロキシのデフォルトには global を使用します。

harpctl set proxy global default_pool_size=10

harpctl unfence

ローカルまたは指定されたノードからfenced 属性を削除します。これにより、以前に適用されたすべてのクラスター除外がノードから削除され、再びトラフィックを受信したり、リードマスターリースを保持したりできます。 Postgresも実行されていない場合は起動されます。

次のようなunfence コマンドを実行します。

harpctl unfence (<node-name>)

node-nameはオプションです。省略すると、 harpctl はローカルに構成されたノードの名前を使用します。

harpctl unmanage

クラスター内のすべてのHARP Managerサービスに、実行を継続するように指示しますが、Postgresをアクティブに監視したり、コンセンサスレイヤーのコンテンツを変更したりします。これは、ノードの停止などの通常のフェイルオーバーイベントが原因でリーダーシップの移行が行われないことを意味します。これは、 HARPソフトウェアに変更を加える前またはクラスターにその他の重要な変更を加える前のシステムまたはHARPのメンテナンスを対象としています。

次のようなunmanage コマンドを実行します。

harpctl unmanage cluster

注釈

現在、クラスター管理は`cluster` レベルでのみ有効または無効にできます。後のバージョンでは、個々のノードまたはプロキシに対してこれを行うこともできます。