Ryzen7でファイルサーバー兼ovirt-engineを組む(その2)

oVirtって何さ

oVirtはvmware社のvSphereとだいたい同じ位置づけの仮想化統合基盤でOSSである。ESXiに相当するのがoVirt-nodeでvCentreに相当するのがoVirt-engineかな。oVirtを商用サポートしたのがRHEVでoVirt開発のほとんどがRH社員で構成されている。

ああ、そんなこと聞いているんじゃないってことは判っているさ。oVirtは誤自宅で構築できるパーソナルクラウドもできる基盤だよ。しかもサーバー1台でも構築できちゃうんだぜ。

誤自宅のoVirtの構成

今回マザーボードが故障したため、CPUをcore i7-3770KかRyzen7 2700Xにアーキを変更してコア数とメモリが倍に増えた。なんで増強しているかというと、ファイルサーバーの余ったCPUパワーを仮想サーバーに振ることができるからさ。

OSCentOS 7.6
ファイルサーバーNFS / iSCSI / FCP 基本はNFS
管理DBPostgreSQL
ハイパーバイザーKVMベース(KVM + qemu, livbirt, VDSM)
管理ovirt-engine

構築/設定は簡単

具体的な手順はいろいろなサイトにあるので多くは語らないけれど環境だけなら1台のPCで作れるし、管理側のメモリ利用量は4GB程度なので2つ3つくらいのVMは余裕で作れる。

  1. CentOS のインストールと最新化
  2. 内向けDNSにホスト登録 (/etc/hostsにFQDNを書いて頑張ってもよい)
  3. ファイルサーバーとしてnfsを構築&firewall-cmdでポート開放 サービス起動とexportsの設定(2つ必要でVMイメージ保存用とインストールなどで用いるISOイメージ保存用)
  4. ovirtのリポジトリ情報をインストール(2019/5時点の最新は4.3)
  5. ovirt-engineをインストール
  6. engine-setupコマンドで基本構成を組む(自ホストが管理サーバでDBも抱えるように問いに答えるだけ)
  7. 自動で構築開始、PostgreSQLやfirewall-cmdが自動でセットアップされる
  8. 管理WEBから自ホストが仮想サーバーであるとして登録、KVMなどが自動でセットアップされる
  9. 必要ならホストのネットワーク設定を実施する
  10. ストレージドメインとして3で作ったnfsストレージを登録する
  11. イメージデータバックアップ用として別サーバーにnfsを用意してエキスポートドメインとして登録する

Ryzen7 2700X oVirt(qemu)での認識

AMD EPYC OBPB SSBD としてCPUのアーキタイプが登録される。これってEPYCのアーキで例の投機的実行に関する脆弱性対策が2つとも打たれているCPUだよっていう意味だ。コア数がめちゃくちゃ少ないEPYCですかね。それEPYCといわないと思うが、アーキ的には同じなのかね。

逆にこれまでのcore i7-3770Kが速いSandyBridgeではなくWestmareとか認識されていて、coreアーキがスポイルされていたからうれしい限り。うちの管理画面をちょっと見せます。

Ryzen7でファイルサーバー兼ovirt-engineを組む

Ivy-Bridge マザーが動かなくなった

ファイルサーバー兼 oVirt engineのサーバーのマザーが何もしていないのに壊れた。6年動作したので半導体寿命でしょう。BIOS起動時にメモリー認識に失敗するようになり、USBも認識失敗してキーボードも認識しなくなった。メモリーの接点復活などを試みても回復しないのであきらめて新アーキテクチャにトライしようと決めた。

Ryzen7 2700Xってメニーコアでコスパいい

これまではIvy-Bridge core i7-3770Kを殻割して4core 8threadを4.4GHzで動作させていた。今回は殻割はしないけれどRyzen7 2700Xの8core 16threadを常時4.1GHzで動作させる。メモリもDDR4になるので16GBx4 3200MHzで組む。ファイルサーバーとしては盛り過ぎだけれどovirt-engineでなおかつホストサーバーとしても動作させるならいいんじゃないかと思うんだ。

マザーボード選びが難しい

うちのLANは10GbEだ。Ryzen7 2700XはiGPUのようなビデオを内蔵していない。ファイルサーバーなのでRAIDアレイボードもしくはHBAが必要だ。つまるところx8のPCIeが3つほしい。最新のNICだとGen3 x4なのだがX540-T2はGen2 x8なので厄介者だ。

PCIeのポート数が24あるRyzen7 gen2でもハヤリはNVMeでx4を奪ったりするのでPCIeのスロットはx8 を2つ+ x4を1つとか x8 を2つ x1を4つとか貧弱である。物理形状でx16スロットが3つあるのが少ないのと3つ目はGen2 x4とかいいだすのでかなり厳しい。

それなのにGPUにでたばかりのGTX1660を買ってしまった。10GbEのNICの帯域が絶対的に足りない!あとでGPUをx4のGT1030に買い換えようかな。

ハードウェア構成

マザーはPCIe x16のスロットが2本しかないものを購入してしまい初日からつまづいた。買い足したのだが、PCIeスロット3本目はチップセット配下のものしかないようで、Gen2 x4しかなかった。この場合、3本目になにを挿すかだがマザー最下段のため、1スロット幅のものしか挿入できない。結局はX540-T2をいれるしかなかった。

MOTHERASUS PRIME X470-PRO
CPURyzen7 2700X@4.1GHz常用
MEMDDR4 16GB x43200MHz
PCIe #1GTX1660Gen3 x8
PCIe #2ASR71605Gen3 x8
PCIe #3X540-T2Gen2 x4
SSD2.5in SSD 256GB x2RAID0
HDD3.5in HDD 3TB x16RAID60

CentOSでCockpitを導入するとsubscription-managerに登録しろと指摘されるのを解消する

エラーではない

うちのCentOS 7 + oVirt4ではブラウザから様々な設定作業を行うためCockpitが導入されている。ovirt-engineをインストールすると依存関係で一括導入されるのだけれど、yum updateを実行すると

This system is not registered with an entitlement server. You can use subscription-manager to register.

Uploading Enabled Repositories Report
Cannot upload enabled repos report, is this client registered?

といった、何やらサブスクリプションマネージャーで登録しないといけないっぽいメッセージが表示される。これはエラーではなく情報なので気にしなくてもいい。だけれど、毎度毎度出てきてボクの心をざわつかせるので表示を消したいと思う。

手順は2つのファイルを編集してenable=0にするだけである。

# vi /etc/yum/pluginconf.d/subscription-manager.conf
[main]
enabled=0
# vi /etc/yum/pluginconf.d/enabled_repos_upload.conf
[main]
enabled=0
supress_debug=False
supress_errors=False

oVirt のengine-backup script

backup-image

全バックアップのスクリプト

oVirt engineの databese とDWH の databaseを万が一のために毎日フルバックアップする。フルバックアップといってもデータ量はさほど大きくない。

#!/usr/bin/bash
#
# oVirt engine database & DWH database all backup
# /mnt/PublicはNAS上のnfs
#
/usr/bin/engine-backup --mode=backup --scope=all --file="/mnt/Public/ovirt/backups/engine-backup-$(hostname)-$(date +%F).tar.bz2" --log=/mnt/Public/ovirt/backups/ovirt-engine-backups.log

# 1週間以上前のバックアップファイルは削除する。ログは残す
find /mnt/Public/ovirt/backups/ -name "*.bz2" -mtime +7 -exec rm -rf -- {} \;

crontabに登録して毎日実行

スクリプトは毎日深夜に実行。うちのNASは夜1:00から別ファイルサーバーにrsyncしているのでその前に実施することとする。0:30くらいかな。

#crontab -e

# ovirt backup run daily at 0:30
30 0 * * * /root/tools/backupovirt.sh >/dev/null 2>&1

生成されると、バックアップファイルのアーカイブとログが残る。アーカイブはスクリプトによって1週間分のみ残る。ログは追記されるようだ。

-rw-r--r-- 1 root root 2151512 10月 27 13:39 engine-backup-green.team-boss.com-2018-10-27.tar.bz2
-rw-r--r-- 1 root root    3653 10月 27 13:39 ovirt-engine-backups.log

万が一に復元するときは

当然、バックアップしたのだから復元方法も記す。復元はDWHも復元するので少しパラメーターが増える。また、ドキュメントでは復元時にはDBの内容が入っていない状態でやるようにと記載されていた。ということはengine-setup前っていうことである。

# engine-backup --mode=restore --file=/mnt/Public/ovirt/backups/engine-backup-green.team-boss.com-2018-10-27.tar.bz2 --log=/mnt/Public/ovirt/backups/ovirt-engine-backups.log --provision-db --no-restore-permissions --provision-db --provision-dwh-db --provision-reports-db
Preparing to restore:
- Unpacking file '/mnt/Public/ovirt/backups/engine-backup-green.team-boss.com-2018-10-27.tar.bz2'
Restoring:
- Files
Provisioning PostgreSQL users/databases:
- user 'engine', database 'engine'
- user 'ovirt_engine_history', database 'ovirt_engine_history'
Restoring:
- Engine database 'engine'
  - Cleaning up temporary tables in engine database 'engine'
  - Updating DbJustRestored VdcOption in engine database
  - Resetting DwhCurrentlyRunning in dwh_history_timekeeping in engine database
  - Resetting HA VM status
------------------------------------------------------------------------------
Please note:

The engine database was backed up at 2018-10-27 00:30:03.000000000 +0900 .

Objects that were added, removed or changed after this date, such as virtual
machines, disks, etc., are missing in the engine, and will probably require
recovery or recreation.
------------------------------------------------------------------------------
- DWH database 'ovirt_engine_history'
You should now run engine-setup.
Done.

このバックアップはDBのみの退避であるため、DWHにあるドメインの各種イメージなどは退避されない。これは別の方法で実施することになる。

ovirt-engineとファイルが同じサーバーになるように構成して、なんらかの要因でストレージを飛ばしてしまったとき、イメージファイルも復元できないと何の効果もないので、くれぐれもバックアップは確実にとるように。

うちはファイルサーバーとovirt-engineが同じサーバーで構成されていて、イメージのあるLVを飛ばしてしまったときに泣いたよ。こんなときはDBを復元してもだめで、エクスポートドメインからのインポートでなんとか復活できた。

CentOS 7.5(1804)とoVirt 4.2の組み合わせで難儀する

oVirt 4.2ホストでCentOS 7.5アップグレード時にコンフリクト

CentOS 7.5(1804)が5/14にリリースされたので、各サーバーをyum upgradeしてみたところ、oVirt 4.2のホストでCockpit系パッケージとコンフリクト起こすようだ。

コンフリクトを起こすのはCockpitのNetworkManagerでoVirtの方が古いライブラリを必要としているのだが、CentOS7.5では新しいものに置き換わるのが理由らしい。コンフリクトを起こしたoVirtのパッケージを一時的にyum removeで削除したうえでyum upgradeを行い、続いて削除したパッケージをyum installしてあげれば解決する。

yum updateではうまく7.5にアップグレードできなかった。

#yum clean all
#yum upgrade
→cockpit-networkmanager-160でコンフリクト
#yum remove cockpit-networkmanager-160
#yum upgrade
#yum install cockpit-networkmanager
#yum install update   #念のため
#reboot

oVirt 4.2のVMとしてCentOS 7.5を新設時、guest-agentがインストールできない

VM動作している既設CentOS 7.4を7.5にupgradeする分には問題なかったが、CentOS 7.5をVMとして新規インストールし、ovirt-guest-agent-commonをインストールしようとしたところ、oVirtのミラーレポジトリで404のエラーが発生してインストールできない。該当するレポジトリファイルはCentOS-QEMU-EV.repoとCentOS-oVirt-4.2.repoで、baseurlを標準ミラーをコメントアウトし、たとえば日本のIIJのミラーに直接指定することで解消できた。

vi /etc/yum.repos.d/CentOS-QEMU-EV.repo

#baseurl=http://mirror.centos.org/$contentdir/$releasever/virt/$basearch/kvm-common/ コメントアウト
baseurl=http://ftp.iij.ad.jp/pub/linux/centos/$releasever/virt/$basearch/kvm-common/

上記同様にCentOS-oVirt-4.2.repoもbaseurlを書き換える。

最後のディレクトリが「kvm-common」ではなく「ovirt-4.2」に変わるだけだ。

どうも標準ミラーに$basearchに該当するx86_64ディレクトリがないのが原因らしい。oVirt 4.2は先月にリリースされたのでミラーされていないのは腑に落ちないのだが。日本サーバーにしておけばダウンロードも早いし問題ない。IIJだけでは不安というときはJAISTなども追加しておけばいい。