仮想マシンの vMotion が失敗する。しかも、vCenter のサービスが立ち上がって来ない

<景品表示法に基づく表記> 本サイトのコンテンツには、商品プロモーションが含まれている場合があります。

vMotion に失敗する

VCSA 6.0(vCenter Server Appliance)からゲストOSを移動させようとすると、エラーが出力され起動できませんでした。

A general system error occurred: PBM error occurred during 
PreMigrateCheckCallback: No connection could be made because the target machine actively refused it.
ゲストOSの移動時に表示されたエラー

この問題は、Profile-Driven Storage サービスが稼働していない場合に発生するようなので、簡単に復旧出来ると思っていたら大間違いでした。

vCenterにログインしてサービスを起動させる

vCenter で[BASH Shell]と[SSH]を有効化

ダイレクトコンソール ユーザーインターフェース(DCUI) の画面で [F2] を押して、システムのカスタマイズ メニューにアクセスしユーザー名とパスワードを入力します。

ダイレクトコンソールのログイン画面
ダイレクトコンソール(ログイン画面)

[Troubleshooting Mode Options] を選択します。

ダイレクトコンソール(メニュー)
ダイレクトコンソール(メニュー)

[BASH Shell]と[SSH]を有効化します。[Enter]キーで有効/無効が切替ります。

ダイレクトコンソール(SSH有効化)
ダイレクトコンソール(SSH有効化)

コマンドを実行するが失敗する

SSHにてリモート接続し、コマンドを実行するもエラーが出力されサービスを起動することが出来ず。

# shell
#
# service-control --start vmware-sps
INFO:root:Service: vmware-sps, Action: start
Service: vmware-sps, Action: start
2017-12-21T01:26:11.565Z   Running command: ['/sbin/chkconfig', u'vmware-sps']
2017-12-21T01:26:11.633Z   Done running command
2017-12-21T01:26:11.634Z   Running command: ['/sbin/service', u'vmware-sps', 'status']
2017-12-21T01:26:11.762Z   Done running command
2017-12-21T01:26:11.762Z   Running command: ['/sbin/chkconfig', '--force', u'vmware-sps', 'on']
2017-12-21T01:26:11.809Z   Done running command
2017-12-21T01:26:11.809Z   Running command: ['/sbin/service', u'vmware-sps', 'start']
2017-12-21T01:26:15.522Z   Done running command
2017-12-21T01:26:15.522Z   Invoked command: ['/sbin/service', u'vmware-sps', 'start']
2017-12-21T01:26:15.523Z   RC = 1
Stdout = Starting VMware vSphere Profile-Driven Storage Service...
Waiting for VMware vSphere Profile-Driven Storage Service......
WARNING: VMware vSphere Profile-Driven Storage Service may have failed to start.

Stderr =
2017-12-21T01:26:15.523Z   {
    "resolution": null,
    "detail": [
        {
            "args": [
                "Command: ['/sbin/service', u'vmware-sps', 'start']\nStderr: "
            ],
            "id": "install.ciscommon.command.errinvoke",
            "localized": "An error occurred while invoking external command : 'Command: ['/sbin/service', u'vmware-sps', 'start']\nStderr: '",
            "translatable": "An error occurred while invoking external command : '%(0)s'"
        }
    ],
    "componentKey": null,
    "problemId": null
}
ERROR:root:Unable to start service vmware-sps, Exception: {
    "resolution": null,
    "detail": [
        {
            "args": [
                "vmware-sps"
            ],
            "id": "install.ciscommon.service.failstart",
            "localized": "An error occurred while starting service 'vmware-sps'",
            "translatable": "An error occurred while starting service '%(0)s'"
        }
    ],
    "componentKey": null,
    "problemId": null
}
Unable to start service vmware-sps, Exception: {
    "resolution": null,
    "detail": [
        {
            "args": [
                "vmware-sps"
            ],
            "id": "install.ciscommon.service.failstart",
            "localized": "An error occurred while starting service 'vmware-sps'",
            "translatable": "An error occurred while starting service '%(0)s'"
        }
    ],
    "componentKey": null,
    "problemId": null
}
コマンド実行(失敗)

原因の調査

調査したところ、/usr/lib/vmware-vpx/sps/conf/pbm.properties の情報が正しくないため、VMware vSphere Profile-Driven Storage Service の起動に失敗していました。

本来、/usr/lib/vmware-vpx/sps/conf/pbm.properties は、数十行のエントリで構成されているものが、何故かホスト名が記載された1行のみになっていました。

設定ファイルを修復する

/usr/lib/vmware-vpx/sps/conf/pbm.properties を再作成することにしました。

pbm_server_guid の値を確認します。

1. /storage/invsvc/xdb/xdb.bootstrap を開き、
"PBMCapabilityMetadataProvider:com.vmware.storageprofile.std.1.0:com.vmware.storageprofile.std:"
が記載されている行を確認します。

例)
<segment id="31478cdd-dca9-4c87-b799-b25e63657dff" temp="false" version="1" state="read_write" usage="detachable_root" usable="true" library-path="/PBM/urn:vmomi:PBMCapabilityMetadataProvider:com.vmware.storageprofile.std.1.0:com.vmware.stora
geprofile.std:5f154091-69f7-427b-beee-fd41c06c486" library-id="17">

2. 上記文字列が記載されている行の GUID を記録します。
上記例の場合、GUID は "5f154091-69f7-427b-beee-fd41c06c486" です。
pbm_server_guid 値の確認

ファイルのバックアップを取得します

/usr/lib/vmware-vpx/sps/conf/pbm.properties ファイルのバックアップを取得します

# cd /usr/lib/vmware-vpx/sps/conf/
# cp -p ./pbm.properties ./pbm.properties_bkup
ファイルのバックアップ

ファイルを書き換えます

/usr/lib/vmware-vpx/sps/conf/pbm.properties ファイルを書き換えます。

例)
# cd /usr/lib/vmware-vpx/sps/conf/
# vi ./pbm.properties
ファイルの書き換え

※[pbm_server_guid] の項目には確認した GUID を入力します。
※pbm.http.port や pbm.https.port を変更している場合、適切な値に変更します。
・pbm.http.port の値は /etc/vmware/install-defaults/sps.int.pbmhttp
・pbm.https.port の値は /etc/vmware/install-defaults/sps.int.pbmhttps

pbm.http.port = 8190
pbm.https.port = 8191
pbm.serverGuid = [pbm_server_guid]
pbm.ServerUrl = localhost
# number of retries when connecting to vpxd and inventory services (Set -1 for infinite attempts)
pbm.connectionRetryAttemps = -1
# retry intervals when connecting to vpxd and inventory services(ms)
pbm.connectionRetryInterval = 10000
# default time (in seconds) between IS feed polling attempts
pbm.defaultPollingPeriod = 20
# Wait time(ms) before updating rollup on associate
pbm.updateRollupOnAssociateInterval = 0
# Batch size for checkCompliance invocation.
pbm.complianceCheckBatchSize = 50
# Batch size for fetchCompliance invocation
pbm.fetchComplianceCheckBatchSize = 100
# Sleep interval (secs) before checking compliance for next batch
pbm.complianceCheckBatchSleepInterval = 1
# Initial delay (secs) before compliance checker background thread starts
pbm.complianceCheckerInitialDelay = 3600
# Polling interval (secs) for compliance checker background thread.
# Currently set to every 8 hour.
pbm.complianceCheckerPollingPeriod = 28800
# Batch size for dissociate operation triggered when VM/VMDK deletion is detected in VC
pbm.dissociateBatchSize = 50
# Batch size for changeAssociations.
pbm.changeAssociationsBatchSize = 5000
# Batch size for querying virtual disks.
pbm.queryCurrentVDisksBatchSize = 100
# Batch size for stale association cleanup background thread
pbm.staleAssociationCleanupBatchSize = 50
# Max delay in secs between retries for scheduling PBM QS publisher thread
pbm.pbmQsPublisherMaxDelayBetweenRetryInSecs = 32
# The maximum capacity of the publisher queue.
pbm.publisherQueueCapacity = 1000
# The number of stripes to be used for rollup compliance locks.
pbm.rollupComplianceNumOfStripedLocks = 1024
# pbm keystore properties
cm.url = http:\/\/localhost:18090\/cm\/sdk\/?hostid=28878228-8993-4d60-92e5-2cf45266dd9b
pbm.KeyStorePath = \/etc\/vmware-sps\/ssl\/sms.keystore
pbm.TrustStorePath = \/etc\/vmware-sps\/ssl\/sms.truststore
pbm.KeyAlias = vpxd-extension
pbm.KeyStoreName = vpxd-extension
pbm.TrustStoreName = TRUSTED_ROOTS
pbm.KeyStorePassword = None
# pbm extension key and url entry
pbm.extensionKey = com.vmware.vim.sps
pbm.proxy.entry = \/pbm
# Update interval for privileges and roles in Pbm Authentication Validator in seconds.
pbm.auth.updateInterval = 300
# maximum number of attempts VCNotificationService connects to VC. Set to a value >= 1.
pbm.VCNotificationService.maxAttempts = 3
# time in seconds between successive attempts when VCNotificationService connects to VC
pbm.VCNotificationService.sleepIntervalSecs = 3
#
# Log4j configuration
#
log4j.rootCategory = DEBUG,console,file
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold = INFO
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d %C [%t] %p %c - %m%n
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File = pbm.log
log4j.appender.file.Append = true
log4j.appender.file.Threshold = TRACE
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d %C [%t] %p %c - %m%n
log4j.appender.file.MaxFileSize = 10MB
log4j.appender.file.MaxBackupIndex = 10
# feature specific kill switches
pbm.isIOFilterEnabled = true
設定ファイルの内容

サービスの起動

Profile driven storage サービスの起動を実施します

# service-control --start vmware-sps
サービスの起動

無事にサービスが起動し vMotion が実行出来るようになりました。