全て クラス 名前空間 関数 変数 型定義 列挙型 列挙値 ページ
静的公開メンバ関数 | 全メンバ一覧
haNameResolver クラス

Transactd HA(高可用)運用のためホスト名リゾルバー (THNRと呼びます) [詳解]

#include <haNameResolver.h>

静的公開メンバ関数

static void addPortMap (short mysqlPort, short transactdPort)
 
static void clearPortMap ()
 
static const char * master ()
 
static const char * slave ()
 
static int start (const char *master, const char *slaves, const char *slaveHostsWithPort, short slaveNum, const char *userName, const char *password, int option=0)
 
static void stop ()
 

詳解

Transactd HA(高可用)運用のためホスト名リゾルバー (THNRと呼びます)

HA(高可用性)運用でマスターがフェイルオーバーする構成で、接続先のホスト名に代えて 役割名(master/slaveなど)の仮想ホスト名でアクセス可能にするホスト名解決関数ライブラリです。
このリゾルバーを正しく動作させるには、サーバー群がTransactd 高可用構成にて構成されている必要があります。
Transactd 高可用構成については「Transactd 高可用運用 (THA)」を参照してください。

THNRは、アプリケーションの先頭で haNameResolver::start() 関数を呼び出すことで有効になります。 有効にしたアプリケーションからデータベースをオープンする際のURIのホスト部には,実際のホスト名に代えて start() で指定したマスターまたはスレーブの仮想ホスト名を指定します。
以下の例は、仮想ホスト名に master1 という名前を使用した例です。

haNameResolver::start("master1", "slave1", "192.168.0.2","192.168.0.3", 0, "root", "abcd");
...
db->open("tdap://root@master1/db/test?pwd=abcd");

このように仮想ホスト名でアクセスすることで、実際のマスターが切り替わった場合でも正しく目的の機能を持つサーバー にアクセスすることができます。
クライアントライブラリ自身が名前解決することで、DNSやネットワーク機器など外部に依存することなくHA運用を可能にします。 クラウドサービスなど、外部機器に制約がある場合には特に有効です。

また、役割を確認することで、アクセス時にマスター切替を自動検出し、正しいサーバーにアクセスを自動的に切替えることができます。

関数詳解

static void addPortMap ( short  mysqlPort,
short  transactdPort 
)
static

MySQLレプリケーションで使用するポート番号とTrasnactdのポート番号の関連付けを登録します。
この関数を使用するのは、MySQLレプリケーションで使用するポート番号 デフォルト3306とTrasnactdのポート 番号 デフォルト8610を変更している場合のみです。MySQLレプリケーションで使用するポート番号を変更する場合 は、Trasnactdのポート番号も変更し、それぞれの対応付けをこの関数で指定します。

引数
mysqlPortMySQLのレプリケーションで使用するポート番号を指定します。
transactdPortmysqlPortで指定されたポートを使用するサーバーでの、Trasnactdのポート番号を指定します。
static void clearPortMap ( )
static

addPortMap() で登録したポート番号をクリアして無効にします。

static const char * master ( )
static

仮想マスター名に対するTHNRが解決した実ホスト名を返します。Transactdクライアント以外のライブラリから マスターにアクセスしたいときは、この関数で得られたホスト名を使って同じホストにアクセスすることができます。
但し、ここで返されたホスト名はキャッシュされた名前です。今現在マスターの役割を持っているかどうかのチェックは行われません。 ここで得られたホスト名でTransactdクライアント以外のライブラリからアクセスすることは、Transactd HA(高可用性)運用の適用外です。

static const char * slave ( )
static

仮想スレーブ名に対するTHNRが解決した実ホスト名を返します。Transactdクライアント以外のライブラリから マスターにアクセスしたいときは、この関数で得られたホスト名を使って同じホストにアクセスすることができます。
但し、ここで返されたホスト名はキャッシュされた名前です。今現在マスターの役割を持っているかどうかのチェックは行われません。 ここで得られたホスト名でTransactdクライアント以外のライブラリからアクセスすることは、Transactd HA(高可用性)運用の適用外です。

static int start ( const char *  master,
const char *  slaves,
const char *  slaveHostsWithPort,
short  slaveNum,
const char *  userName,
const char *  password,
int  option = 0 
)
static

THNRを開始します。

引数
masterマスター用の仮想ホスト名を指定します。実在しないホスト名であればどのような名前でも指定できます。使用可能な文字種は通常のホスト名と同様です。
slavesスレーブ用の仮想ホスト名を指定します。ホスト名のルールはmasterと同様です。カンマで区切って複数の仮想スレーブ名を指定することができます。
slaveHostsWithPortマスターとスレーブの実ホストを指定します。カンマで区切って複数指定できます。また、Transactdのポート番号をデフォルトから変更している場合はポート番号も合わせて指定します。(例 "host1:8611,host2:8612")
slaveNumslaveHostsWithPortで指定したスレーブの中でこのプログラムがデフォルトとして使用するスレーブを列挙順の番号で指定します。最初のホストは0です。
userNameTrasnactdのユーザー名を指定します。slaveHostsWithPortで指定したホストはすべてこのユーザー名でTrasanctdクライアントからアクセス可能でなければなりません。
passworduserNameに対するパスワードを指定します。
optionオプションを指定します。デフォルトは0です。オプションは以下の値をOR演算で複数指定できます。
  • 1 THNR_OPT_DISABLE_CALL_FAILOVER 障害を検出した際に、フェイルオーバープログラム haMgr の呼び出しを行いません。
  • 2 THNR_OPT_MASTER_CAN_CONCUR_SLAVE スレーブが検出できず、マスターのみの場合に、マスターはスレーブを兼任できるかどうかを指定します。 兼任できる場合は、スレーブの実ホストはマスターと同じホストを返します。
戻り値
  • 0 HNR_SUCCESS 正常に開始しました。
  • 1 HNR_SLAVE_HOSTS_NOT_FOUND スレーブホストが見つかりませんでした。マスターにはアクセスできます。
  • 2 HNR_INVALID_HOSTS マスター・スレーブともホストが見つかりません。
  • 3 HNR_REGISTER_FUNC_ERROR リゾルバー関数の登録に失敗しました。
注釈
この関数はアプリケーションの開始時に毎回呼び出す必要があります。 また、すべてのクライアントで必ず同じパラメータで呼び出してください。これはフェイルオーバー時のサーバーのロック順を同じに することで、デッドロックや予期しないエラーを防止するためです。
static void stop ( )
static

THNRを停止します。プログラムの終了時にこの関数を呼び出す必要はありません。

Transactd SDK 2018年07月31日(火) 19時40分36秒 doxygen