EN JA
HAST.CONF(5)
HAST.CONF(5) FreeBSD File Formats Manual HAST.CONF(5)

名称

hast.confhastd(8) デーモンと hastctl(8) ユーティリティのための設定ファイル

解説

hast.conf ファイルは、 hastd(8) デーモンと hastctl(8) 制御ユーティリティの両方によって使用されます。設定ファイルは、両方の HAST ノードで正確に同じファイルを使用できる (そして、使用するべきである) 方法で設計されています。 # で始まるすべての行は、コメントとして扱われ、無視されます。

設定ファイル構文

hast.conf ファイルの一般的な構文は、次の通りです:

# Global section 
control <addr> 
listen <addr> 
replication <mode> 
checksum <algorithm> 
compression <algorithm> 
timeout <seconds> 
exec <path> 
metaflush on | off 
pidfile <path> 
 
on <node> { 
 # Node section 
        control <addr> 
        listen <addr> 
        pidfile <path> 
} 
 
on <node> { 
 # Node section 
        control <addr> 
        listen <addr> 
        pidfile <path> 
} 
 
resource <name> { 
 # Resource section 
 replication <mode> 
 checksum <algorithm> 
 compression <algorithm> 
 name <name> 
 local <path> 
 timeout <seconds> 
 exec <path> 
 metaflush on | off 
 
 on <node> { 
  # Resource-node section 
  name <name> 
  # Required 
  local <path> 
  metaflush on | off 
  # Required 
  remote <addr> 
  source <addr> 
 } 
 on <node> { 
  # Resource-node section 
  name <name> 
  # Required 
  local <path> 
  metaflush on | off 
  # Required 
  remote <addr> 
  source <addr> 
 } 
}

利用可能な様々な設定パラメータの大部分は、オプション (省略可能) です。パラメータが特定のセクションで定義されないなら、それは、親のセクションから継承されます。例えば、 listen パラメータがノードセクションで定義されないなら、それは、グローバルなセクションから継承されます。グローバルなセクションが listen パラメータで全く定義されない場合に、デフォルト値が、使用されます。

設定ファイル解説

ホスト名の最初の部分のみの gethostname(3) によって得られる完全なホスト名によって、 kern.hostuuid sysctl(8) 変数で見つけられるノードの UUID によって、または kern.hostid sysctl(8) 変数で見つけられるノードの hostid によってのいずれかで<node>引数を置き換えることができます。

次の文が利用可能です:

control <addr>

hastctl(8) と通信するためのアドレス。それぞれの次の例は、同じ制御アドレスを定義します:

uds:///var/run/hastctl 
unix:///var/run/hastctl 
/var/run/hastctl

デフォルト値は、 uds:///var/run/hastctl です。

pidfile <path>

メインの hastd(8) プロセスのプロセス ID を格納するファイル。

デフォルト値は、 /var/run/hastd.pid です。

listen <addr>

次の形式で listen (接続を受け付け) するアドレス:

protocol://protocol-specific-address

それぞれの次の例は、同じ listen (接続を受け付け) するアドレスを定義します:

0.0.0.0 
0.0.0.0:8457 
tcp://0.0.0.0 
tcp://0.0.0.0:8457 
tcp4://0.0.0.0 
tcp4://0.0.0.0:8457

複数の listen (接続を受け付け) アドレスを指定することができます。デフォルトで、 hastd は、カーネルがそれぞれ IPv4 と IPv6 をサポートするなら、 tcp4://0.0.0.0:8457tcp6://[::]:8457 を listen (接続を受け付け) します。

replication <mode>

複製モードは、次の 1 つであるべきです:

memsync

ローカルな書き込みが完了したとき、実際にデータを格納する前でなく、リモートノードがデータ受信を応答するとき、完了した書き込み操作を報告します。リモートノードのデータは、応答を送信する直後に格納されます。このモードは、レイテンシ (待ち時間) を減少させることを目的としていますが、まだたいへん良い信頼性を提供しています。いくらかのわずかなデータ量が失われる場合がある唯一の状況は、データがプライマリノードに保存され、セカンダリに送信されるる時です。次に、セカンダリノードは、データ受信を応答し、プライマリは、アプリケーションに成功を報告します。しかしながら、受信データが実際にローカルに格納される前に、セカンダリが落ちることが起こるかもしれません。セカンダリノードが返る前に、プライマリノードは、完全に死にます。セカンダリノードが生き返るとき、それは新しいプライマリになります。残念ながら、アプリケーションに格納されることを確認されるいくらかのわずかなデータ量が、失われました。そのような状況のリスクは、非常に低いです。 memsync 複製モードは、デフォルトです。

fullsync

リモートと同様にローカルな書き込みが完了するとき、完了したものとして書き込み操作をマークします。これは、最も安全で、最も遅い複製モードです。

async

書き込み操作は、ローカルな書き込み操作の後に、正しく完了したものとして報告されます。これは、最も速くて最も危険な複製モードです。このモードは、他のモードに対してレイテンシ (待ち時間) が高過ぎる遠方のノードに模写するとき、使用されるべきです。

checksum <algorithm>

チェックサムのアルゴリズムは、次の 1 つであるべきです:

none
チェックサムは、ネットワークを越えて送信されているデータに対して計算されません。これは、デフォルトの設定です。
crc32
CRC32 チェックサムが計算されます。
sha256
SHA256 チェックサムが計算されます。
compression <algorithm>

圧縮アルゴリズムは、次の 1 つであるべきです:

none
ネットワークを越えて送信される、圧縮されません。
hole
すべて 0 を含むブロックだけが、圧縮されます。これは、潜在的に多くのブロックがすべて 0 であるところで、初期の同期のためにたいへん役に立ちます。このアルゴリズムが使用されているとき、測定可能な性能のオーバヘッドがあるべきではありません。これは、デフォルトの設定です。
lzf
Marc Alexander Lehmann による LZF アルゴリズムは、ネットワークを越えて送信されるデータを圧縮するために使用されます。 LZF は、たいへん速い、汎用の圧縮アルゴリズムです。
timeout <seconds>

秒単位の接続タイムアウト。デフォルト値は、 20 です。

exec <path>

様々な HAST イベントで与えられたプログラムを実行します。以下は、与えられたプログラムが次のように実行される、現在、実装されているイベントと引数のリストです:

<path> role <resource> <oldrole> <newrole>

リソースの役割が変更されるとき、プライマリとセカンダリの両方のノードで実行されます。

<path> connect <resource>

ノードの間の与えられたリソースのための接続が確立されるとき、プライマリとセカンダリの両方のノードで実行されます。

<path> disconnect <resource>

ノードの間の与えられたリソースのための接続が失われたとき、プライマリとセカンダリの両方のノードで実行されます。

<path> syncstart <resource>

セカンダリノードの同期プロセスが開始されれるとき、プライマリノードで実行されます。

<path> syncdone <resource>

セカンダリノードの同期プロセスが成功して完了するとき、プライマリノードで実行されます。

<path> syncintr <resource>

たぶんノードの間のセカンダリノードの停止または接続失敗のためにセカンダリノードの同期プロセスが割り込まれるとき、プライマリノードで実行されます。

<path> split-brain <resource>

split-brain 状態が検出されるとき、プライマリとセカンダリの両方のノードで実行されます。

<path>引数は、実行形式プログラムへのフルパスを含むべきです。与えられたプログラムが 0 と異なったコードで終了するなら、 hastd は、エラーとしてそれをログ記録します。

<resource>引数は、設定ファイルからのリソース名です。

<oldrole>引数は、(変更前の) 前のリソースの役割です。次の 1 つを指定できます: init, secondary, primary

<newrole>引数は、(変更後の) 現在のリソースの役割です。次の 1 つを指定できます: init, secondary, primary

metaflush on | off

on に設定されるとき、すべてのメタデータ (activemap) が更新された後、ローカルプロバイダのキャッシュをフラッシュして書き込みます。キャッシュをフラッシュして書き込むことは、プロバイダが書き込みを再順序付けせず、メタデータが、実際のデータが格納される前に、適切に更新されることを保証します。ローカルプロバイダがキャッシュをフラッシュして書き込みことをサポートしていないなら (それは、 BIO_FLUSH 要求で EOPNOTSUPP を返す)、 hastd は、自動的に metaflush を無効にします。デフォルト値は、 on です。

name <name>

/dev/hast/<name> として現れる GEOM プロバイダ名。名前が定義されないなら、リソース名は、プロバイダ名として使用されます。

local <path>

リソースのためのバックエンドプロバイダとして使用されるローカルな構成要素へのポス。これは、GEOM プロバイダまたは通常のファイルのいずれかを指定できます。

remote <addr>

リモート hastd デーモンのアドレス。形式は、 listen 文と同じです。プライマリノードとして動作するとき、このアドレスは、セカンダリノードに接続するために使用されます。セカンダリノードとして動作するとき、このアドレスからの接続だけが、受け付けられます。

リモートアドレスがまだ知られていないとき (例えば、もう片方のノードがまだセットアップされていない)、 none の特別な値を使用することができます。

source <addr>

リモート hastd デーモンに接続する前にバインドするローカルアドレス。形式は、 listen 文と同じです。

関連ファイル

/etc/hast.conf
デフォルトの hastctl(8)hastd(8) 設定ファイル。
/var/run/hastctl
hastd(8) デーモンと通信するために、 hastctl(8) 制御ユーティリティによって使用されるソケットを制御します。

使用例

構成ファイルの例は、次のように見えるかもしれません:

listen tcp://0.0.0.0 
 
on hasta { 
 listen tcp://2001:db8::1/64 
} 
on hastb { 
 listen tcp://2001:db8::2/64 
} 
 
resource shared { 
 local /dev/da0 
 
 on hasta { 
  remote tcp://10.0.0.2 
 } 
 on hastb { 
  remote tcp://10.0.0.1 
 } 
} 
resource tank { 
 on hasta { 
  local /dev/mirror/tanka 
  source tcp://10.0.0.1 
  remote tcp://10.0.0.2 
 } 
 on hastb { 
  local /dev/mirror/tankb 
  source tcp://10.0.0.2 
  remote tcp://10.0.0.1 
 } 
}

作者

hast.conf は、FreeBSD 財団の資金提供の下で Pawel Jakub Dawidek <pjd@FreeBSD.org>によって書かれました。
January 25, 2012 FreeBSD