COROSYNC_OVERVIEW (8) 日本語訳

COROSYNC_OVERVIEW 8

Updated 2012-02-13

“Corosync Man Page” “Corosync Cluster Engine Programmer’s Manual”

名称

Corosync_overview – Corosync概要

概要

Corosyncプロジェクトの目的は、ハイパフォーマンスでオーバーヘッドが低く、商用クォリティの高可用性ツールキットを修正BSDライセンスにもとづいて開発することです。

障害は様々な原因によって発生します。

  • アプリケーションの障害
  • ミドルウェアの障害
  • ハードウェアの障害

これまでの高可用性の主な目的は、ハードウェア障害を覆い隠すことでした。そしてCorosync以前は、システムの他のコンポーネントの障害部分は未解決のままでした。Cososyncの設計目標は、最大16ノードでアプリケーションの状態をレプリケートすることです。すべてのノードがアプリケーションの状態情報の複製を持ちます。

CorosyncプロジェクトはCPGと呼ぶグループメッセージAPIを提供しています。プロジェクトの開発者は多くのアプリケーションでのCPGの利用を推奨しています。CPGサービスはクローズドグループのメッセージモデルを実装しており、拡張仮想同期を保証しています。

CPGアプリケーション交換が失敗する状況を制御するために、シンプルアベイラビリティマネージャ(SAM)を提供しています。

クイックスタート

Corosync実行プログラムを設定します。ソースコードのconfディレクトリにあるいくつかのファイルは、通常は/etc/corosyncディレクトリにインストールされています。ディストリビューションのパッケージを使っているのであれば、ファイルは揃っているはずです。

ディレクトリには、corosync.confが含まれています。設定オプションの詳細についてはcorosync.conf(5)のmanページを参照してください。Corosyncプロジェクトはデフォルトの設定パラメータで動作を確認していますが、システム管理者は異なる値を設定できます。

Corosync実行プログラムはメッセージの相互認証と内容の秘密性を確保するために、暗号化をサポートします。Corosyncをセキュアに運用するには、秘密鍵を生成して全プロセッサで共有することが必要です。

まず、一方のノードで秘密鍵を生成します:

unix# corosync-keygen
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Writing corosync key to /etc/corosync/authkey.

上記の操作後、秘密鍵が/etc/corosync/authkeyに作成されます。秘密鍵は、クラスタを構成するすべてのノードにコピーする必要があります。異なる秘密鍵を持つノードは、クラスタに参加できません。

秘密鍵を取り外し可能なUSBメモリなどにコピーしたり、sshを使ってリモートコピーするなどして、秘密鍵をすべてのノードにコピーしてください。

unix#: install -D --group=0 --owner=0 --mode=0400 /path_to_authkey/authkey /etc/corosync/authkey

 corosync実行プログラムが”Invalid digest”というメッセージを表示する場合、ノード間の秘密鍵に不一致があります。

最後にcorosyncを実行します。corosyncがディストリビューションのパッケージの場合にはシステム起動時に開始しているかもしれません。または、デフォルトでoffになっている場合はcorosyncのinitスクリプトを有効にします。

ライブラリの使用

Corosyncと連携するアプリケーションを開発するには、ヘッダファイルとCcorosyncライブラリが必要です。ヘッダファイルをインクルードできれば、Corosyncインタフェースを参照できます。

Corosyncプロジェクトでは、インクルードファイルを/usr/include/corosyncに配置するよう推奨しています。

IPv6

CorosyncプロジェクトはIPv4とIPv6のネットワークアドレス両方に対応しています。クラスタ全体でIPv4かIPv6のどちらかを使用する必要があります。IPv6を使用するには、IPv6アドレスをbindnetaddrとmcastaddrフィールドに指定する必要があります。nodeidフィールドの設定も必要です。

例:

nodeid: 2
bindnetaddr: fec0::1:a800:4ff:fe00:20
mcastaddr: ff05::1

 IPv6でホストを設定するため、インターフェース追加にifconfigを使用してください。

box20: ifconfig eth0 add fec0::1:a800:4ff:fe00:20/64
box30: ifconfig eth0 add fec0::1:a800:4ff:fe00:30/64

/64が指定されていないと、IPv6ネットワークでの経路の設定ができず、重大な問題を引き起こします。
IPv6通信の経路が有効になっているか注意してください。

アーキテクチャ

Corosync実行プログラムに対する低負荷なIPCインタフェースがCorosyncライブラリです。Corosync実行プログラムは分散環境向けのCorosync APIを実装したものです。

CorosyncはTotem拡張仮想同期プロトコルを使用します。エンドユーザにとっては、高いパフォーマンス特性と、強い信頼性という利点があります。このプロトコルは、クラスタ内のノード間通信に使用されます。

環境変数

corosyncの実行プログラムは、起動時に4つの環境変数を使用します。環境変数が定義されていない場合には、それぞれのデフォルト値が使われます。

COROSYNC_MAIN_CONFIG_FILE

Corosync設定ファイルの絶対パスを記載します。

デフォルトは/etc/corosync/corosync.confです。

COROSYNC_TOTEM_AUTHKEY_FILE

Totemプロトコルでの認証と暗号化に使う、秘密鍵への絶対パスを指定します。

デフォルトは/etc/corosync/authkeyです。

セキュリティ

オプションで、Corosyncはネットワーク上に送信する全メッセージをAES-128で暗号化することができます。認証にはHMACとSHA1を使用します。Corosyncのライブラリは、擬似乱数の生成にNSSを使用します

メンバーシップのメッセージが侵入者にキャプチャされると、クラスタへのDoS攻撃が可能になります。もしもこれが起こっていたら、すでにクラスタは脅威に晒されていますので、DoS攻撃は管理者が懸念すべき脅威のうちでもましな部類のものです。

秘密鍵は再利用されるため、Corosyncのセキュリティは完璧な前方秘匿性を提供できるものではありません。自動化された方法でパケットキャプチャをすることによって、侵入者が秘密鍵を解読する可能性もありえます。なお現時点ではそのような自動攻撃の方法は公開されてはいません。このようなシナリオの場合、送信データの長期に渡るキャプチャによってクラスタが脅威に晒されます。

セキュリティ上の理由のため、Corosync実行プログラムにsetgidやsetgidを設定しないでください。

バグ

今のところありません。

関連項目

corosync.conf (5)、corosync-keygen (8)、cpg_overview (8)、sam_overview (8)