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.driverdcs.endpointscluster.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キューが完全に適用されるまでクライアントトラフィックを一時的に無効にします。
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` レベルでのみ有効または無効にできます。後のバージョンでは、個々のノードまたはプロキシに対してこれを行うこともできます。