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.driverdcs.endpointscluster.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ことも可能になります。