GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOS 8 /RHEL8で高可用性クラスターをセットアップする方法

フェールオーバークラスターまたはアクティブ-パッシブクラスターとも呼ばれる高可用性クラスターは、クラスターノードの1つに障害が発生した場合でもサービスを継続的に利用できるようにするために、実稼働環境で最も広く使用されているクラスタータイプの1つです。

技術的には、アプリケーションを実行しているサーバーに何らかの理由で障害が発生した場合(例:ハードウェア障害)、クラスターソフトウェア(ペースメーカー)は動作中のノードでアプリケーションを再起動します。

フェイルオーバーは、アプリケーションを再起動するだけではありません。これは、ファイルシステムのマウント、ネットワークの構成、依存アプリケーションの開始など、それに関連する一連の操作です。

環境

ここでは、Pacemakerを使用してフェールオーバークラスターを構成し、Apache(Web)サーバーを高可用性アプリケーションとして作成します。

ここでは、Apache Webサーバー、ファイルシステム、およびネットワークをクラスターのリソースとして構成します。

ファイルシステムリソースの場合、iSCSIストレージからの共有ストレージを使用します。

ホスト名 IPアドレス OS 目的
node1.itzgeek.local 192.168.0.11 CentOS 8 クラスターノード1
node2.itzgeek.local 192.168.0.12 クラスターノード2
storage.itzgeek.local 192.168.0.20 iSCSI共有ストレージ
192.168.0.100 仮想クラスターIP(Apache)

すべて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
  1. CentOS 7 /RHEL7でSysLogサーバーをセットアップする方法

  2. CentOS 7 /RHEL7でNFSサーバーをセットアップする方法

  3. CentOS 7 /RHEL7でIcingaWeb2をセットアップする方法

  1. CentOS7でPacemakerを使用してNginx高可用性クラスターをセットアップする方法

  2. CentOS/RHEL で mutt をセットアップする方法

  3. CentOS/RHEL 7 で squid プロキシ サーバーをセットアップする方法

  1. CentOS 7 /RHEL7でGlusterFSストレージをセットアップする方法

  2. RHEL 8 /CentOS8でマルチノードElasticStackClusterをセットアップする方法

  3. CentOS 8 /RHEL8でNFSサーバーをセットアップする方法