2018年7月9日月曜日

AHV Turboモードによる高速I/O処理(その2)RHE7.2以降でAHV Turbo推奨利用の方法

前回はAHV Turboを利用するために推奨されるカーネルパラメーターがそもそも対応しているかの確認を行ってみました。
前回の記事通り、Redhat Enterprise Linux7.2(CentOS7.2)以降であれば、「scsi_mod.use_blk_mq」のパラメーターは利用可能となっていますが、デフォルトで無効になっています。

では、今回はこのパラメーターを有効にする方法をご紹介します。

まず、「scsi_mod.use_blk_mq」 は、カーネルパラメーターであることから、「/etc/sysctl.conf」に記載するイメージがありますが、このパラメーターは異なります。

このパラメーターはI/O処理にかかわるため、Linuxカーネル起動時に設定する必要があります。つまり、grubの設定に入れる必要があります。

では具体的に設定内容を見ていきたいと思います。

まず、grubファイルを編集します。
vi /etc/default/grub

もともとは以下のように記載されています。
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

これを以下のように変更します。
(GRUB_CMDLINE_LINUXに追加します)
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb scsi_mod.use_blk_mq=Y dm_mod.use_blk_mq=Y quiet"
GRUB_DISABLE_RECOVERY="true"

以下の2つのキーワードを、「GRIB_CMDLINE_LINUX」のquietより前に入れます。
挿入するパラメーター
  • scsi_mod.use_blk_mq=Y 
  • dm_mod.use_blk_mq=Y

パラメーターを追加後、作成したgrubファイルを適用する必要がありますが、Ubuntuでおなじみの「grub2-mkconfig」というコマンドをどうもCentOS(RHEL)では入っていないようです。
そのため直接GRUBファイルを作成するため、以下のコマンドを実行します。
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg

その後OSを再起動します。
reboot

さて再起動後にパラメーターが正しく反映されたかを確認します。
cat /sys/module/scsi_mod/parameters/use_blk_mq
cat /sys/module/scsi_mod/parameters/dm_mod.use_blk_mq

いずれも結果に以下のようにYと帰ってくれば正しく反映されています。
Y

これで、AHV Turboの対応は完了です。

さらに高速になったAHV Turboをぜひ体感してみてください。



2018年7月8日日曜日

AHV Turboモードによる高速I/O処理(その1)AHV Turboの推奨利用条件を確認

AHVにおけるI/Oのさらなる高速化技術として、AHV Turboモードがリリースされました。この機能によりAHVでのI/O性能が格段に上がると言われています。
Turboモードは(Frodo)という名前で開発されていたもので、今までQEMUを介してI/O処理をする部分をマルチキューで処理できるように変えたエンジンです。
アーキテクチャーの詳細は、こちらをごらんください。

機能的に早くなるのであればすぐ使いたいと思うのが人間の心理でありますが、この機能は標準で実装されていますが、LinuxOSの仮想マシンに対してAHV Turboを最大限に利用するためにあ一定の条件が必要となります。

その条件や実際の利用するまでのところを見ていきたいと思います。
AHV Turboの推奨利用条件
  • AOS5.5以上(必須)
  • Linux Kernel 3.17以上(もちろん4系にも対応)
  • 仮想マシンのOSがLinuxのみ
  • scsi_mod.use_blk_mqの有効化
という条件になります。
一つ目のAOSバージョンは特に問題が無いと思いますが、2番目のKernelバージョンの問題はちょっとややこしいです。Redhat Enterprise Linux(RHEL)はベースカーネルバージョンは、「3.10.0」(RHEL7.5の場合)であり、3.17に達していません。
ただ、そこはまり心配しなくても良いです。RHEL7.2から、「scsi_mod.use_blk_mq」の対応がなされていると記載があります。

(参考)RHEL7.2 リリースノート

ただ、こちらには、
「scsi-mq を有効にするにはカーネルコマンドラインで scsi_mod.use_blk_mq=y を指定します。デフォルト値は n (無効) です。」と書いてあり、デフォルトでは無効であることが記載されています。つまり手動で有効化する必要があります。

では、RHEL6系のユーザーやRHEL7.1までのユーザーの場合はどうすれば良いかというと、現状では、そのままの手法ではTurboモードは利用できません。
カーネルを新しいバージョンに入れ替える必要があります。

今回はこの「scsi_mod.use_blk_mq」を有効にするための手法を数回に分けてご紹介したいと思います。

まず、この「scsi_mod.use_blk_mq」が、現時点で有効かを確認してみたいと思います。

Linuxのシェル画面で、以下のコマンドを入力します。
cat /sys/module/scsi_mod/parameters/use_blk_mq
これを入力して、「そのようなファイルやディレクトリはありません」 と言われた場合は、そもそもカーネルバージョンがこのパラメーターに対応していない可能性が高いです。

以下のコマンドでカーネルバージョンを確認してみます。
uname -a
で、カーネルバージョンを確認してみましょう。

一方で、「Y」と出てきた場合は、scsi_mod.use_blk_mq=yが有効になっていますので、そのままAHV Turboが利用できている状態となります。
では、「N」と出てきた場合は、パラメーター設定をすることでAHV Turboを利用することができます。

次回は、このパラメーターの有効化についてお話ししたいと思います。







2018年7月1日日曜日

NutanixのVSS連携バックアップについて

Nutanixには、バックアップ機能が無いと思われている方もいますが、Nutanixはストレージベースのスナップショットを取得できる機能を保有しています。
装置内のスナップショットだけではバックアップにならないと思われる方もいるかと思いますが、Nutanixはスナップショットのレプリケーションが出来ますので、バックアップとして利用することが出来ます。

このスナップショット取得機能には、WindowsのVSSと連携して静止点を取得する機能があります。今回はこのVSS連携についてお話をしたいと思います。

VSSはご存じの通りWindows Server 2003以降に搭載された、静止点を取得するための仕組みです。これをNutanixからコールすることにより、アプリケーションの書き込みなどを一時的に止めて静止点(データーの書き込み途中といった状況が存在しないようにする)を作りその間にスナップショットを取得します。
これにより、リストアした際にデーターが壊れていたといったことを防ぐことが出来ます。

vSphereとバックアップソフトウェアの場合、vShereのスナップショット機能を利用して、静止点を取得しますが、Nutanixはマルチハイパーバイザー対応機器ですので、特定のハイパーバイザーに依存せずこのVSS連携によるスナップショット取得が出来るように独自の実装がなされています。

まず、VSS連携を利用するためには、
  • 仮想マシンにNutanix Guest Toolsをインストール
  • Nutanix Cluster VIPと2074/TCPで通信可能であること
が条件となります。
また、ABSを利用して外部からiSCSIのボリュームをマウントした物理マシンに対するiSCSIボリュームの静止点取得は出来ません。(Nutanix上で動作している仮想マシンかVolume Serviceを利用してiSCSIマウントしたボリュームは静止点の取得が可能です)

では、早速このVSSキックまでの動きを見てみたいと思います。
今回はAHVの環境(AOS5.6.1)に、Windows Server 2016をインストールしその上でSQL Server 2017 Standardが稼働する環境を用意しました。

1.VSSで静止点を取得したい仮想マシンにNGTをインストールします。
インストールの方法は簡単です。Prism画面からISOをマウントしてインストーラーに従います。少々古いですがインストール方法はこちらを参照してください。

インストールが終わったら、Windowsの仮想マシンにサービスが入ったことを確認します。(Self Service RestoreとGuest Tools Agentがインストールされている)


2.Nutanix Prism側で仮想マシンにVSSサービスを設定
Prismから、VSSを遊行したいか総マシンを選択し、Manage Guest Toolsをクリックします。


Enable Nutanix Guest Toolsと「Volume Snapshot Service / Application Consistent Snapshot(VSS)」にチェックを入れます。

これにより、VSS機能が利用できる状態となりました。

3.DataProtectionで、VSSキックを設定。
DataProtectionからいつものように仮想マシンを登録します。
仮想マシンを登録する際に「Use application consistent snapshot」にチェックを入れて「Protect Selected Entities」をクリックします。

この場合、仮想マシン名の後ろに「●」が表示されます。この●にマウスポインターを当てると、「The group targets application consistent snapshots.」と表示されます。

4.あとはスケジュールをまつだけ...
まつだけなのですが、実際に動作した場合に正しく動作しているかを確認してみましょう。

Nutanix側から7/1 10:39にスナップショット取得イベントを走らせました。
そのタイミングのイベントログを見ていると、Nutanix VSS Providerが呼ばれたことが記録されています。




10時39分31秒~44秒のあいだにVSSが動作したことがわかります。
PrismのDataProtection画面からスナップショットの時間を見てみると「10時39分44秒」であることがわかりますので、静止点を取得した後に、VSS Providerが停止したことがわかります。



では、SQL Serverのログも見てみましょう。
SQL Management Studioでログを見てみると、VSS経由でI/O処理が一時的に中断状態になったことが記録されています。

このログを見ると、10:39:42の時点で、I/Oの処理中断は解除され、バックアップに成功したと記録が出ています。これはこの時点での静止点取得が出来たことを表しています。

Nutanixのドキュメントには、VSSに対応しているという記載はSQL Server 2012までしか記載がありませんが、VSSの動作にきちんと対応していれば、基本問題なく動作することがこの事からもよくわかるかと思います。

VSS連携は、バックアップにおける基本機能ですが、このVSSを呼び静止点を取得できるバックアップ機能をNutanixは標準機能で装備しているので、別にバックアップソフトウェアを購入することもなくきちんとしたバックアップが出来るのは大きな魅力だと思います。