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

CentOS 7 /RHEL7で高可用性クラスターを構成する方法

高可用性クラスター、別名フェールオーバークラスター(アクティブ-パッシブクラスター)は、実稼働環境で最も広く使用されているクラスタータイプの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
  1. CentOS / RHEL 7 :キャッシュのみのネームサーバーを構成する方法

  2. CentOS / RHEL 6,7 :hugepage の設定方法

  3. CentOS/RHEL/Fedora でプロキシを構成する方法

  1. RHEL 8 /CentOS8で仮想ネットワークインターフェイスを構成する方法

  2. RHEL 8 /CentOS8にsambaをインストールして設定する方法

  3. CentOS/RHEL 8 で firewalld ロギングを構成する方法

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

  2. CentOS 8 /RHEL8でRsyslogサーバーを構成する方法

  3. RHEL 8 /CentOS8で静的IPアドレスを構成する方法