在使用kvm虛擬機的時候,有時候部署一些應用如Oracle RAC、corosync等高可用的時候,往往會用到共享硬盤。比如本人在部署corosync+mysql高可用的時候就遇到了一些小問題(像我們這種折騰達人,肯定不會用nfs做共享存儲),因此記錄一下。
環境:
- 宿主機當然是linux,否則也用不到kvm
- 沒有圖形界面,否則直接virt-manager也很快。。
操作過程
新建一塊虛擬盤
root@qujun:~# qemu-img -f raw shared.img 10G
要用raw格式,理論上來說應該qcow2也可以
編寫xml文件
root@qujun:~# vim share-disk.xml
<disk type='file' device='disk'>
//由於我們用的文件,disk的type是file,device字段則指我們想讓這個盤在虛擬機中映射爲什麼設備。
<driver name='qemu' type='raw' cache='none'/>
// 驅動是指明我們底層是哪種虛擬化,同時指定磁盤爲raw格式、cache爲none
<source file='shared.img'/>
// 磁盤的映射源,有file、block、network、volume等值
<target dev='vdb' bus='virtio'/>
// 映射給虛擬機的盤符、使用的驅動,
<shareable/>
// 標記此硬盤將於多個虛擬機間共享。
</disk>
<span style="color:red"> 上面比較重要的是cache要標記爲none、有shareable標記,在最開始的時候我用的qcow2硬盤,並用writeback的cache導致一堆問題。
</span>
準備完之後,使用virsh命令掛載就可以了。root@qujun:~# virsh attach-device --config Guest1 share-disk.xml
<span style="color:red">由於virtio是熱添加驅動,這時候如果你係統支持硬盤熱添加,就可以在系統中fdisk -l看到一塊vdb的新硬盤啦,我們就可以像真實環境一樣來部署高可用系統了~</span>
參考鏈接:
1、Redhat virsh命令操作手冊
2、virsh xml 詳解