復元・復旧サービス充実!(有)フロンティア・オンライン

復元・復旧サービス充実!(有)フロンティア・オンライン

【プレイべートクラウド】Cloudstack 4.17.1 to 4.18.1 Fix

今回のUpgrade、あちらこちらでCloudstack Managementが正常起動しない問題の記事を見ました。

そんな記事を確認しないで、実施したら、私もコケましたので、そのコケ具合と回復手順を紹介。

【1】公式通りにアップグレードする

cloudstack.apacheにある通り「Upgrade Instruction from 4.17.x」を実施する。

指示通り行えば、毎度、そう問題もなく稼働してくれてましたが・・・、今回はおかしなことになりました。汗

Caused by: java.sql.SQLSyntaxErrorException: Table 'cloud.autoscale_vmgroup_vm_map' doesn't exist

at com.cloud.utils.db.ScriptRunner.runScript(ScriptRunner.java:185)

at com.cloud.utils.db.ScriptRunner.runScript(ScriptRunner.java:87)

at com.cloud.upgrade.DatabaseUpgradeChecker.runScript(DatabaseUpgradeChecker.java:228)

... 52 more

2023-10-08 11:56:18,768 DEBUG [c.c.u.d.T.Transaction] (main:null) (logid:) Rolling back the transaction: Time = 3367 Name =  Upgrade; called by -TransactionLegacy.rollback:888-TransactionLegacy.removeUpTo:831-TransactionLegacy.close:655-DatabaseUpgradeChecker.upgrade:327-DatabaseUpgradeChecker.check:403-CloudStackExtendedLifeCycle.checkIntegrity:64-CloudStackExtendedLifeCycle.start:54-DefaultLifecycleProcessor.doStart:178-DefaultLifecycleProcessor.access$200:54-DefaultLifecycleProcessor$LifecycleGroup.start:356-Iterable.forEach:75-DefaultLifecycleProcessor.startBeans:155

ん?

4.18系へのデータベースアップグレードが失敗するみたいです。

とりあえず、「service restart cloudstack-management」してみます。

2023-10-08 12:40:09,667 ERROR [c.c.u.d.ScriptRunner] (main:null) (logid:) Error executing: ALTER TABLE `cloud`.`networks` ADD COLUMN `public_mtu` bigint unsigned comment "MTU for VR public interface"  

・・・

Caused by: java.sql.SQLSyntaxErrorException: Duplicate column name 'public_mtu'

at com.cloud.utils.db.ScriptRunner.runScript(ScriptRunner.java:185)

at com.cloud.utils.db.ScriptRunner.runScript(ScriptRunner.java:87)

at com.cloud.upgrade.DatabaseUpgradeChecker.runScript(DatabaseUpgradeChecker.java:228)

... 52 more

2023-10-08 12:40:09,737 DEBUG [c.c.u.d.T.Transaction] (main:null) (logid:) Rolling back the transaction: Time = 273 Name =  Upgrade; called by -TransactionLegacy.rollback:888-TransactionLegacy.removeUpTo:831-TransactionLegacy.close:655-DatabaseUpgradeChecker.upgrade:327-DatabaseUpgradeChecker.check:403-CloudStackExtendedLifeCycle.checkIntegrity:64-CloudStackExtendedLifeCycle.start:54-DefaultLifecycleProcessor.doStart:178-DefaultLifecycleProcessor.access$200:54-DefaultLifecycleProcessor$LifecycleGroup.start:356-Iterable.forEach:75-DefaultLifecycleProcessor.startBeans:155

んん??

え~?ちゃんとロールバックされてないよ・・・。汗

【2】github:apache/cloudstackへ

この感じ、手元のCloudstackに問題があるというよりは、v4.18.1のDatabase Upgradeにバグがありそうなので、手直しして使います。

(4.17系に戻したくないので・・・)

Apache CloudStack 4.18.1.0 (LTS)からソースをダウンロード。

(a)autoscale_vmgroup_vm_mapの手がかり

探したら、

cloudstack-4.18.1.0\engine\schema\src\main\resources\META-INF\db\schema-40to410.sql

に「CREATE TABLE `cloud`.`autoscale_vmgroup_vm_map`」がありました。

(b)public_mtuの手がかり

こちらの問題は、(a)のロールバックが効かない問題で発現してるだけだろうから、手がかりは探さずALTER TABLEで元に戻すことにします。

【3】手直し実施

cloudstack management serverにsshして、mysqlコマンドで直すことになります。

# mysql cloud  -u cloud -p

Enter password:

MariaDB [cloud]>

(a)autoscale_vmgroup_vm_map流し込み

schema-40to410.sqlから「CREATE TABLE `cloud`.`autoscale_vmgroup_vm_map` ...;」のスクリプトを実行して終わり。

(b)public_mtu等

こっちは、(a)に当たる前のロールバックしなかったSQLスクリプトです。次のスクリプトを実施すると良いようです。

ALTER TABLE `cloud`.`networks` DROP COLUMN `public_mtu`;

ALTER TABLE `cloud`.`networks` DROP COLUMN `private_mtu` ;

ALTER TABLE `cloud`.`vpc` DROP COLUMN `public_mtu` ;

ALTER TABLE `cloud`.`nics` DROP COLUMN `mtu`;

ALTER TABLE `cloud`.`load_balancing_rules` DROP COLUMN `cidr_list`;

ALTER TABLE `cloud`.`networks` DROP COLUMN `ip6dns1`;

ALTER TABLE `cloud`.`networks` DROP COLUMN `ip6dns2`;

ALTER TABLE `cloud`.`vpc` DROP COLUMN `dns1`;

ALTER TABLE `cloud`.`vpc` DROP COLUMN `dns2`;

ALTER TABLE `cloud`.`vpc` DROP COLUMN `ip6dns1`;

ALTER TABLE `cloud`.`vpc` DROP COLUMN `ip6dns2`;

【4】4.18.1 Management起動

# service cloudstack-management start

# service cloudstack-usage start


ふぅ、行けました。

ラベル名の日本語化が一部外れているのは気にしない。汗

日常使う管理機能は動いているし、これで仮想サーバのアップグレードも進めることができるようになりました。