おそらく愚かな質問ですが、VMWare ESXi内では、2つのVMがプロセス間通信を実行できるように同じブレード上のVM間でメモリを共有する方法はありますか?メッセージングを使用するのではなく、共有メモリブロックを介して?私はVM間でメモリを共有することができますが、私が興味を持っているプロセス間通信です.2つのVMはメモリ内のdbにアクセスできますが、VMがダウンした場合(ホストされたOSソリューションとは異なります)他のVMはまだ気楽に行くことができます。VMWare ESXiメモリデータベース内の単一のブレード上のVM間で共有
答えて
vSockets APIドキュメントによると、それは言う:。
は「オリジナルVMCIライブラリがVMCIは、データグラムAPIと共有メモリAPIを含む6.0ワークステーションで実験的なC言語インタフェースとしてリリースされた両方のインターフェイス。 Workstation 6.5では廃止されました。
これで、vmci SOCK_DGRAMまたはSOCK_STREAMソケットのみを使用できるようになりました。これらはTCP/IPソケットと同じように動作し、それらを使用するコードの記述方法についてはネット上に多くの情報があります。基本的にはvmci_sockets.hヘッダーが必要です。
vsocket通信のゲスト側は簡単ですが、DBをホストするためにESXiホスト上で実行するために何らかの種類のサーバーを作成する必要があります。これは難しい部分です。 ESXi上でsshを有効にして周囲を覗き込むと、vsocketプロトコルファミリを取得するために照会できる/ dev/vsockデバイスを持つ非常にUNIX系のシステムが見つかります(ゲストとは異なる場合があります。 ioctl)。残念ながら、64ビットの静的にリンクされたLinuxバイナリをコンパイルするだけでは、ESXi OSがLinuxと十分に似ていないため、segfault以上のものは得られません。
プログラムを作成するために使用しようとすることができるSDKがありますが、それほど心配ではありませんが、文字通り日数を費やしてコンパイルするだけで、必要に応じてこのルートを試すことができます私はそれをお勧めしません。 Google for "VMWare ESXi toolchain"
しかし、自分のサーバーをESXi上で実行するためのより速いルートを探していて、Pythonを使用する準備ができているなら、5.5と6.0の両方にかなり最新のPython(Python 2.7 ESXi v6.0では.9)。 VMWareはうまくいけない.pyライブラリファイルを削除して.pycファイルだけを残して、これが標準バージョンと異なるかどうかを簡単に確認することはできませんが、基本的なソケットサーバーを実行するには十分機能しています。
Pythonソケットモジュールはvmciソケットファミリを認識しないため、ctypesを使用してcライブラリソケット関数を直接呼び出すことを回避する必要があります。純粋なPythonを使用してソケットを作成することもできます。 bind()は暗黙のうちにsockaddr_in構造体を扱うことを期待しています。
ですから、例えば、vmci_sockets.hヘッダを検査する必要がある、とあなたがCから使用したいものをミラーリングするための構造と機能をctypesはPythonのを考え出すだろう。
class sockaddr_vm(Structure):
_fields_ = [("svm_family", c_ushort),
("svm_reserved1", c_ushort),
("svm_port", c_uint),
("svm_cid", c_uint),
("svm_zero", c_uint),
]
これは、することができあなたがアクセスできるlibcのバインド/のrecvfrom /のsendto呼び出しに渡さ:
libc = cdll.LoadLibrary("libc.so.6")
そして、あなたはその後、ニシキヘビソケットモジュールをバイパスして、あなたのソケット、すなわちにバインドすることができますESXiの上のPythonの
addr = sockaddr_vm()
addr.svm_family = af # address family obtained from ioctl
addr.svm_reserved1 = 0
addr.svm_cid = VMADDR_CID_ANY # 0xffffffff
addr.svm_port = port
addr.svm_zero = 0
# s is the socket, created with python socket.socket()
out = libc.bind(s.fileno(), pointer(addr), sizeof(addr))
1つの警告は、あなたが一緒にプレイすることができ、メモリに制限されているように見えるということです。私は16メガバイトのバッファを割り当てしようとしたPythonはメモリエラーを私にそれを与えることを拒否したが、これは「wasn私はその時に何をしていたのかというと問題だったので、その周りに道を見つけようとはしなかった。私はそれを修正できる設定があると思う。
ESXiのブート時にスクリプトを開始することは、読者の練習として残していますが、これはあなたを始めにするはずです。楽しむ!
VMCIが必要です。残念ながら、VMCIは、vSphere 6以上のVM間で非推奨になりました。
- 1. ESXiサーバーのVMware用共有フォルダオプション
- 2. VMWare ESXi Server 3.5
- 3. VMWARE ESXI 6.5
- 4. 2つのVM間でプロパティを共有
- 5. VMWare Workstationでvmrunで共有VMを開始
- 6. perlスクリプトは、VMware ESXiの
- 7. 共有メモリ内の単一プロデューサ/コンシューマリングバッファ
- 8. Hibernate VMWare ESXiでの検索の問題?
- 9. ESXi vmイメージをvSphereにコピー
- 10. VMWare vSphere Client GUIとVMの間のネットワークインターフェイスの不一致
- 11. ESXiサーバー間でリソースを共有する方法
- 12. XAMLSの間で共有されるUserControlの単一インスタンス
- 13. C++複数のプロセス間で単一のクラスオブジェクトを共有する
- 14. VMware ESXi 6無料ライセンス
- 15. VMware内でVM上でコマンドを実行する
- 16. vcenterのesxiホスト上で静的IPアドレスをvmマシンに割り当てる
- 17. VM IPの取得時にリモートESXi Builderが失敗します。 ESXi 6.0、packer
- 18. cygwinのネットワーク共有(VMWare共有フォルダ)からバッチファイルを実行中
- 19. ESXiホストコンソールからESXi VMコンソールに接続する方法
- 20. 単一の共有メモリ内の異なるタイプ
- 21. VMware ESXiの1つのディスクパーティションでのローカルストレージの低速化
- 22. 単一の共有データベースを持つマルチテナントデータベース
- 23. vmware python sdkすべてのVMを取り込まずに単一のVM /テンプレートを取得する
- 24. ブリッジ2つのvmインターフェイスvmware
- 25. Javaを使用したVMware ESXi vSphere API
- 26. VMware ESXi Serverを使用する場合
- 27. Vmwareで動作するfedora17上の共有フォルダが表示されません
- 28. VMからホストへのディレクトリの共有
- 29. 単一のスタンドアロンEclipse RCPアプリケーション内で複数のEclipseプラグインのAspectJアスペクトを共有
- 30. 単一のデータベースサーバー上の複数のデータベースにわたるユーザーデータの共有