harpctl Command-line Tool

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

シンポシス

$ 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

詳細については、Configurationを参照してください。

実行

次のように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がエラーなしで完了すると、ノードはクラスターの残りの部分と統合されます。

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

harpctl fence

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

fenceコマンドは次のように実行する必要があります。

harpctl fence (<node-name>)

ノード名自分自身はオプショナル。省略すると、harpctlはローカルに構成されたノードの名前を使用します。

harpctl get

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

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

  • leader-現在または指定された位置リーダーを返します

  • location-現在または指定された位置情報を返す

  • locations-すべての場所のリストを返します

  • logs-DCSに記録された重要なイベントを返します

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

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

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

  • proxies-すべてのプロキシノードのリストを返す

harpctl get cluster

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

> harpctl get cluster

Name      Leader Previous Leader Enabled Lock Duration
----      ------ --------------- ------- -------------
mycluster                        true    30

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 logs

DCSに直接記録されたすべての重要なイベントを取得します。

例:

> harpctl get logs

Cluster   Time                                    Id  Source  Message
-------   ----                                    --  ------  -------
mycluster 2021-09-29 21:02:17.934711738 +0000 UTC 500 Manager mynode: manager started
mycluster 2021-09-29 21:05:19.869309853 +0000 UTC 500 Manager mynode: manager started
mycluster 2021-09-29 21:05:24.842886355 +0000 UTC 508 Manager mynode: attempting to start database
mycluster 2021-09-29 21:05:26.185850583 +0000 UTC 503 Manager mynode: setting as location leader with routing status ok

harpctl get node

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

例:

> harpctl get node mynode

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

harpctl get nodes

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

例:

> harpctl get nodes

Cluster   Name     Ready Role    Type Location Fenced Lock Duration
-------   ----     ----- ----    ---- -------- ------ -------------
mycluster mynode   true  primary bdr  dc1      false  30
mycluster thatnode true  primary bdr  dc2      false  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

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

manageコマンドは次のように実行する必要があります。

harpctl manage cluster

!!! Note * 現在、clusterレベルでのみクラスター管理を有効または無効にできます。それ以降のバージョンでは、個々のノードまたはプロキシに対してこれをmakeことも可能になります。

harpctl promote

ローカルまたは指定されたノードを現在の場所のリードマスターに昇格させます。これは要求されたイベントであるため、次の場合にスムーズなハンドオーバーを呼び出します。

1.次の場合、既存のリードマスターはリードマスターリースをリリースします。-CAMOが有効になっている場合、昇格されたノードは最新であり、 キューの準備ができている必要がより小さい。 -古いリードマスターとプロモートされたノード間のレプリケーションラグがより小さいです。昇格されたノードは、リードマスターリースを取得する唯一の有効な候補であり、現在のホルダーによってリリースされるとすぐに実行されます。他のすべてのノードは、未設定のリードマスターリースを無視します。 -CAMOが有効になっている場合、昇格されたノードは、リードマスターリースを保持していても、CAMOキューが完全に適用されるまで一時的にクライアントトラフィックを無効にします。 HARPプロキシはPAUSE接続を使用して、進行中のトランザクションを完了させます。リードマスターリースが昇格されたノードによって要求されると、PgBouncerを新しい接続ターゲット用に再構成し、データベーストラフィックを再開します。

promoteコマンドは次のように実行する必要があります。

harpctl promote (<node-name>)

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

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

harpctl set

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

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

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

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

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

harpctl set cluster

クラスター関連の属性のみを設定します。現時点ではこれらのうちの1つだけですが、 HARPの将来のバージョンではさらに追加される可能性があります。

例:

harpctl set cluster event_sync_interval=200

harpctl set location

ロケーション関連の属性のみを設定します。現時点ではこれらはありません。このコマンドを呼び出すと、認識されないオプションに関するエラーが発生します。

!!! Note * これは将来の機能のプレースホルダです。

harpctl set node

名前付けノードのノード関連属性を設定します。 Configuration文書の「Node Directives」セクションに記載されているオプションはすべてここで有効です。

例:

harpctl set node mynode priority=500

harpctl set proxy

名前付けプロキシのプロキシ関連属性を設定します。 Configuration文書の「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>)

ノード名自分自身はオプショナル。省略すると、harpctlはローカルに構成されたノードの名前を使用します。

harpctl unmanage

クラスター内のすべてのHARP Managerサービスに実行を継続するように指示しますが、 Postgresをアクティブにモニタことはなく、コンセンサスレイヤーの内容を変更することもできません。これは、ノードの停止などの通常のフェイルオーバーイベントが、リーダーシップの移行をもたらさないことを意味します。これは、システムまたはHARPのメンテナンスを目的としていますHARPソフトウェアに変更を加えるか、クラスターにその他の重要な変更を加える前に行う必要があります。

unmanageコマンドは次のように実行する必要があります。

harpctl unmanage cluster

!!! Note * 現在、clusterレベルでのみクラスター管理を有効または無効にできます。それ以降のバージョンでは、個々のノードまたはプロキシに対してこれをmakeことも可能になります。