免責事項:これは英文の記事「VPXD crashes due to ERROR: duplicate key value violates unique constraint "pk_nfle_file_info"」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。
vCenter Server データベース内の重複値が原因で VCDB がクラッシュする問題を解決します。
症状 -
VPXDがVCDB エラーでクラッシュします。
vpxd.log エントリ -
[YYYY-MM-DDTHH:MM:SS] error vpxd[58211] [Originator@6876 sub=Default opID=HB-host-434785@158686-60699ede] [Vdb::IsRecoverableErrorCode] Unable to recover from 23505:1[YYYY-MM-DDTHH:MM:SS] error vpxd[58211] [Originator@6876 sub=Default opID=HB-host-434785@158686-60699ede] [VdbStatement] SQLError was thrown: "ODBC error: (23505) - ERROR: duplicate key value violates unique constraint "pk_nfle_file_info"--> DETAIL: Key (vm_id, key_val)=(1285563, 0) already exists.;--> Error while executing the query" is returned when executing SQL statement "INSERT INTO VPX_NORM_VM_FLE_FILE_INFO (VM_ID,KEY_VAL,NAME,FILE_SIZE,FILE_UNIQUESIZE,TYPE) VALUES (?,?,?,?,?,?)"
VCDB内の重複した値により、VPXD サービスがクラッシュします。
注:ELM内のすべてのvCenterがシャットダウンされていることを確認し、バックアップ用に全ノードのスナップショットを作成してください。スタンドアロンのvCenterの場合は、パワーオフ状態のスナップショットで十分です。スナップショットのベストプラクティスについては、以下の記事をご覧ください。
vpxd ログから、影響を受けた VM_ID 値を特定した後、この問題を解決するには以下の手順に従う必要があります。
root 権限で vCenter Server に SSH 接続します。
VPXD サービスがまだクラッシュしていない場合は、停止します。
# service-control --stop vpxd
VCDB に接続します。
# /opt/vmware/vpostgres/current/bin/psql -d VCDB -U postgres
VCDB=# select id, file_name from vpx_vm where id = 1285563; id | file_name---------+---------------------------------------------------------------------------------------------------- 1285563 | ds:///vmfs/volumes/Datastore-UUID/VM_name/VM_name.vmx(1 row)
delete from VPX_COMPUTE_RESOURCE_DAS_VM where VM_ID=1285563;delete from VPX_COMPUTE_RESOURCE_DRS_VM where VM_ID=1285563;delete from VPX_COMPUTE_RESOURCE_ORC_VM where VM_ID=1285563;delete from VPX_VM_SGXINFO where VM_ID=1285563;delete from VPX_GUEST_DISK where VM_ID=1285563;delete from VPX_VM_VIRTUAL_DEVICE where ID=1285563;delete from VPX_VM_DS_SPACE where VM_ID=1285563;delete from VPX_NON_ORM_VM_CONFIG_INFO where ID=1285563;delete from VPX_NORM_VM_FLE_FILE_INFO where VM_ID=1285563;delete from VPX_VDEVICE_BACKING_REL where VM_ID=1285563;delete from VPX_VIRTUAL_DISK_IOFILTERS where VM_ID=1285563;delete from VPX_VM_STATIC_OVERHEAD_MAP where VM_ID=1285563;delete from VPX_VM_TEXT where VM_ID=1285563;delete from VPX_VM where ID=1285563;delete from VPX_ENTITY where ID=1285563;delete from VPX_DVPORT where connectee='vm-1285563';
VCDB=# \q
# service-control --start vpxd
注: 上記のコマンドで vpxd の起動に失敗した場合は、代わりにすべてのサービスを再起動してください。
# service-control --stop --all; service-control --start --all
別の SSH インスタンスで、VPXD サービスまたはすべてのサービスの起動を監視します。
# watch service-control --status all
注:このような問題を回避するため、vCenter Server のパッチ適用/アップグレード作業中は、クラスタの DRS を「手動」に設定することをお勧めします。
影響/リスク:
中:データベースの変更が含まれるため、vCenter のスナップショットとバックアップは必須です。vCenter Server のファイルベースのバックアップとリストア