スマートスタイル TECH BLOG|データベース&クラウドの最新技術情報を配信

Oracle Grid Infrastructure を用いた MySQL Enterprise Edition HA構成 (その1:GI構築編)

その1:GI構築編
その2:MySQL構築編
その3:機能確認編

はじめに

MySQLの高可用性構成といえば、レプリケーションや MySQL InnoDB Cluster が主流ではありますが、、、
Oracle Clusterware + 共有ディスクを用いて、MySQL をシンプルなアクティブ・スタンバイ構成にすることができます。
構成の概要や、気になるライセンス、メリット・デメリットについては、Oracle社が公表されている資料(P4,14,15)をご覧ください。

Oracle Clusterware と聞くと、MySQL ユーザーにはあまり馴染みがないかもしれませんが、Oracle Real Application Cluster(RAC)の基盤を担っている Oracle Grid Infrastructure(GI) の一部ですので、その技術を用いたHA構成が組めることになります。

すでに2014年からMySQLについてもOracle Clusterwareは正式サポートしており、MySQLの高可用性構成を検討しているユーザーにとっては選択肢の1つになり得ます。

本記事では、実際に環境構築をしてみて、具体的な実装手順や主な機能の動作検証をレポートしていきます。
以下の内容で全3回の掲載を予定しています。

  • その1:GI構築編(本記事)
    • GIインストール
      • 準備、設定などの注意ポイント
      • サイレントインストールについて
    • ACFSファイルシステム作成、マウント
  • その2:MySQL構築編
    • MySQL 8.0 EE インストール
    • XAG Agent インストール
    • MySQLをクラスターリソースへ登録
  • その3:機能検証編(※内容は多少変更する可能性があります)
    • 高可用性の機能確認
      • リソース再配置(takeover)
      • 障害時挙動
        • mysqldクラッシュ,CRSスタック障害,サーバーダウン,NW障害,ACFS リソース障害
        • リソース戻し(failback)
    • 拡張性の機能確認
      • ACFS ボリューム拡張
      • MySQLインスタンス追加
    • その他気付いたことなど

今回構築した環境について

方針と前提条件は以下としています。

  • 冒頭で Oracle Clusteware と記載しましたが、実際は Oracle Clusterware + ASM(ACFS) になるので、本記事ではGrid Infrastructure(GI)と表記をまとめます。

  • GI のインストールについては、RAC をベースとしたナレッジが World Wideで多数ありますので、以下の観点で検証しています。

    • MySQL をクラスターリソースに組み込む前段階で、GIをどのように構成しておくか
    • MySQL をどのようにクラスターリソースに組み込むのかについて、Oracle Grid Infrastructure Agent 公式マニュアルの記載を元に手順を明確にする
  • KVM + Vagrant による仮想マシンで構築しており、共有ディスクもKVMのストレージボリュームで構成しています。
    ただし、本記事では KVM + Vagrant の使い方では特筆すべき内容はないため、Vagrantfile などの詳細な設定内容の掲載は割愛しました。

  • OSおよびソフトウェアは以下の通りです。

    • 前述のOracle社資料でも明記されている通り、サポートされる製品Edition(Oracle LinuxMySQL Enterprise Edition)の組み合わせ
      (そのため、Windows環境では未検証です)

環境構成図

基本的な全体構成は以下の通りとしました。

  • node1:プライマリ、node2:スタンバイ
  • MySQLは正系ホスト側で複数のインスタンスを稼働できるようする
  • ACFS は両系からマウント
[クリックして拡大]

OS、ストレージ、ソフトウェアの概要

  • Oracle Linux 7.6 (Oracle公式Vagrant Boxを利用)
    • Kernel
      • 上記BoxのデフォルトUEK5 4.14.35-1844.4.5.el7uek.x86_64 から UEK5 4.14.35-1902.5.2.1.el7uek.x86_64 へアップグレードしています。
        後述しますが、これは、今回検証で利用する ASM Filter Driver(AFD) のサポート対象とするための対応です。
    • 2 vCPUs, 3 GB RAM
      • RAM の GI インストール要件は 最小8GB推奨ですが、今回は検証用のため必要最低限を準備しました。
      • SWAP は 3GB 追加しています。
    • 3 NICs
      • うち、eth1=Public Network, eth2=Private Network
  • 共有ディスク : 14GB × 5
    • 冗長化レベルを標準(2重化)とするため、実効容量は (35GB – ASMメタデータ使用分)となります。
  • Oracle Grid Infrastructure 19.4.0 (19.3.0 + Patch 29708769 – GI Release Update 19.4.0.0.190716)
    • Patch 29708769 を適用していますが、これも上記の AFD サポートと対象とするための対応となります。
      詳細は1. GIインストール – ASM 用ディスクの準備にて後述します。
  • Oracle Grid Infrastructure Agent(XAG Agent) 9.1.2
  • MySQL 8.0.17 Enterprise Edition
    • V983227-01.zip : MySQL Database 8.0.17 Yum Repository TAR for Oracle Linux / RHEL 7 x86 (64bit)
    • V983202-01.zip : MySQL Commercial Server 8.0.17 TAR for Oracle Linux / RHEL 7 x86 (64bit)
      Oracle Software Delivery Cloud からダウンロード

1. GIインストール

Grid Infrastructureインストレーションおよびアップグレード・ガイド 19c for Linuxにしたがって、必要な設定を順次行っていきます。
詳細な手順は前述のとおり割愛させていただくものの、ここではいくつか気をつけなければいけないポイントを挙げておきます。

SCANについて

  • 本環境では実際には SCAN は利用しませんが、GIインストール時のみ必要な設定として、/etc/hosts ファイルに SCAN VIP の IPアドレスとホスト名を記述しておきます。
    以下の例では、hacluster-scan が SCAN VIPのエントリです。

    実際はインストール時に、ここで記載したSCAN VIPのホスト名を指定することで、構成ステップを進めることになります。

grid ユーザーについて

  • GIインストールユーザーを grid ユーザーにする場合は、Oracle Preinstallation RPM では作成されないので、手動で作成が必要です。ユーザー毎のリソース制限(limits)も忘れず設定しておきます。
  • ASM用グループ(asmadmin,asmoper,asmdba)は最小限 asmadmin があればインストールは支障ありません。

ASM 用ディスクの準備

  • ASM用のディスクはクラスターメンバーノードから共有ディスクとしてアクセスできるように接続しておきます。パーティションの作成は必要ありません。
    (本環境では、/dev/vda ~ vde のディスクデバイスとして認識されました)
  • ASM ディスクの認識、デバイスパスの永続化設定は、主に以下3つの手段があり、どれを利用しても構成可能です。

  • その AFD で ASM を認識させるためには、インストール実行前にあらかじめ AFD ラベルをディスクに付与する必要がありますが、3点注意が必要です。

  1. 設定手順について、マニュアルの記載は少し不足しており、ORACLE_HOMEだけでなく、ORACLE_BASEも以下のように設定しないと asmcmd が実行できません。

    ASM管理者ガイドの方には載っていました。

  2. マニュアルには明記されていない手順ですが、AFDのラベル付与を行った際にGIインストールディレクトリ配下のファイルオーナーが一部書き換わってしまい後述のGIインストール時にASMディスクを正しく認識できない可能性があるので、その予防対策を行っておきます。

  3. AFD をサポートする OS Kernel バージョンと GI バージョンの組み合わせでないと、AFD を使用することができません。
    今回の検証では、UEKのアップグレードと Release Update 19.4.0.0 のパッチ適用を行いましたが理由は以下となります。

    • OTN開発者ライセンスでダウンロードできるのは 19.3 ですが、上記 OS Kernel の項で述べた通り AFD サポート対象とするには
      Oracle Linux 7 UEK5 の場合は Kernel 4.14.35-1902.5.2.1, GI 19.3 + Patch 27494830 である必要があります。
    • ところが Patch 27494830 は 19.3.0 ではコンフリクトが発生するため、今回の検証ではその Bug Fix が含まれる Patch 29708769 - GI Release Update 19.4.0.0.190716 を適用しています。

    サポートマトリクスは My Oracle Support の以下のドキュメントをご確認ください。

    ASMFD (ASM Filter Driver) Support on OS Platforms (Certification Matrix). (ドキュメントID 2034681.1)

    ※My Oracle Support ドキュメントの閲覧、パッチのダウンロードにはOracleサポート契約が必要となりますのでご注意ください。

なお、実機上でAFDがサポートされているか(使用できるか)を確認するには以下のコマンドを実行します。

サイレントインストール

GIのインストール方式としては、GUI インストーラーCUIサイレントインストールが選択できます。
GUIのほうがメジャーですが、サイレントインストールは X Window 環境を用意する必要がなく汎用的で便利なので、今回はサイレントインストールを実施しました。

サイレントインストールでは、必要なパラメーターを記述するレスポンスファイルを事前に準備する必要があります。
GIインストールディレクトリ配下にデフォルトテンプレートファイルが格納されていますので、gridユーザーでコピーしてパラメーターを編集します。

RACやOracle Restartなど、他のGIのインストールタイプに応じてパラメーターを埋めるセクションが決まっており、初見ではどこを編集すればよいのかなかなか見分けがつけ辛いですが、テンプレートファイルのヘッダコメントに入力セクションの指示が書いてあります。
本構成では、以下の内容を埋めれば必要とするクラスターをインストールできます。

コメントに記述ルールも明記されていますので、それに沿ってパラメーターを入れていきます。
今回、実際に追記したパラメーターは以下の通りとなりました。

  • oracle.install.crs.config.gpnp.scanName にはあらかじめ hostsファイルに記入していた SCAN VIP 名を指定します。
  • oracle.install.crs.configureGIMRfalse にして、GIMR 無し構成にします。
  • ディスク5本全部使って DATA ディスクグループを作成しています。冗長レベルは標準(2重化)としました。このディスクグループに OCRと投票ディスクが格納されます。
  • oracle.install.asm.configureAFDtrueにして、AFD を有効化します。

サイレントインストールの実行コマンドは、マニュアルの記載が分かりづらいですが、以下のようになります。
事前に編集したレスポンスファイルを指定して、-silentオプションで実行します。
※下記コマンドの例では、サーバーのメモリ必要要件チェックを無視したいため -ignorePrereqFailureオプションをつけています。厳密なインストールを行いたいなどの場合は、オプションなしでご確認ください。

2. ACFSファイルシステム作成、マウント

MySQLのデータを格納する共有ファイルシステムとして、ASM 上で利用できる ASM Cluster File System(ACFS)を作成し、クラスターメンバーノードにマウントさせます。

GIをインストールした時点では ASM は構成されていますが、ACFS はユーザーが必要に応じて手動で作成しなくてはなりません。

DATA ディスクグループの残りの空き容量で、MySQL用の ACFS 領域を作成していきます。
asmcmd lsdg コマンドで、ASM ディスクグループの概要情報が確認できます。Usable_file_MB が冗長レベルを考慮した実際の空き容量になります。

今回、ACFSボリュームは以下のように切り出すことにしました。

ディスクグループ ボリューム名 サイズ 用途 マウントポイント
DATA ACFSVOL01 5G MySQL yum リポジトリ /u02/app/mysql/product
ACFSVOL02 10G MySQL インスタンス1 データ領域 /u02/app/mysql/datastore/instance1
(ACFSVOL03) (10G) (MySQL インスタンス2 データ領域) (/u02/app/mysql/datastore/instance2)

※ACFSVOL03はインスタンス2追加時の検証で作成する予定です。

早速 ACFSVOL01 を作成してみます。gridユーザーで実行します。

asmcmd volinfo コマンドで確認できる Volume Device のデバイスパスはボリューム作成時に決定されます。
このデバイスパスを指定して ACFS をフォーマットします。

マウントするクラスターメンバーノードにてマウントポイントを作成します。
今回は /u02/app/mysql 配下にマウントポイントを設けました。

最後にACFS をクラスタリソースに登録し、リソースを起動します。このコマンドは rootユーザーで実行する必要があります。

ora.data.acfsvol01.acfs というリソース名で、指定したマウントポイントにマウントされていることが確認できます。

df コマンドでも確認できます。

同じ手順で、ACFSVOL02 も作成し、クラスターリソースとして起動させました。

マウントポイントは /u02/app/mysql/datastore/instance1 としました。

作成した ACFS の領域内で、ファイルの作成や読み書き、削除ができることを確認できれば無事作成完了です。

今回はここまでとなります。

まとめ

  • 一般的な GI のインストール以外では、ACFSの構成を行いました。ASMのディスク構成やサイジングについてはMySQLのデータ量に加え、冗長化レベルディスクグループ・ACFSボリュームの切り方など事前に決定しておく必要があります。

  • 記事中では触れていませんでしたが、Oracle Clusterware を用いたHA構成で用いられる共有ディスクファイルシステムは少し前までは OCFS2が主な選択肢でした。
    ACFSはASM上のファイルシステムなので元々耐障害性を備えており、かつクラスターリソース管理されることが主なメリットですが、近年のバージョンアップによって対応可能なファイルタイプが増え、機能拡張や安定性も向上していることから今ではこの構成でACFSを利用しない理由はほとんどないのではと考えます。

  • 次回は、MySQL 8.0 EE を本環境にインストールし、XAG Agentを用いたクラスターリソースの構成方法を確認していきます。

MySQL
Return Top