パート1続ける
最初の部分で始まったクラスターの作成を続けます。
今回は、クラスターのセットアップについて説明します。
前回、DRBDの同期を開始しました。
両方のリソースのプライマリサーバーとして同じサーバーを選択した場合、同期が完了すると、
/ proc / drbdに次のようなものが表示されます。
ここで最も興味深いフィールドは
ds:UpToDate / UpToDateです 。これは、ローカルコピーとリモートコピーの両方が関連していることを意味します。
その後、リソースをセカンダリモードに移行します。その後、クラスターがリソースを管理します。
ペースメーカー
それで、クラスターマネージャー。
つまり、リソースと呼ばれる抽象化を管理するのは、システム全体の頭脳です。
クラスターリソースは、原則として、IPアドレス、ファイルシステム、DRBDデバイス、サービスプログラムなど、何でもかまいません。 独自のリソースを作成するのは非常に簡単です。iSCSIターゲットとLUNを管理するためにこれを行う必要がありました。詳細については後で説明します。
インストール:
コロシンク
PacemakerはCorosyncインフラストラクチャを使用してクラスターノード間で通信するため、最初に構成する必要があります。
Corosyncには、ノード間の通信(ユニキャスト、マルチキャスト、ブロードキャスト)をサポートするかなり幅広い機能といくつかのモードがあり、RRP(冗長リングプロトコル)をサポートしています。ノード間の接続が完全に消える状況があり、両者は隣接ノードが死んでいると信じています。 その結果、両方のノードが動作モードになり、カオスが始まります:)
したがって、レプリケーションと外部インターフェイスの両方を使用して、クラスター接続を確保します。
設定しましょう
まず、認証キーを生成する必要があります。
両方のサーバーで
/ etc / corosync / authkeyという名前で配置する必要があります。
次に、構成を作成します。両方のノードで同一である必要があります。
/etc/corosync/corosync.conf compatibility: none totem { version: 2 secauth: on threads: 3 rrp_mode: active transport: udpu interface { member { memberaddr: 10.1.0.100 } member { memberaddr: 10.1.0.200 } ringnumber: 0 bindnetaddr: 10.1.0.0 mcastport: 5405 ttl: 1 } interface { member { memberaddr: 192.168.123.100 } member { memberaddr: 192.168.123.200 } ringnumber: 1 bindnetaddr: 192.168.123.0 mcastport: 5407 ttl: 1 } } amf { mode: disabled } service { ver: 1 name: pacemaker } aisexec { user: root group: root } logging { syslog_priority: warning fileline: off to_stderr: yes to_logfile: no to_syslog: yes syslog_facility: daemon debug: off timestamp: on logger_subsys { subsys: AMF debug: off tags: enter|leave|trace1|trace2|trace3|trace4|trace6 } }
ここでは、通信用の2つのリング-内部(複製ポート経由)と外部(スイッチ経由)について説明し、
udpuプロトコル(UDPユニキャスト)を選択し、各リングのノードのIPアドレスを指定します。 ノードをヌルモデムケーブルで接続し、PPP接続を上げて3番目のリングを接続するというアイデアはまだありましたが、常識的にはそれを行うよう促されました。
これでPacemakerを実行できます(最初にCorosyncが起動します)。
すべてのPacemaker構成は
crmユーティリティを介して行われ、クラスター内の任意のサーバーで実行できます。変更後、すべてのノードの構成が自動的に更新されます。
現在の状態を見てみましょう:
すべてがこのようになっている場合、接続が確立され、ノードはお互いを認識します。
ここで、SCSTを管理するためのリソースが必要です。
私はかつてそれらをインターネット上のどこかで見つけ、自分のニーズに合うように修正して
Githubに投稿しました。
そこから2つのファイルが必要になります。
- SCSTLun-デバイスの作成を制御します
- SCSTTarget -iSCSIターゲットの作成を制御します
実際、これらは単純なPacemaker APIを実装する通常のbashスクリプトです。
それらを
/usr/lib/ocf/resource.d/heartbeatに配置して、クラスターマネージャーがそれらを表示できるようにします。
次に、
crmを実行
して構成モードに入ります。
テキストエディタ(通常はnano)が開き、リソースとその相互作用の説明を開始できます。
構成例を示します。
node server1 node server2 primitive DRBD_VM_STORAGE_1 ocf:linbit:drbd \ params drbd_resource="VM_STORAGE_1" drbdconf="/etc/drbd.conf" \ op monitor interval="29" role="Master" \ op monitor interval="31" role="Slave" primitive DRBD_VM_STORAGE_2 ocf:linbit:drbd \ params drbd_resource="VM_STORAGE_2" drbdconf="/etc/drbd.conf" \ op monitor interval="29" role="Master" \ op monitor interval="31" role="Slave" primitive IP_iSCSI_1_1 ocf:heartbeat:IPaddr2 \ params ip="10.1.24.10" cidr_netmask="24" nic="int1.24" \ op monitor interval="10s" primitive IP_iSCSI_1_2 ocf:heartbeat:IPaddr2 \ params ip="10.1.25.10" cidr_netmask="24" nic="int2.25" \ op monitor interval="10s" primitive IP_iSCSI_1_3 ocf:heartbeat:IPaddr2 \ params ip="10.1.26.10" cidr_netmask="24" nic="int3.26" \ op monitor interval="10s" primitive IP_iSCSI_1_4 ocf:heartbeat:IPaddr2 \ params ip="10.1.27.10" cidr_netmask="24" nic="int4.27" \ op monitor interval="10s" primitive IP_iSCSI_1_5 ocf:heartbeat:IPaddr2 \ params ip="10.1.28.10" cidr_netmask="24" nic="int5.28" \ op monitor interval="10s" primitive IP_iSCSI_1_6 ocf:heartbeat:IPaddr2 \ params ip="10.1.29.10" cidr_netmask="24" nic="int6.29" \ op monitor interval="10s" primitive IP_iSCSI_2_1 ocf:heartbeat:IPaddr2 \ params ip="10.1.24.20" cidr_netmask="24" nic="int1.24" \ op monitor interval="10s" primitive IP_iSCSI_2_2 ocf:heartbeat:IPaddr2 \ params ip="10.1.25.20" cidr_netmask="24" nic="int2.25" \ op monitor interval="10s" primitive IP_iSCSI_2_3 ocf:heartbeat:IPaddr2 \ params ip="10.1.26.20" cidr_netmask="24" nic="int3.26" \ op monitor interval="10s" primitive IP_iSCSI_2_4 ocf:heartbeat:IPaddr2 \ params ip="10.1.27.20" cidr_netmask="24" nic="int4.27" \ op monitor interval="10s" primitive IP_iSCSI_2_5 ocf:heartbeat:IPaddr2 \ params ip="10.1.28.20" cidr_netmask="24" nic="int5.28" \ op monitor interval="10s" primitive IP_iSCSI_2_6 ocf:heartbeat:IPaddr2 \ params ip="10.1.29.20" cidr_netmask="24" nic="int6.29" \ op monitor interval="10s" primitive ISCSI_LUN_VM_STORAGE_1 ocf:heartbeat:SCSTLun \ params iqn="iqn.2011-04.ru.domain:VM_STORAGE_1" device_name="VM_STORAGE_1" \ lun="0" path="/dev/drbd0" handler="vdisk_fileio" primitive ISCSI_LUN_VM_STORAGE_2 ocf:heartbeat:SCSTLun \ params iqn="iqn.2011-04.ru.domain:VM_STORAGE_2" device_name="VM_STORAGE_2" \ lun="0" path="/dev/drbd1" handler="vdisk_fileio" primitive ISCSI_TGT_VM_STORAGE_1 ocf:heartbeat:SCSTTarget \ params iqn="iqn.2011-04.ru.domain:VM_STORAGE_1" \ portals="10.1.24.10 10.1.25.10 10.1.26.10 10.1.27.10 10.1.28.10 10.1.29.10" \ tgtoptions="InitialR2T=No ImmediateData=Yes MaxRecvDataSegmentLength=1048576 MaxXmitDataSegmentLength=1048576 MaxBurstLength=1048576 FirstBurstLength=524284 MaxOutstandingR2T=32 HeaderDigest=CRC32C DataDigest=CRC32C QueuedCommands=32 io_grouping_type=never" \ op monitor interval="10s" timeout="60s" primitive ISCSI_TGT_VM_STORAGE_2 ocf:heartbeat:SCSTTarget \ params iqn="iqn.2011-04.ru.domain:VM_STORAGE_2" \ portals="10.1.24.20 10.1.25.20 10.1.26.20 10.1.27.20 10.1.28.20 10.1.29.20" \ tgtoptions="InitialR2T=No ImmediateData=Yes MaxRecvDataSegmentLength=1048576 MaxXmitDataSegmentLength=1048576 MaxBurstLength=1048576 FirstBurstLength=524284 MaxOutstandingR2T=32 HeaderDigest=CRC32C DataDigest=CRC32C QueuedCommands=32 io_grouping_type=never" \ op monitor interval="10s" timeout="60s" group GROUP_ISCSI_1 IP_iSCSI_1_1 IP_iSCSI_1_2 IP_iSCSI_1_3 IP_iSCSI_1_4 \ IP_iSCSI_1_5 IP_iSCSI_1_6 ISCSI_TGT_VM_STORAGE_1 ISCSI_LUN_VM_STORAGE_1 group GROUP_ISCSI_2 IP_iSCSI_2_1 IP_iSCSI_2_2 IP_iSCSI_2_3 IP_iSCSI_2_4 \ IP_iSCSI_2_5 IP_iSCSI_2_6 ISCSI_TGT_VM_STORAGE_2 ISCSI_LUN_VM_STORAGE_2 ms MS_DRBD_VM_STORAGE_1 DRBD_VM_STORAGE_1 \ meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" \ notify="true" target-role="Master" ms MS_DRBD_VM_STORAGE_2 DRBD_VM_STORAGE_2 \ meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" \ notify="true" target-role="Master" location PREFER-1 MS_DRBD_VM_STORAGE_1 50: server1 location PREFER-2 MS_DRBD_VM_STORAGE_2 50: server2 colocation COLOC_ALL_1 inf: GROUP_ISCSI_1 MS_DRBD_VM_STORAGE_1:Master colocation COLOC_ALL_2 inf: GROUP_ISCSI_2 MS_DRBD_VM_STORAGE_2:Master order ORDER_ALL_1 inf: MS_DRBD_VM_STORAGE_1:promote GROUP_ISCSI_1:start order ORDER_ALL_2 inf: MS_DRBD_VM_STORAGE_2:promote GROUP_ISCSI_2:start property $id="cib-bootstrap-options" \ dc-version="1.1.7-ee0730e13d124c3d58f00016c3376a1de5323cff" \ cluster-infrastructure="openais" \ expected-quorum-votes="2" \ stonith-enabled="false" \ no-quorum-policy="ignore" \ default-action-timeout="240" \ last-lrm-refresh="1367942459" rsc_defaults $id="rsc-options" \ resource-stickiness="100"
一般的なクラスター設定
一番下にあります。 ここで重要なのは、
no-quorum-policy = "ignore"および
expected-quorum-votes = "2"です。2台のサーバーのクラスターがあるため、ここにはクォーラムを配置できません。したがって、無視してください。
資源
通常、リソースには2つの状態(オンまたはオフ、開始/停止)があります。
たとえば、
ocf:heartbeat:IPaddr2はインターフェイス上のIPアドレスを
取得して削除し、さらにarpテーブルを更新するために無償のarpを送信します。 このリソースのIPアドレス、マスク、インターフェイスを指定します。
マスター/スレーブモードを持つ特別なリソース、たとえばDRBD(
ocf:linbit:drbd )もあります。
ノードがアクティブモードになると、クラスターマネージャーはリソースをマスターモードにします。 DRBDはセカンダリからプライマリに切り替わります。 彼のために、リソースの名前とDRBD構成へのパスを示します(おそらく省略できますが、正確には覚えていません)。
次は自己記述リソースです。
ocf:heartbeat:SCSTLunの場合、追加
するターゲットの
IQN 、デバイス名 、
LUN番号(ターゲットにはLUN 0が必要です。そうでない場合、一部のイニシエーターは吹き飛ばされます)、
エクスポートされたデバイスへのパス、およびハンドラーを指定します。
ハンドラーについて詳しく説明する必要があります。これが、SCSTがデバイスで動作する方法です。
興味深いものの:
- ディスク -実際、これはイニシエーターからSCSIデバイスへのSCSIコマンドの直接転送であり、最も簡単なモードですが、実際のSCSIデバイスでのみ動作します。 DRBDデバイスをエクスポートする
- vdisk_blockio-デバイスをブロックデバイスとして開き、オペレーティングシステムのページキャッシュをバイパスします。 I / Oをキャッシュする必要がない場合に使用します。
- vdisk_fileio-デバイスをファイルとして開き、オペレーティングシステムのページキャッシュ、最も効率的なモードを使用して選択できるようにします
Vdisk_fileioには、速度に影響する重要なパラメーター
nv_cache = 1があり 、
SCSTLunにハード登録され
ます 。
このパラメーターは、イニシエーターコマンドを無視してキャッシュをデバイスにフラッシュするようにSCSTに指示します。 これにより、ストレージが停止した場合にデータが失われる可能性があります。 イニシエーターは、データがディスク上にあり、まだメモリ内にあると考えます。 したがって、自己責任で使用してください。
次に
ocf:heartbeat:SCSTTarget resource 、
IQNを割り当て
ます 。portalsはこのターゲットが使用できるIPアドレスのリストです
。tgtoptionsはiSCSIオプションです。
詳細については
こちらを参照してください。
リソースを開始および停止する際のクラスターの動作を担当するディレクティブ:
- groupは、リソースをグループにまとめて、それら全体として機能します。 グループ内のリソースは順番に開始されます。
- locationは、デフォルトでこのリソースを表示するノードを示します
- コロケーションは、同じノード上で一緒にすべきリソースを定義します
- 順序は、リソースが開始される順序をクラスターマネージャーに伝えます
リソースを設定したら、エディターを終了して変更を適用します。
crm(live)configure
その後、現在の状況を確認できます。
リソースが非アクティブであり、スレーブ(セカンダリ)モードのDRBDであることがわかります。
今、あなたはそれらをアクティブにしようとすることができます:
このリソースを開始して、他のリソースの起動を呼び出します。 それらは私たちに依存するものとしてリストされており(
コロケーション )、厳密に定義された順序(
順序 )で起動されます:最初に、DRBDデバイスがプライマリモードになり、次にIPアドレスが上げられ、LUNが作成され、iSCSIターゲットが最後に作成されます。
結果を見てみましょう:
もしそうなら、あなたは自分自身を祝福することができます-クラスターが実行されています!
configの
locationディレクティブで示されるように、各リソースグループはサーバーで起動されます。
確認のために、DRBDとSCSTが診断を表示するカーネルログ
dmesgを確認できます。
第二部の終わり
3番目の最後の部分では、このクラスターで最適な動作を行うようにESXiサーバーを構成する方法を示します。