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
ログの出力先を指定します。オプションを任意の組み合わせで指定できます。有効なオプションはyesとnoです。
デフォルトはシスログと標準エラー出力です。ログファイルを使用しており、ファイルをローテートしたい場合には、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)