高可用性クラスター、別名フェールオーバークラスター(アクティブ-パッシブクラスター)は、実稼働環境で最も広く使用されているクラスタータイプの1つです。このタイプのクラスターは、クラスターノードの1つに障害が発生した場合でも、サービスの継続的な可用性を提供します。アプリケーションを実行しているサーバーに何らかの理由で障害が発生した場合(ハードウェア障害)、クラスターソフトウェア(ペースメーカー)は別のノードでアプリケーションを再起動します。
高可用性は、主にデータベース、カスタムアプリケーション、およびファイル共有に使用されます。フェイルオーバーは、アプリケーションを起動するだけではありません。ファイルシステムのマウント、ネットワークの構成、依存アプリケーションの起動など、一連の操作が関連付けられています。
環境
CentOS 7 / RHEL 7は、ペースメーカーを使用したフェールオーバークラスターをサポートします。ここでは、Apache(Web)サーバーを高可用性アプリケーションとして構成する方法について説明します。
前述したように、フェイルオーバーは一連の操作であるため、ファイルシステムとネットワークをリソースとして構成する必要があります。ファイルシステムの場合、iSCSIストレージの共有ストレージを使用します。
ホスト名 | IPアドレス | OS | 目的 |
---|---|---|---|
node1.itzgeek.local | 192.168.1.11 | CentOS 7 | クラスターノード1 |
node2.itzgeek.local | 192.168.1.12 | クラスターノード1 | |
server.itzgeek.local | 192.168.1.20 | iSCSI共有ストレージ | |
192.168.1.100 | 仮想クラスターIP(Apache) |
すべてVMwareWorkstationで実行されています。
共有ストレージ
共有ストレージは、実行中のアプリケーションのデータを保持するため、高可用性クラスターの重要なリソースの1つです。クラスタ内のすべてのノードは、最近のデータの共有ストレージにアクセスできます。 SANストレージは、実稼働環境で最も広く使用されている共有ストレージです。このデモでは、デモ用にiSCSIストレージを使用してクラスターを構成します。
パッケージのインストール
iSCSIサーバー
[root @ server〜]#yum install targetcli -y
クラスターノード
今こそ、iSCSIストレージを利用するようにクラスターノードを構成し、すべてのクラスターノードで以下の手順を実行します。
#yum install iscsi-initiator-utils -y
セットアップディスク
ここでは、iSCSIサーバー上に10GBのLVMディスクを作成して、クラスターノードの共有ストレージとして使用します。コマンドを使用して、ターゲットサーバーに接続されている使用可能なディスクを一覧表示しましょう。
[root @ server〜]#fdisk -l | grep -i sd
出力:
ディスク/dev/ sda:107.4 GB、107374182400バイト、209715200セクター/ dev / sda1 * 2048 1026047 512000 83 Linux / dev / sda2 1026048 209715199 104344576 8e LinuxLVMディスク/dev/ sdb:10.7 GB、10737418240バイト、20971520セクター
上記の出力から、私のシステムには10GBのハードディスク(/ dev / sdb)があることがわかります。 / dev / sdbを使用してLVMを作成します(/ dev / sdbをディスク名に置き換えます)
[root @ server〜]#pvcreate / dev / sdb [root @ server〜]#vgcreate vg_iscsi / dev / sdb [root @ server〜]#lvcreate -l 100%FREE -n lv_iscsi vg_iscsi
共有ストレージの作成
ノードイニシエーターの詳細を取得します。
cat /etc/iscsi/initiatorname.iscsi
ノード1:
InitialatorName =iqn.1994-05.com.redhat:b11df35b6f75
ノード2:
InitialatorName =iqn.1994-05.com.redhat:119eaf9252a
以下のコマンドを入力して、インタラクティブプロンプトのiSCSICLIを取得します。
[root @ server〜]#targetcli
出力:
targetcli shell version 2.1.fb46Copyright 2011-2013 by Datera、Inc and others。コマンドのヘルプについては、「help」と入力してください。/> cd / backstores / block / backstores / block> create iscsi_shared_storage / dev / vg_iscsi / lv_iscsi /dev/vg_iscsi/lv_iscsi./backstores/block> cd / iscsi を使用して、ブロックストレージオブジェクトiscsi_shared_storageを作成しました /iscsi>作成 作成されたターゲットiqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5.Created TPG 1.Global pref auto_add_default_portal =trueすべてのIP(0.0.0.0)、ポート3260でリッスンするデフォルトポータルを作成しました。/iscsi> cd iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5 / tpg1 / acls /iscsi/iqn.20...ad5/tpg1/acls> create iqn.1994-05.com.redhat:b11df35b6f75<<ノード1のイニシエーター iqn.1994-05.com.redhat:b11df35b6f75 / iscsi / iqn.20 ... ad5 / tpg1 / acls> create iqn.1994-05.com.redhat:119eaf9252a<<ノードのイニシエーターのノードACLを作成しました1 iqn.1994-05.com.redhat:119eaf9252a / iscsi / iqn.20 ... ad5 / tpg1 / acls> cd/iscsi/iqn.2003-01.org.linux-iscsi.serverのノードACLを作成しました.x8664:sn.518a1f561ad5 / tpg1 / luns /iscsi/iqn.20...ad5/tpg1/luns> create / backstores / block / iscsi_shared_storage LUN0を作成しました。ノードACLiqn.1994-05.com.redhat:119eaf9252aにLUN 0->0マッピングを作成しました。ノードACLiqn.1994-05.com.redhat:b11df35b6f75 / iscsi/iqnにLUN0->0マッピングを作成しました。 20 ... ad5 / tpg1 / luns> cd / /> ls o-/..............................................。 .................................................。 .....[...]o-バックストア....................................。 .................................................。 .... [...] | o-ブロック..............................................。 ................................ [ストレージオブジェクト:1] | | o- iscsi_shared_storage ........................... [/ dev / vg_iscsi / lv_iscsi(10.0GiB)ライトスルーがアクティブ化] | | o-アルア..............................................。 ................................. [ALUAグループ:1] | | o-default_tg_pt_gp..............................................。 ..... [ALUA状態:アクティブ/最適化] | o-fileio..............................................。 ............................... [ストレージオブジェクト:0] | o- pscsi..............................................。 ................................ [ストレージオブジェクト:0] | o-ramdisk..............................................。 .............................. [ストレージオブジェクト:0] o-iscsi..........。 .................................................。 ............................ [ターゲット:1] | o- iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5............................。 .......... [TPG:1] | o-tpg1..............................................。 ............................. [no-gen-acls、no-auth] | o-acls..............................................。 ........................................ [ACL:2] | | o- iqn.1994-05.com.redhat:119eaf9252a....................................。 ........... [マップされたLUN:1] | | | o-mapped_lun0..............................................。 [lun0ブロック/iscsi_shared_storage(rw)] | | o- iqn.1994-05.com.redhat:b11df35b6f75....................................。 .......... [マップされたLUN:1] | | o-mapped_lun0..............................................。 [lun0ブロック/iscsi_shared_storage(rw)] | o-luns..............................................。 ........................................ [LUN:1] | | o- lun0 ...................... [block / iscsi_shared_storage(/ dev / vg_iscsi / lv_iscsi)(default_tg_pt_gp)] | o-ポータル..............................................。 .................................. [ポータル:1] | o-0.0.0.0:3260..........................................。 .......................................[OK]o-ループバック....。 .................................................。 ............................... [ターゲット:0] /> saveconfig /etc/target/saveconfig.json/>終了に保存された構成 グローバル設定auto_save_on_exit=true/etc/target/backup/に保存された最後の10個の構成。/etc/target/saveconfig.json[root@server~]#に保存された構成
ターゲットサービスを有効にして再起動します。
[root @ server〜]#systemctl enable target [root @ server〜]#systemctl restart target
iSCSIトラフィックを許可するようにファイアウォールを構成します。
[root @ server〜]#firewall-cmd --permanent --add-port =3260 / tcp [root @ server〜]#firewall-cmd --reload
共有ストレージの発見
両方のクラスターノードで、以下のコマンドを使用してターゲットを検出します。
#iscsiadm -m Discovery -t st -p 192.168.1.20
出力:
192.168.1.20:3260,1 iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5
次に、以下のコマンドを使用してターゲットにログインします。
#iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5 -p 192.168.1.20 -l </ pre>出力:
[iface:default、target:iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5、portal:192.168.1.20,3260]にログイン(複数)[iface:defaultにログイン、ターゲット:iqn.2003-01.org.linux-iscsi.server.x8664:sn.518a1f561ad5、ポータル:192.168.1.20,3260]成功。イニシエーターサービスを再起動して有効にします。
#systemctl restart iscsid#systemctl enable iscsidクラスターノードのセットアップ
ホストエントリ
すべてのノードの各ノードにホストエントリを作成します。クラスタはホスト名を使用して相互に通信します。
#vi / etc / hostsホストエントリは次のようになります。
192.168.1.11 node1.itzgeek.local node1192.168.1.12 node2.itzgeek.local node2共有ストレージ
すべてのノードに移動し、新しいディスクが表示されているかどうかを確認します。私のノードでは、/ dev/sdbはiSCSIストレージからのディスクです。
#fdisk -l | grep -i sd出力:
ディスク/dev/ sda:107.4 GB、107374182400バイト、209715200セクター/ dev / sda1 * 2048 1026047 512000 83 Linux / dev / sda2 1026048 209715199 104344576 8e LinuxLVMディスク/dev/ sdb:10.7 GB、10733223936バイト、20963328セクターノード(例、node1)のいずれかで、ApacheWebサーバーがWebサイトファイルを保持するためのファイルシステムを作成します。 LVMを使用してファイルシステムを作成します。
[root @ node1〜]#pvcreate / dev / sdb [root @ node1〜]#vgcreate vg_apache / dev / sdb [root @ node1〜]#lvcreate -n lv_apache -l 100%FREE vg_apache [root @ node1〜 ]#mkfs.ext4 / dev / vg_apache / lv_apache次に、別のノードに移動し、以下のコマンドを実行して新しいファイルシステムを検出します。
[root @ node2〜]#pvscan [root @ node2〜]#vgscan [root @ node2〜]#lvscan最後に、 node1で作成したLVMを確認します 以下のコマンドを使用して、別のノード(例:node2)で使用できます。
[root @ node2〜]#lvdisplay / dev / vg_apache / lv_apache出力: node2.itzgeek.localに/dev/ vg_apache/lv_apacheが表示されます
---論理ボリューム---LVパス/dev/ vg_apache /lv_apacheLV名lv_apacheVG名vg_apacheLVUUID mFUyuk-xTtK-r7PV-PLPq-yoVC-Ktto-TcaYpS LV書き込みアクセス読み取り/書き込みLV作成ホスト、 time node1.itzgeek.local、2019-07-05 08:57:33 +0530 LVステータス使用可能#オープン0LVサイズ9.96GiB現在のLE2551セグメント1割り当て継承先読みセクター自動-現在8192ブロックデバイス253:3に設定システムに論理ボリュームが表示されない場合は、2番目のノードを再起動することを検討してください。パッケージのインストール
以下のコマンドを使用して、すべてのノードにクラスターパッケージ(ペースメーカー)をインストールします。
#yum install pcs branch-agents-all -yファイアウォール上のすべての高可用性アプリケーションがノード間で適切に通信できるようにします。システムにfirewalldがインストールされていない場合は、この手順をスキップできます。
#firewall-cmd --permanent --add-service =high-availability#firewall-cmd --add-service =high-availability以下のコマンドを使用して、ファイアウォールで許可されているアプリケーションを一覧表示します。
#firewall-cmd --list-service出力:
sshdhcpv6-クライアントの高可用性haclusterユーザーのパスワードを設定します。このユーザーアカウントはクラスター管理アカウントです。すべてのノードに同じパスワードを設定することをお勧めします。
#passwd haclusterクラスタサービスを開始します。また、システムの起動時に自動的に起動するようにします。
#systemctl start pcsd#systemctl enable pcsd上記のコマンドをすべてのクラスターノードで実行することを忘れないでください。
高可用性クラスターの作成
以下のコマンドを使用してノードを承認します。いずれかのノードで以下のコマンドを実行して、ノードを承認します。
[root @ node1〜]#pcs cluster auth node1.itzgeek.local node2.itzgeek.local出力:
ユーザー名: hacluster パスワード:<<パスワードを入力 node1.itzgeek.local:承認済みnode2.itzgeek.local:承認済みクラスターを作成します。
[root @ node1〜]#pcs cluster setup --start --name itzgeek_cluster node1.itzgeek.local node2.itzgeek.local出力:
ノード上のクラスターの破棄:node1.itzgeek.local、node2.itzgeek.local ... node1.itzgeek.local:クラスターの停止(ペースメーカー)... node2.itzgeek.local:クラスターの停止(ペースメーカー).. node2.itzgeek.local:正常に破棄されたclusternode1.itzgeek.local:正常に破棄されたclusterSending'pacemaker_remote authkey' to'node1.itzgeek.local'、'node2.itzgeek.local' node1.itzgeek.local:ファイルの正常な配布' pacemaker_remote authkey'node2.itzgeek.local:ファイルの配布に成功しました' pacemaker_remoteauthkey'クラスター構成ファイルをノードに送信しています...node1.itzgeek.local:Succeedednode2.itzgeek.local:ノード上のクラスターを開始しています:node1.itzgeek.local、 node2.itzgeek.local ... node1.itzgeek.local:クラスターの開始(corosync)... node2.itzgeek.local:クラスターの開始(corosync)... node1.itzgeek.local:クラスターの開始(ペースメーカー).. node2.itzgeek.local:クラスターの開始(ペースメーカー)...ノードnode1.itzgeek.local、node2.itzgeek.local...node1でのpcsd証明書の同期.itzgeek.local:Successnode2.itzgeek.local:Success証明書をリロードするためにノードでpcsdを再起動しています... node1.itzgeek.local:Successnode2.itzgeek.local:Successシステムの起動時にクラスターを開始できるようにします。
[root @ node1〜]#pcs cluster enable --all出力:
node1.itzgeek.local:クラスターが有効node2.itzgeek.local:クラスターが有効以下のコマンドを使用して、クラスターのステータスを取得します。
[root @ node1〜]#pcs cluster status出力:
クラスターステータス:スタック:corosync現在のDC:node2.itzgeek.local(バージョン1.1.19-8.el7_6.4-c3c624ea3d)-クォーラムのあるパーティション最終更新日:Fri Jul 5 09:14:57 2019最終変更: 2019年7月5日金曜日09:13:12node2.itzgeek.localのcrmd経由でhaclusterによって2つのノードが構成されました0のリソースが構成されましたPCSDステータス:node1.itzgeek.local:オンラインnode2.itzgeek.local:オンライン以下のコマンドを実行して、リソース、ペースメーカーのステータス、ノードの詳細など、クラスターに関する詳細情報を取得します。
[root @ node1〜]#pcs status出力:
クラスター名:itzgeek_cluster警告:stonithデバイスはなく、stonith対応はfalseではありません09:15:37 2019最終変更日:金7月5日09:13:12 2019 by hacluster by crmd on node2.itzgeek.local2ノードconfigured0リソースconfiguredOnline:[node1.itzgeek.local node2.itzgeek.local] No resourcesDaemon Status:corosync:アクティブ/有効ペースメーカー:アクティブ/有効pcsd:アクティブ/有効フェンシングデバイス
フェンシングデバイスは、ノードをリセットするか、共有ストレージのアクセスを切断することにより、問題のあるノードを切断するのに役立つハードウェア/ソフトウェアデバイスです。私のデモクラスターはVMware仮想マシン上で実行されているため、フェンシングデバイスのセットアップは示していませんが、このガイドに従ってフェンシングデバイスをセットアップできます。
クラスターリソース
リソースを準備する
ApacheWebサーバー
両方のノードにApacheWebサーバーをインストールします。
#yum install -y httpd wget構成ファイルを編集します。
#vi /etc/httpd/conf/httpd.conf両方のクラスタノードのファイルの最後に以下のコンテンツを追加します。
SetHandler server-status Order deny、allow Deny from all Allow from 127.0.0.1 次に、Webコンテンツ(HTML)ファイルを保存するために共有ストレージを使用する必要があります。いずれかのノードで以下の操作を行ってください。
[root @ node2〜]#mount / dev / vg_apache / lv_apache / var / www / [root @ node2〜]#mkdir / var / www / html [root @ node2〜]#mkdir / var / www / cgi -bin [root @ node2〜]#mkdir / var / www / error [root @ node2〜]#restorecon -R / var / www [root @ node2〜]#cat <<-END> / var / www / html / index.html こんにちは、ようこそ!。このページはRedHatHightAvailabilityClusterによって提供されます END [root @ node2〜]#umount / var / www両方のノードのファイアウォールでApacheサービスを許可します。
#firewall-cmd --permanent --add-service =http#firewall-cmd --reloadリソースの作成
Apacheサーバーのファイルシステムリソースを作成します。 iSCSIサーバーからのストレージを使用します。
#pcs resource create httpd_fs Filesystem device ="/ dev / mapper / vg_apache-lv_apache" directory ="/ var / www" fstype ="ext4" --group apache出力:
想定されるエージェント名'ocf:heartbeat:Filesystem'('Filesystem'から推定)IPアドレスリソースを作成します。このIPアドレスはApacheの仮想IPアドレスとして機能し、クライアントは個々のノードのIPの代わりにこのIPアドレスを使用してWebコンテンツにアクセスします。
#pcs resource create httpd_vip IPaddr2 ip =192.168.1.100 cidr_netmask =24 --group apache出力:
想定されるエージェント名'ocf:heartbeat:IPaddr2'('IPaddr2'から推定)Apacheサーバーのステータスを監視するApacheリソースを作成し、障害が発生した場合にリソースを別のノードに移動します。
#pcs resource create httpd_ser apache configfile ="/ etc / httpd / conf / httpd.conf" statusurl ="http://127.0.0.1/server-status" --group apache出力:
想定されるエージェント名'ocf:heartbeat:apache'('apache'から推定)フェンシングを使用していないので、無効にします(STONITH)。クラスタリソースを開始するには無効にする必要がありますが、実稼働環境でSTONITHを無効にすることはお勧めしません。
#pcs property set stonith-enabled =falseクラスタのステータスを確認してください。
[root @ node1〜]#pcs status出力:
クラスター名:itzgeek_clusterStack:corosyncCurrent DC:node2.itzgeek.local(バージョン1.1.19-8.el7_6.4-c3c624ea3d)-クォーラム付きパーティション最終更新日:Fri Jul 5 09:26:04 2019最終変更日:Fri Jul 5 09:25:58 2019 node1.itzgeek.local2ノードのcibadmin経由でrootによってconfigured3リソースconfiguredOnline:[node1.itzgeek.local node2.itzgeek.local]リソースの完全なリスト:リソースグループ:apache httpd_fs(ocf ::heartbeat:Filesystem):開始node1.itzgeek.local httpd_vip(ocf ::heartbeat:IPaddr2):開始node1.itzgeek.local httpd_ser(ocf ::heartbeat:apache):開始node1.itzgeek.local デーモンステータス:corosync:アクティブ/有効ペースメーカー:アクティブ/有効pcsd:アクティブ/有効高可用性クラスターの検証
クラスタが起動して実行されたら、WebブラウザでApache仮想IPアドレスを指定します。以下のようなWebページが表示されます。
高可用性クラスターのテスト
アクティブノードでクラスタを停止して、ノードのリソースのフェイルオーバーを確認しましょう。
[root @ node1〜]#pcs cluster stop node1.itzgeek.local結論
それで全部です。この投稿では、CentOS 7で高可用性クラスターをセットアップする方法を学習しました。コメントセクションで、ご意見をお聞かせください。
Cent OS