harpctl Command-line Tool

harpctlは、コンセンサスレイヤーのコンテンツを直接操作して、目的のクラスタージオメトリに合わせるためのコマンドラインツール。たとえば、ノードのステータスを調べたり、ノードを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

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

実行

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

harpctl command [flags]

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

harpctl command --help

harpctl apply

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

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

harpctl apply <filename>

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

これは、クラスター全体をブートストラップするために1回、オブジェクトのタイプごとに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

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

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

harpctl fence (<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`レベルでのみクラスター管理を有効または無効にできます。それ以降のバージョンでは、個々のノードまたはプロキシに対してこれをmakeことも可能になります。

harpctl promote

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

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

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 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>)

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

harpctl unmanage

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

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

harpctl unmanage cluster

注釈

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