Corosync.conf(5)マニュアル

COROSYNC_CONF

Section: Corosync Cluster Engine Programmer’s Manual (5)
Updated: 2012-10-10

名前

corosync.conf – corosync実行形式の設定ファイル

書式

/etc/corosync/corosync.conf

説明

corosync.confはcorosync実行部を制御するのに必要な種々のパラメータを規定します。空白行や#で始まる行は無視されます。設定ファイルは括弧で囲まれたトップレベルディレクティブから構成されています。有効なものは以下です。

totem {}
totemプロトコルの設定オプションを記載するトップレベルのディレクティブです。
logging {}
ログの設定オプションを記載するトップレベルのディレクティブです。
quorum {}
クォーラムの設定オプションを記載するトップレベルのディレクティブです。
nodelist {}
クラスタ内のノードの設定オプションを記載するトップレベルのディレクティブです。
qb {}
libqbに関連する設定オプションを記載するトップレベルのディレクティブです。

totemディレクティブ内には、interfaceディレクティブが必須です。また、他に1つ必須設定オプションがあります。

totem内のinterfaceサブディレクティブには、4つの必須パラメータと1つの任意設定のパラメータがあります。

ringnumber
インターフェイスのリング番号を指定します。 冗長リングプロトコルを使用する場合には、メンバーシッププロトコルにおいてどの冗長リングでどのインターフェイスで使うのか一意に特定できるリングナンバーを指定しなければなりません。リング番号は0から指定します。
bindnetaddr

corosync実行部がバインドするネットワークアドレスを指定します。bindnetaddrはシステムで設定するIPアドレス、またはネットワークアドレスである必要があります。

例えば、ローカルインターフェースが192.168.5.92でネットマスクが255.255.255.0の場合は、bindnetaddrは192.168.5.92、または192.168.5.0を設定します。同様に、ローカルインターフェースが192.168.5.92でネットマスクが255.255.255.192であれば、bindnetaddrは192.168.5.92、または192.168.5.64を設定します。

IPv6通信でも使用できます。その場合、アドレスは指定される必要があり、IPv4のサブネットのように、ネットワークインターフェースの自動選択は行われません。IPv6を利用する場合、nodelistのnodeidフィールドが設定されている必要があります。

broadcast
オプション設定です。yesを設定すると通信にブロードキャストアドレスを使用します。その場合、mcastaddrが使用できなくなります。
mcastaddr

corosync実行部が使用するマルチキャストアドレスです。ほとんどのネットワークではデフォルトのままで動作しますが、ネットワーク管理者にはマルチキャストアドレスの使用を通知すべきです。224.x.x.xはコンフィグ用なので使用しないでください。

IPv6通信を利用する場合でもIPv6マルチキャストを利用できます。この場合、nodelistのnodeidフィールドが設定されている必要があります。cluster_nameオプションを使用している場合、このオプションは必要はありません。両方のオプションを使用した場合は、mcastaddrが優先されます。

mcastport
UDP番号を設定します。異なるUDPポート番号を使用すれば、corosyncサービス用に同じマルチキャストアドレスを使用できます。corocyncはマルチキャスト受信用と、送信用(mcastport-1)の2つのUDPポートを使用する事にご注意ください。同じネットワーク上に、同じマルチキャストアドレスを使用する複数のクラスタがある場合は、異なるポート番号を使用ください。
ttl
生存期間(Time To Live)を設定します。ルーティングされたネットワークを使用する場合には、デフォルト値の1では小さすぎます。有効な値は0から255です。このオプションは、マルチキャスト通信の場合にのみ有効です。

totemディレクティブでは、7つの設定オプションがあり、そのうち1つは必須、5つは任意、1つはIPv6を有効にした場合の必須設定です。必須のディレクティブはtotem設定のバージョンを制御します。任意のオプションディレクティブ(IPv6を使っていない場合)ではノードの特定を制御したり、セキュリティと認証、冗長リングモードのオペレーション、最大ネットワークMTUフィールドを制御します。

version
設定ファイルのバージョンを指定します。このディレクティブで現在有効な値は2のみです。
clear_node_high_bit

nodeidが指定されていない場合のみ関係する、任意の設定項目です。一部のcorosyncクライアントでは、0以上の符号付き32ビットnodeidが必要ですが、nodeidの生成時には、デフォルトではIPv4アドレス空間の32ビット全てを使用しています。このオプションをyesにすると、最高位のビットを0にすることで、nodeidを正の符号付き32ビット整数型にします。

注意:ローリングアップデートなど、このオプションがクラスタの1つサブネットでのみ有効の場合には、クラスターの挙動は予期できません。

crypto_hash

全メッセージのHMAC認証の方法を指定します。有効な値は、none(認証なし)、md5、sha1、sha256、sha384、sha512です。

デフォルトはsha1です。

crypto_cipher

全メッセージにどの暗号方法を使うか指定します。有効な値は、none(暗号化なし)、aes256、aes192、aes128、3desです。crypto_cipherを有効にする場合には、crypto_hashの有効化も必要です。

デフォルトはaes256です。

secauth

全メッセージの認証にHMAC/SHA1を認証を使用するかを指定します。さらに、全データをnssライブラリとaes256暗号化アルゴリズムで盗聴からの保護を行うか指定します。

このオプションを有効にすると、totemによって全メッセージに暗号ヘッダを付加し、スループットが低下します。またcorosyncによる暗号化と認証は余分にCPUを消費します。

デフォルトではonです。

注意:このパラメータは廃止予定です。crypto_cipherとcrypto_hashの使用を推奨します。

rrp_mode

冗長リングのモードをnone、active、passiveから指定します。Activeレプリケーションは、障害の多いネットワーク環境でも送信から到達までの遅延が少ないですが、パフォーマンスは低くなります。Passiveレプリケーションは、CPUにボトルネックにならなければtotemプロトコルの2倍のスピードになります。noneでは、totemプロトコルでネットワークが1つだけ使えます。

インターフェースディレクティブが1つだけ指定されていれば、自動的にnoneが選ばれます。複数のインターフェースディレクティブが指定されている場合には、activeかpassiveしか選べません。

activeとpassiveのどちらのモードでも、インターフェースディレクティブの最大数は2です。

複数のインターフェースを使用する際にrrpを動作させるには、各インターフェースに異なるマルチキャストアドレス/ポートの組み合わせを使用するようにしてください。ポートについては、同じアドレスの場合には2以上違うものを使用してください。これらはパーサーがチェックします。

netmtu

ネットワークの最大送信単位を指定します。通常フレームのMTUである1500以上の値を指定するには、イーサネットデバイスがラージまたはジャンボフレームに対応している必要があります。ネットワーク中にラージフレームに対応していないデバイスがあると、このプロトコルは正常に動作しません。MTUのサイズは1500以上の値を指定する必要があります。

ラージフレーム対応のNICやスイッチで、最大フレームサイズがIPヘッダ含めて9000MTUに対応するとしているものには注意が必要です。netmtuとホストMTUに9000を指定すると、totemは9000バイトすべてをフレームに使います。そしてLinuxは18バイトのヘッダを加えるので、フレームサイズ全体では9018になります。このため、このデータサイズではハードウェアによっては正常に動作しません。netmtuが8982であれば動作するラージフレームのデバイスがある事を確認しています。実際には4500バイトのフレームサイズ対応でも、ラージフレーム対応とうたうメーカーもあります。ネットワークが頻繁に再構成されていると、マルチキャストのトラフィックを送信する際に、デバイスによってはラージフレームに対応しないかもしれません。ラージフレーム対応にあたっては、ハードウェア選定に注意してください。

デフォルトは1500です。

transport

このディレクティブは通信メカニズムの制御に使用します。corosyncがバインドしているインターフェースがRoCEEやInfinibandなどのRDMAインターフェースの場合には”iba”パラメータを指定します。完全にマルチキャストの使用を避ける場合は、ユニキャスト通信のパラメータの”udpu”を指定します。デプロイ前には、nodelistディレクティブで、メンバーシップを構成する可能性があるメンバーのリストを指定する必要があります。

デフォルトはudpです。transportにはudpuかibaを設定します。

cluster_name
マルチキャストアドレスの自動生成に使用するクラスタ名を指定します。
config_version
設定ファイルのバージョンを指定します。これは符号なし64ビット整数に変換されます。デフォルトは0です。オプションは、設定が最新ではない古いノードの参加を防ぐために存在します。値が0ではなくて、ノードが最初にシングルノードのメンバーシップから複数ノードのメンバーシップになる場合には、他のノードのconfig_versionが収集されます(これは最初の場合だけです。分離後の参加はこのルールに従いません)。そして、その時点のノードのconfig_versionが、収集されたバージョンの最高値と異なる場合、corosyncは終了します。
ip_version
通信に使用するIPのバージョンを指定します。値はipv4かipv6です。デフォルト(指定しない場合)はipv4です。

totemディレクティブには、プロトコルの動作の制御に使用する設定オプションがあります。通常、適切なガイダンスと十分な検証を行わずに値を変更することは推奨しません。頻繁に再構成されてしまうようなネットワークの場合には、大きな値を設定することが必要かもしれません。アプリケーションによっては、トークンのタイムアウト時間を少なくして、より早い障害検知時間が必要になるかもしれません。

token

このタイムアウト値は直接、また実際のトークンのタイムアウト計算で使用されます(token_coefficientセクションを参照ください)。トークンを受信できない場合に、それを宣言するまでの時間をミリ秒で指定します。これはその時点の構成でノードが障害の検知に使う時間です。新しく接続を構成するには、この値に約50ミリ秒加えた時間がかかります。

トーテムによる実際のトークンのタイムアウトでは、runtime.config.tokenキーのcmap値を読み込むことができます。

デフォルトは1000ミリ秒です。

token_coefficient

この値はnodelistセクションが指定されていて、最低でも3ノードを含む場合のみ使用されます。この場合、実際のトークンのタイムアウトは、token+(number_of_nodes – 2) * token_coefficientになります。これにより、クラスターでノードの追加時にトークンのタイムアウトを手動で変更しなくても調節できるようになります。この値を0にすると、機能は無効になります。

デフォルトは650ミリ秒です。

token_retransmit

再送されたトークンが受信されるまでの時間をミリ秒単位で指定します。トークンが変更された場合は自動的に計算されます。この値をcorosyncのコミュニティーからのガイダンスなく変更するのは推奨しません。

デフォルト値は238ミリ秒です。

hold

プロトコルの利用があまりないときに、トークンをどの程度保持するかミリ秒単位で指定します。この値をcorosyncのコミュニティーからのガイダンスなしで変更するのはお勧めできません。

デフォルトは180ミリ秒です。

token_retransmits_before_loss_const

新しい構成を形成するまでに、何回トークンの再送を試みるか指定します。この値をセットすると、retransmitとholdが、retransmits_before_lossとtokenから自動的に算出されます。

デフォルトでは4回再送します。

join

メンバーシッププロトコルのjoinメッセージをどのくらい待つか、タイムアウトをミリ秒単位で指定します。

デフォルトは50ミリ秒です

send_join

joinメッセージを送信するまでのタイムアウト時間の上限値を、0からsend_joinの間で、ミリ秒単位で指定します。32ノード以下の構成では、このパラメータは必要ありません。大きなリングでは、NICが新しいリング形成のjoinメッセージでオーバーフローすることがないように、このパラメータが必要です。大きなリング(128ノード)では、80ミリ秒が適切な値です。このパラメータの値を変更した場合は、他のタイマーの値も変更しなければなりません。大きな構成を試したい場合には、corosyncメーリングリストでガイダンスを求めてください。

デフォルトでは0ミリ秒です。

consensus

新しいメンバーシップ構成のラウンドを開始する前に、コンセンサス(合意)を得るために待つ時間をミリ秒単位で指定します。コンセンサスの最小値は1.2*トークンでなければなりません。この値は、ユーザがconsensusの値を指定していなくても自動的に計算されて1.2 * tokenになります。2ノードクラスタでは、consensusの値が大きければjoinはタイムアウトしますが、小さければ大丈夫です。3ノード以上のクラスタでは、consensusはtokenよりも大きい必要があります。奇数のメンバーシップ変更において、仮想同期は保証しますが、consensusがtokenよりも小さい場合は、ノード数が大きくなるにつれリスクが増大します。

デフォルトは1200ミリ秒です。

merge

マルチキャストの通信が行われていない時に、パーティションのチェックを行うまでに待つ時間をミリ秒単位で指定します。マルチキャスト通信が送信されれば、プロトコルの機能としてマージ検知が発生します。

デフォルトは200ミリ秒です。

downcheck

ダウンしたネットワークインターフェースがupに戻るのをチェックするまでの時間をミリ秒単位で指定します。

デフォルトは1000ミリ秒です。

fail_recv_const

新しい構成をする前に、メッセージを受信するはずの時に何もメッセージを受信していないトークンのローテーションを何回行うかを指定します。

デフォルトは1メッセージにつき2500回です。

seqno_unchanged_const

何回マルチキャスト通信なしのトークンのローテーションが発生すると保持タイマが開始するか指定します。

デフォルトは30ローテーションです。

heartbeat_failures_allowed

[ハートビートメカニズム]は、早期の障害検知のため任意設定のハートビートメカニズムの設定をします。このメカニズムはネットワークをハートビートに使っているため、不安定なネットワークで使うと誤った障害検知をする場合があるので注意が必要です。

つまり、このメカニズムは低~中程度に利用されているネットワークで障害を改善させたいときに使うのが望ましいです。

定数にはハートビート障害を宣言するまでに見過ごすハートビート障害の数を指定します。値を設定していない、または0の場合は、システムでハートビートメカニズムは使用されず、トークンのローテーションが障害検知の方法になります。

デフォルトは0(disabled)です。

max_network_delay

[ハートビートメカニズム]ネットワークにおいて1パケットがマシンから他のマシンに送信される間の、おおよその遅延をミリ秒単位で指定します。この値はシステムエンジニアが決定してください。また、ハートビートを使用した障害検知メカニズムの影響が分からない場合には変更しないでください。

デフォルトは50ミリ秒です。

window_size

1つのトークンのローテーションで送信されるメッセージの最大数を指定します。すべてのノードが同程度によく動作する場合は、この値は大きく(300)なり、大きなリングでの配送では発信において、より高い遅延を導きます。大きなリング(16以上)でのレイテンシを減らすため、安全のためデフォルトは低く抑えてあります。もし、高速のノード群のなかに低速のノードがある場合、カーネルのバッファオーバーフローを回避するためにwindow_sizeは256000/netmtu より小さくしなければなりません。ユーザーはこれを通知ログの再送信リストの表示によってこれを知ることができます。エラーの発生時にデータのロスはありませんが、パフォーマンスは低下します。

デフォルトは50メッセージです。

max_messages

トークンを受け取るノード1つによって送信されるメッセージの最大数を指定する。カーネルの送信バッファのオーバーフローを防ぐため、最大値は25600/netmtuに制限されています。

デフォルトは17メッセージです。

miss_count_const

再送信を行う前に、送信前にチェックされるメッセージである、トークンを受信する最大数を指定します。このパラメータはユニキャストパケットよりもマルチキャストパケットを遅らせるスイッチを調整するために使えます。最近のものなら、ほぼ全てのスイッチにおいてデフォルト設定のままでうまく動作します。

デフォルト値は5メッセージです。

rrp_problem_count_timeout

一時的なネットワーク障害において、リング上の接続に障害がない事を保証するため障害カウンタに1の減算処理をするまでの時間をミリ秒単位で指定します。

デフォルトは2000ミリ秒です。

rrp_problem_count_threshold

何回問題があると検出すると、その接続を障害ありと設定するか指定します。一度障害ありと設定されると、以降はデータを送信しなくなります。また、rrp_problem_count_timeoutが経過してもカウンタが減算されなくなります。

稼働中のノードからの全トークンがrrp_token_expired_timeoutの時間内に受信されなかった場合に問題が検出されます。rrp_problem_count_threshold * rrp_token_expired_timeoutの値は、tokenのタイムアウト時間よりすくなくとも50ミリ秒以上少なくないと、トークンのタイムアウト時に再構成が発生することがあります。

デフォルトは10回です。

rrp_problem_count_mcast_threshold

パッシブrrpモードで、マルチキャスト通信に何回障害を検出すると、その接続は障害ありだと設定するか指定します。アクティブrrpモードでは、この機能は使用しません。

デフォルトはrrp_problem_count_thresholdが10回です。

rrp_token_expired_timeout

冗長リングプロトコルで、リング全体から特定の1つのノードに対するトークンが受信されていない場合に、障害カウンタを加算するまでの時間をミリ秒単位で指定します。この値はトークンのタイムアウトとproblem_count_thresholdから自動的に計算されますが、上書きすることができます。corosyncコミュニティーからのガイダンスなしでこの値を上書きする事は推奨されません。

デフォルトは47ミリ秒です。

rrp_autorecovery_check_timeout

障害のあったリングが自動復帰したかどうかのチェックを、ミリ秒単位で指定します。

デフォルトは1000ミリ秒です。

loggingディレクティブでは、いくつかの任意設定オプションがあります。

以下の3つのオプションはトップレベルディレクトリでのみ有効でです。

timestamp

全ログメッセージにタイムスタンプを付けるか指定します。

デフォルトではoffです。

fileline

表示されるファイルと行を指定します。

デフォルトはoffです。

function_name

表示されるコードの関数名を指定します。

デフォルトではoffです。

以下のオプションは、トップレベルのloggingディレクティブと、それを上書きできるlogger_subsysエントリ内のどちらでも有効です。

to_stderr
to_logfile
to_syslog

ログの出力先を指定します。オプションを任意の組み合わせで指定できます。有効なオプションはyesnoです。

デフォルトはシスログと標準エラー出力です。ログファイルを使用しており、ファイルをローテートしたい場合には、logrotate(8)をcopytruncate.オプションと一緒に使ってください。

例:

/var/log/corosync.log {
        missingok
        compress
        notifempty
        daily
        rotate 7
        copytruncate
}

logfile

to_logfileディレクティブをyesに設定しているときに、このオプションでログファイルのパスを指定します。デフォルトでは存在しません。

logfile_priority

特定のサブシステムのログファイルのプライオリティを指定します。debugがonだと無視されます。有効な値は、alert、crit、debug(debug = onと同じ)、emerg、err、info、notice、warningです。

デフォルトはinfoです。

syslog_facility

シスログに送信される全メッセージの、シスログファシリティのタイプを指定します。daemon、local0、local1、local2、local3、local4、local5、local6、local7から選択できます。

デフォルトはdaemonです。

syslog_priority

特定のサブシステムのシスログレベルを指定します。デバッグがonだと無視されます。有効な値はcrit、debug(debug=onと同じ)、emerg、err、info、notice、warningです。

デフォルトはinfoです。

debug

特定のロガーにデバッグ出力を記録するか指定します。ハイレベルのデバッグ情報であるvalue traceを含めることもできます。

デフォルトはoffです。

loggingディレクティブでは、logger_subsysディレクティブは任意のオプションです。

logger_subsysサブディレクトリでは、上記の全てのロギング設定オプションが有効であり、デフォルト値に優先します。後述するsubsysエントリでは、サブシステムの指定が必須です。

subsys
どのログが指定されているのかのサブシステムの識別名を指定します。この名称は共通プロビジョニンググループ(CPG)などのlog_init()関数の呼び出し時に使用します。このディレクティブは必須です。

quorumディレクティブでは、

provider
ディレクティブと合わせて、クォーラムのアルゴリズムを指定することができます。書き込み時のcorosync_votequorumのみサポートしています。設定オプションについてはvotequorum(5)を参照ください。

nodelistディレクティブでは、クラスタ内のノードについて詳細な情報を指定することができます。ディレクティブ内には、nodeサブディレクトリのみ含みます。nodeサブディレクトリでは、メンバーシップ内のメンバとなる全ノードを記載し、デフォルトでは存在しないオプションの設定が必要です。最低でもring0_addrフィールドの設定が必要です。

UDPUでは、メンバーシップのメンバーとなる全ノードが指定されている必要があります。有効なオプションは以下です:

ringX_addr
特定のノードのアドレスを指定します。Xはリング番号です。
nodeid
この設定オプションはIPv4使用の場合は任意ですが、IPv6使用の場合は必須です。クラスタメンバシップサービスに渡される32ビット値のノード識別子です。IPv4でこの値が指定されていないと、ノードIDは32ビットのIPアドレスから決定され、システムは0のリング識別子にバインドされます。0のノード識別子は予約されており使用することはできません。

qbディレクティブで、libqb用に指定できるオプションは以下です:

ipc_type
使用するIPCのタイプを指定します。native(デフォルト)、shm、socketから1つ選択できます。nativeは、shmかsocketのどちらかを、OSのサポート状況によって選択します。両方サポートしていればSHMが選ばれます。通常はSHMのほうが高速ですが、/dev/shmにリングバッファファイルの割り当てが必要です。

ファイル

/etc/corosync/corosync.conf
Corosync実行プログラム用の設定ファイル

関連項目

 

corosync_overview(8)votequorum(5)、logrotate(8)


Index

名前
書式
説明
ファイル
関連項目