フェールオーバークラスターまたはアクティブ-パッシブクラスターとも呼ばれる高可用性クラスターは、クラスターノードの1つに障害が発生した場合でもサービスを継続的に利用できるようにするために、実稼働環境で最も広く使用されているクラスタータイプの1つです。
技術的には、アプリケーションを実行しているサーバーに何らかの理由で障害が発生した場合(例:ハードウェア障害)、クラスターソフトウェア(ペースメーカー)は動作中のノードでアプリケーションを再起動します。
フェイルオーバーは、アプリケーションを再起動するだけではありません。これは、ファイルシステムのマウント、ネットワークの構成、依存アプリケーションの開始など、それに関連する一連の操作です。
ここでは、Pacemakerを使用してフェールオーバークラスターを構成し、Apache(Web)サーバーを高可用性アプリケーションとして作成します。
ここでは、Apache Webサーバー、ファイルシステム、およびネットワークをクラスターのリソースとして構成します。
ファイルシステムリソースの場合、iSCSIストレージからの共有ストレージを使用します。
すべてVMwareWorkstationで実行されています。
共有ストレージは、実行中のアプリケーションのデータを格納するため、高可用性クラスターの重要なリソースの1つです。クラスタ内のすべてのノードは、最新のデータの共有ストレージにアクセスできます。
SANストレージは、実稼働環境で広く使用されている共有ストレージです。リソースの制約により、このデモでは、デモ用にiSCSIストレージを使用してクラスターを構成します。
iSCSIサーバー
[root @ storage〜]#dnf install -y targetcli lvm2
dnf install -y iscsi-initiator-utils lvm2
以下のコマンドを使用して、iSCSIサーバーで使用可能なディスクを一覧表示しましょう。
[root @ storage〜]#fdisk -l | grep -i sd
出力:ディスク/ dev / sda:100 GiB、107374182400バイト、209715200セクター/ dev / sda1 * 2048 2099199 2097152 1G 83 Linux / dev / sda2 2099200 209715199 207616000 99G 8e Linux LVMDisk / dev / sdb:10 GiB、10737418240バイト、20971520セクター
上記の出力から、私のシステムには10GBのハードディスク(/ dev / sdb)があることがわかります。
ここでは、iSCSIサーバー上にLVMを作成して、クラスターノードの共有ストレージとして使用します。
[root @ storage〜]#pvcreate / dev / sdb [root @ storage〜]#vgcreate vg_iscsi / dev / sdb [root @ storage〜]#lvcreate -l 100%FREE -n lv_iscsi vg_iscsi コード>
ノードイニシエーターの詳細を取得します。
cat /etc/iscsi/initiatorname.iscsi
ノード1:
InitialatorName =iqn.1994-05.com.redhat:121c93cbad3a
ノード2:
InitialatorName =iqn.1994-05.com.redhat:827e5e8fecb
以下のコマンドを入力して、インタラクティブプロンプトのiSCSICLIを取得します。
[root @ storage〜]#targetcli
出力:警告:設定ファイル/root/.targetcli/prefs.bin.targetcliシェルバージョン2.1.fb49Copyright 2011-2013 by Datera、Incなどを読み込めませんでした。コマンドのヘルプについては、「help」と入力してください。/> cd / backstores / block / backstores / block> create iscsi_shared_storage / dev / vg_iscsi / lv_iscsiCreated block storage object iscsi_shared_storage using /dev/vg_iscsi/lv_iscsi./backstores/block> cd /iscsi/iscsi> createCreated target iqn.2003-01.org .linux-iscsi.storage.x8664:sn.eac9425e5e18.Created TPG 1.Global pref auto_add_default_portal =trueCreated default portal listen on all IPs(0.0.0.0)、port 3260./iscsi> cd iqn.2003-01.org.linux -iscsi.storage.x8664:sn.eac9425e5e18 / tpg1 /acls<<前のコマンドの出力に従って変更/iscsi/iqn.20...e18/tpg1/acls>createiqn.1994-05.com.redhat: 121c93cbad3a <create iqn.1994-05.com.redhat:827e5e8fecb < cd /iscsi/iqn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18/tpg1/luns/iscsi/iqn.20 ..e18 / tpg1 / luns> create / backstores / block / iscsi_shared_storageCreated LUN 0.Created LUN 0-> 0 Mapping in node ACL iqn.1994-05.com.redhat:827e5e8fecbCreated LUN 0-> 0 mapping in nodeACLiqn。 1994-05.com.redhat:121c93cbad3a / iscsi / iqn.20 ... e18 / tpg1 / luns> cd //> lso-/..................。 .................................................。 .................................................。 ..[...]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.storage.x8664:sn.eac9425e5e18............................。 ............................ [TPG:1] | o-tpg1..............................................。 ................................................ [いいえ-gen-acls、no-auth] | o-acls..............................................。 .................................................。 ......... [ACL:2] | | o- iqn.1994-05.com.redhat:121c93cbad3a....................................。 ............................. [マップされたLUN:1] | | | o-mapped_lun0..............................................。 ................... [lun0 block / iscsi_shared_storage(rw)] | | o- iqn.1994-05.com.redhat:827e5e8fecb....................................。 .............................. [マップされたLUN:1] | | o-mapped_lun0..............................................。 ................... [lun0 block / 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]/>saveconfigConfigurationが/etc/target/saveconfig.json/>に保存されましたexitGlobalprefauto_save_on_exit=true最後の10個の構成が/etcに保存されました/etc/target/saveconfig.jsonに保存された/target/backup/.Configuration
ターゲットサービスを有効にして再起動します。
[root @ storage〜]#systemctl enable target [root @ storage〜]#systemctl restart target
iSCSIトラフィックを許可するようにファイアウォールを構成します。
[root @ storage〜]#firewall-cmd --permanent --add-port =3260 / tcp [root @ storage〜]#firewall-cmd --reload
両方のクラスターノードで、以下のコマンドを使用してターゲットを検出します。
iscsiadm -m Discovery -t st -p 192.168.0.20
出力:192.168.0.20:3260,1 qn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18
次に、以下のコマンドを使用してターゲットストレージにログインします。
iscsiadm -m node -T iqn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18 -p 192.168.0.20 -l </ pre>出力:[iface:default、target:iqn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18、portal:192.168.0.20,3260]へのログイン[iface:default、ターゲット:iqn.2003-01.org.linux-iscsi.storage.x8664:sn.eac9425e5e18、ポータル:192.168.0.20,3260]成功しました。イニシエーターサービスを再起動して有効にします。
systemctl restart iscsidsystemctl enable iscsid
クラスターノードのセットアップ 共有ストレージ すべてのクラスターノードに移動し、iSCSIサーバーからの新しいディスクが表示されているかどうかを確認します。
私のノードでは、/ dev/sdbはiSCSIストレージの共有ディスクです。
fdisk -l | grep -i sd
出力:ディスク/ dev / sda:100 GiB、107374182400バイト、209715200セクター/ dev / sda1 * 2048 2099199 2097152 1G 83 Linux / dev / sda2 2099200 209715199 207616000 99G 8e Linux LVMDisk / dev / sdb:10 GiB、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)で使用できます。
ls -al / dev / vg_apache / lv_apache
および
[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 gXeaoB-VlN1-zWSW- 2VnZ-RpmW-iDeC-kQOxZE LV書き込みアクセス読み取り/書き込みLV作成ホスト、時間node1.itzgeek.local、2020-03-30 08:08:17-0400LVステータス使用不可LVサイズ9.96GiB現在のLE2551セグメント1割り当て先読みセクターの自動継承システムに論理ボリュームが表示されない場合、またはデバイスファイルが見つからない場合は、2番目のノードを再起動することを検討してください。ホストエントリ すべてのノードの各ノードに関するホストエントリを作成します。クラスタはホスト名を使用して相互に通信します。
vi / etc / hosts
ホストエントリは次のようになります。
192.168.0.11 node1.itzgeek.local node1192.168.0.12 node2.itzgeek.local node2
パッケージのインストール クラスタパッケージは、高可用性リポジトリで利用できます。したがって、システムに高可用性リポジトリを構成します。
CentOS 8
dnf config-manager --set-enabled HighAvailability
RHEL 8
RHEL8でRedHatサブスクリプションを有効にしてから、高可用性リポジトリを有効にして、RedHatからクラスターパッケージをダウンロードします。
subset-manager repos --enable =rhel-8-for-x86_64-highavailability-rpms
以下のコマンドを使用して、すべてのノードで使用可能なすべてのフェンスエージェントを含むクラスターパッケージ(ペースメーカー)をインストールします。
dnf install -y pcs branch-agents-all pcp-zeroconf
ファイアウォールルールを追加して、すべての高可用性アプリケーションがノード間で適切に通信できるようにします。システムでfirewalldが有効になっていない場合は、この手順をスキップできます。
firewall-cmd --permanent --add-service =high-availabilityfirewall-cmd --add-service =high-availabilityfirewall-cmd --reload
haclusterユーザーのパスワードを設定します。
このユーザーアカウントはクラスター管理アカウントです。すべてのノードに同じパスワードを設定することをお勧めします。
passwd hacluster
クラスタサービスを開始し、システムの起動時に自動的に開始できるようにします。
systemctl start pcsdsystemctl enable pcsd
注意:すべてのクラスターノードで上記のコマンドを実行する必要があります。
高可用性クラスターを作成する 以下のコマンドを使用してノードを承認します。いずれかのノードで以下のコマンドを実行して、ノードを承認します。
[root @ node1〜]#pcs host auth node1.itzgeek.local node2.itzgeek.local
出力:ユーザー名:haclusterPassword:<<パスワードを入力node1.itzgeek.local:Authorizednode2.itzgeek.local:Authorizedクラスターを作成します。要件に応じて、クラスターitzgeek_clusterの名前を変更します。
[root @ node1〜]#pcs cluster setup itzgeek_cluster --start node1.itzgeek.local node2.itzgeek.local出力:'node1.itzgeek.local'を使用してホスト'node1.itzgeek.local'にアドレスが指定されていません'node2.itzgeek.local'を使用して'node2.itzgeek.local'にアドレスが指定されていませんホスト:'node1.itzgeek.local'、'node2.itzgeek.local' ... node1.itzgeek.local:正常に破棄されたclusternode2.itzgeek.local:正常に破棄されたclusterRequesting remove'pcsd settings' from' node1.itzgeek.local ' 、'node2.itzgeek.local' node1.itzgeek.local:ファイルの正常な削除'pcsd settings' node2.itzgeek.local:ファイルの正常な削除'pcsd settings' Sending'corosync authkey'、'pacemaker authkey' to ' node1.itzgeek.local'、' node2.itzgeek.local'node1.itzgeek.local:ファイルの正常な配布' corosync authkey'node1.itzgeek.local:ファイルの正常な配布' pacemaker authkey'node2.itzgeek.local:ファイル'corosyncauthkey' node2.itzgeek.localの正常な配布:ファイル' pacemakerauthkey'Sending'corosync.conf'の'ノードへの正常な配布1.itzgeek.local'、' node2.itzgeek.local'node1.itzgeek.local:ファイルの配布に成功しました' corosync.conf'node2.itzgeek.local:ファイルの配布に成功しました'corosync.conf'クラスターは正常に実行されましたセットアップ。ホストでクラスターを開始しています:'node1.itzgeek.local'、'node2.itzgeek.local' ...システムの起動時にクラスターを開始できるようにします。
[root @ node1〜]#pcs cluster enable --all
出力:node1.itzgeek.local:クラスターが有効node2.itzgeek.local:クラスターが有効以下のコマンドを使用して、クラスターのステータスを取得します。
[root @ node1〜]#pcs cluster status
出力:クラスターステータス:スタック:corosync現在のDC:node1.itzgeek.local(バージョン2.0.2-3.el8_1.2-744a30d655)-クォーラムのあるパーティション最終更新日:Mon Mar 30 08:28:08 2020 Last変更:Mon Mar 30 08:27:25 2020 by hacluster via crmd on node1.itzgeek.local 2ノードが構成されました0リソースが構成されましたPCSDステータス:node1.itzgeek.local:オンラインnode2.itzgeek.local:オンライン以下のコマンドを実行して、リソース、ペースメーカーのステータス、ノードの詳細など、クラスターに関する詳細情報を取得します。
[root @ node1〜]#pcs status
出力:クラスター名:itzgeek_cluster警告:stonithデバイスはなく、stonith対応はfalseではありませんスタック:corosyncCurrent DC:node1.itzgeek.local(バージョン2.0.2-3.el8_1.2-744a30d655)-クォーラムのあるパーティション最終更新日:月Mar 30 08:33:37 2020最終変更:Mon Mar 30 08:27:25 2020 by hacluster by crmd on node1.itzgeek.local2ノードconfigured0リソースconfiguredOnline:[node1.itzgeek.local node2.itzgeek.local] No resourcesDaemon Status: corosync:アクティブ/有効ペースメーカー:アクティブ/有効pcsd:アクティブ/有効フェンシングデバイス フェンシングデバイスは、ノードをリセットしたり、共有ストレージからノードへのアクセスを切断したりすることで、問題のあるノードを切断するのに役立つハードウェアデバイスです。このデモクラスタはVMware上で実行されており、セットアップする外部フェンスデバイスはありません。ただし、このガイドに従ってフェンシングデバイスを設定することができます。
フェンシングを使用していないので、無効にします(STONITH)。クラスタリソースを開始するにはフェンシングを無効にする必要がありますが、実稼働環境でSTONITHを無効にすることはお勧めしません。
[root @ node1〜]#pcs property set stonith-enabled =false
クラスターリソース リソースを準備する ApacheWebサーバー
両方のノードにApacheWebサーバーをインストールします。
dnf install -y httpd
構成ファイルを編集します。
vi /etc/httpd/conf/httpd.conf
両方のクラスタノードのファイルの最後に以下のコンテンツを追加します。
SetHandler server-status Require local Apache Webサーバーのログローテーション構成を編集して、クラスターリソースがsystemdを使用してサービスをリロードしないため、systemdを使用しないように指示します。
以下の行を変更してください。
FROM:
/ bin / systemctl reload httpd.service> / dev / null 2> / dev / null || true
TO:
/ usr / sbin / httpd -f /etc/httpd/conf/httpd.conf -c "PidFile /var/run/httpd.pid" -k graceful> / dev / null 2> / dev / null || true
次に、共有ストレージを使用してWebコンテンツ(HTML)ファイルを保存します。いずれかのノードで以下の操作を行ってください。
[root @ node1〜]#mount / dev / vg_apache / lv_apache / var / www / [root @ node1〜]#mkdir / var / www / html [root @ node1〜]#mkdir / var / www / cgi-bin [root @ node1〜]#mkdir / var / www / error [root @ node1〜]#restorecon -R / var / www [root @ node1〜]#cat <<-END> / var / www /html/index.html こんにちは、ようこそ!。このページはRedHatHightAvailabilityClusterによって提供されます END [root @ node1〜]#umount / var / www
両方のノードのファイアウォールでApacheサービスを許可します。
Firewall-cmd --permanent --add-service =httpfirewall-cmd --reload
リソースの作成 Apacheサーバーのファイルシステムリソースを作成します。 iSCSIサーバーからのストレージを使用します。
[root @ node1〜]#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コンテンツにアクセスします。
[root @ node1〜]#pcs resource create httpd_vip IPaddr2 ip =192.168.0.100 cidr_netmask =24 --group apache出力:想定されるエージェント名'ocf: `heartbeat`:IPaddr2'('IPaddr2'から推定)Apacheリソースを作成して、障害が発生した場合にリソースを別のノードに移動するApacheサーバーのステータスを監視します。
[root @ node1〜]#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'から推定)クラスタのステータスを確認してください。
[root @ node1〜]#pcs status
出力:クラスター名:itzgeek_clusterStack:corosyncCurrent DC:node1.itzgeek.local(バージョン2.0.2-3.el8_1.2-744a30d655)-クォーラムのあるパーティション最終更新日:Mon Mar 30 09:02:07 2020最終変更:Mon 2020年3月30日09:01:46node1.itzgeek.local2ノードのcibadmin経由でrootによってconfigured3リソースconfiguredOnline:[node1.itzgeek.local node2.itzgeek.local]リソースの完全なリスト:リソースグループ:apache httpd_fs(ocf:💓Filesystem ):開始node1.itzgeek.local httpd_vip(ocf:💓IPaddr2):開始node1.itzgeek.local httpd_ser(ocf:💓apache):開始node1.itzgeek.localDaemonステータス:corosync:アクティブ/有効ペースメーカー:アクティブ/有効pcsd:アクティブ/有効高可用性クラスターの検証 クラスタが起動して実行されたら、WebブラウザでApache仮想IPアドレスを指定します。以下のようなWebページが表示されます。
高可用性クラスターのテスト アクティブノード(すべてのリソースが実行されている)をスタンバイモードにして、リソースのフェイルオーバーを確認しましょう。
[root @ node1〜]#pcs nodestandby node1.itzgeek.local
重要なクラスターコマンド クラスタリソースの一覧表示:
pcsリソースステータス
クラスタリソースを再起動します:
pcsリソースの再起動
リソースをノードから移動します:
pcsリソース移動
クラスターをメンテナンスする:
pcsプロパティセットmaintenance-mode=true
クラスタをメンテナンスから削除します:
pcsプロパティセットmaintenance-mode=false
クラスタノードを開始します:
pcs cluster start
クラスタノードを停止します:
pcs cluster stop
クラスターの開始:
pcs cluster start --all
クラスターの停止:
pcs cluster stop --all
クラスターを破壊する:
pcs cluster destroy
クラスターWebユーザーインターフェース pcsd Webユーザーインターフェイスは、Pacemakerクラスターの作成、構成、および管理に役立ちます。
ノードでpcsdサービスを開始すると、Webインターフェイスにアクセスできるようになり、ポート番号2224で使用できるようになります。
https:// node_name:2224クラスタ管理ユーザーhaclusterとそのパスワードを使用してログインします。
すでにクラスターがあるので、[既存の追加]をクリックして既存のPacemakerクラスターを追加します。新しいクラスターをセットアップする場合は、公式ドキュメントを読むことができます。
クラスターノードのいずれかを入力して、既存のクラスターを検出します。
1、2分で、既存のクラスターがWebUIに表示されます。
クラスター情報について詳しく知るには、クラスターを選択してください。
クラスタ名をクリックすると、ノードの詳細が表示されます。
クラスタリソースをクリックして、リソースのリストとその詳細を表示します。
参照 :RedHatドキュメント。
結論 それで全部です。この投稿では、CentOS 8 /RHEL8で高可用性クラスターをセットアップする方法を学習しました。
Cent OS