libvirt sanlock虛擬機器鎖管理器外掛程式
此頁面描述了將
sanlock
服務用作
虛擬機器磁碟互斥的
鎖定驅動程式
外掛程式。
sanlock守護程式設定
在許多作業系統上,sanlock外掛程式分發在乙個子包中,該子包需要與主
libvirt rpm
分開安裝。在
fedora / rhel
主機上,可以使用以下
yum命令
完成此操作
$ su - root
# yum install libvirt-lock-sanlock
下一步是啟動
sanlock
守護程式。為了獲得最大的安全性,
sanlock
希望與看門狗守護程式建立連線。如果
sanlock崩潰/
異常終止,這將導致整個主機重新啟動。要在
fedora / rhel
主機上啟動看門狗守護程式,可以執行以下命令:
$ su-根
$ su - root
# chkconfig wdmd on
# service wdmd start
看門狗執行後,可以按以下方式啟動
sanlock
# chkconfig sanlock on
# service sanlock start
注意:如果您希望避免使用看門狗,請
/etc/sysconfig/sanlock
在開始之前
新增以下行
sanlockopts="-w 0"
必須在將要執行虛擬機器的每個主機上啟動
sanlock
守護程式。因此,如有必要,請重複這些步驟。
libvirt sanlock外掛程式配置
一旦執行了
sanlock
守護程式,下一步就是配置
libvirt sanlock
外掛程式。每個使用
sanlock
的libvirt
驅動程式都有乙個單獨的配置檔案。對於
qemu
,我們將編輯
/etc/libvirt/qemu-sanlock.conf
有乙個必填引數,需要設定
host_id
。這是1
到2000
之間的整數,在
執行虛擬機器的每個主機上必須將其設定為唯一值。
$ su - root
# augtool -s set /files/etc/libvirt/qemu-sanlock.conf/host_id 1
在每個主機上重複此操作,將1更改為主機的唯一值。
libvirt sanlock儲存配置
sanlock
外掛程式需要在所有執行虛擬機器的主機之間共享的檔案系統上的目錄中建立租約。顯而易見的選擇包括
nfs或
gfs2
。libvirt sanlock
外掛程式希望其租約目錄位於此位置,
/var/lib/libvirt/sanlock
因此請更新主機的主機,
/etc/fstab
以在該位置安裝合適的共享
/群集檔案系統
$ su - root
# echo "some.nfs.server:/export/sanlock /var/lib/libvirt/sanlock nfs hard,nointr 0 0" >> /etc/fstab
# mount /var/lib/libvirt/sanlock
如果您的
sanlock
守護程式恰好在非
root
使用者特權下執行,則需要將此命令告知
libvirt
,以便它正確處理建立的檔案。這可以通過
在配置檔案中設定
user和/
或group
變數來完成。說明中對中的相同變數指定了可接受的值範圍
/etc/libvirt/qemu.conf
。例如:
augtool -s set /files/etc/libvirt/qemu-sanlock.conf/user sanlock
augtool -s set /files/etc/libvirt/qemu-sanlock.conf/group sanlock
但是請記住,如果這是
nfs共享,則需要使用
no_root_squash-ed
才能使chown
(可能還有
chmod
)成功。
就儲存要求而言,如果檔案系統使用
512位元組的扇區,則需要
1mb為每個來賓磁碟提供儲存空間。因此,如果您的網路具有
20個虛擬化主機,每個虛擬機器執行
50個虛擬機器,每個來賓平均要有
2個磁碟,則需要
20*50*2 == 2000 mb
儲存用於
sanlock。
在網路上的一台主機上,設定
cron
作業以virt-sanlock-cleanup
定期執行指令碼是明智的。該指令碼刪除正在執行的虛擬機器當前未使用的所有租用檔案,從而釋放共享檔案系統上的磁碟空間。除非非常頻繁地建立和刪除
vm磁碟,否則足以每週執行一次清理。
qemu / kvm驅動程式配置從
0.9.3
版開始,
qemu / kvm
驅動程式已與鎖管理器框架完全整合。但是,現成的配置當前使用nop鎖管理器外掛程式。為了獲得磁碟保護,因此必須重新配置
qemu
以啟用sanlock驅動程式。這可以通過編輯
qemu
驅動程式配置檔案(
/etc/libvirt/qemu.conf
)並更改
lock_manager
配置可調引數來實現。
$ su - root
# augtool -s set /files/etc/libvirt/qemu.conf/lock_manager sanlock
# service libvirtd restart
如果一切順利,
libvirtd
將與sanlock
交談並建立基本的鎖空間。可以通過查詢以下檔案的存在來檢查
# ls /var/lib/libvirt/sanlock/
__libvirt__disks__
每次啟動
guest
虛擬機器時,其他租約檔案都會出現在此目錄中,每個虛擬磁碟乙個。租用檔案是根據虛擬磁碟支援檔案的標準路徑的
md5校驗和命名的。因此,如果為來賓提供了磁碟作為後盾,則該
/var/lib/libvirt/images/demo.img
租戶將看到租約
/var/lib/libvirt/sanlock/bfa0240911bc17753e0b473688822159
顯而易見,為了使鎖定正常工作,每個執行虛擬機器的主機都應以相同的方式配置儲存。最簡單的方法是使用
libvirt
儲存池功能來配置用於來賓儲存的任何
nfs卷,
iscsi
目標或scsi hba
。只需在每個主機上覆制相同的儲存池
xml。重要的是,任何暴露塊裝置的儲存池都必須配置為在其下建立卷路徑,
/dev/disks/by-path
以確保跨主機的穩定路徑。確保這一點的示例
iscsi
配置為:
myiscsipool
/dev/disk/by-path
域配置萬一
sanlock
由於某種原因無法訪問磁碟鎖,它將殺死所有丟失其鎖的域。可以使用域
xml中的
on_lockfailure
元素更改此預設行為
。存在此元素時,
sanlock
將sanlock_helper
使用指定的動作進行呼叫(由
libvirt
提供)。該幫助程式二進位制檔案將連線到
libvirtd
,因此如果
libvirtd
配置為在讀寫
unix
套接字上要求,則可能需要進行身份驗證。為了向
sanlock_helper
提供適當的憑據,
客戶端身份驗證檔案
需要包含以下內容:
[auth-libvirt-localhost]
credentials=sanlock
[credentials-sanlock]
authname=login
password=password
虛繼承 虛表 虛指標
c 實現多型的方法 其實很多人都知道,虛函式在c 中的實現機制就是用虛表和虛指標,但是具體是怎樣的呢?從more effecive c 其中一篇文章裡面可以知道 是每個類用了乙個虛表,每個類的物件用了乙個虛指標。具體的用法如下 class a class b public a a,b的實現省略 因為...
虛指標,虛函式,虛函式表,純虛函式
虛指標 虛繼承 在使用多重繼承時,如存在 class a 有m a變數 class a1 virtual public a,m a1 class a2 virtual public a m a2 class b public a1,public a2 m b 時 存在以下記憶體儲存順序 虛指標 指向...
虛函式 虛指標和虛表
關於虛函式的背景知識 用virtual關鍵字申明的函式叫做虛函式,虛函式肯定是類的成員函式。存在虛函式的類都有乙個一維的虛函式表叫做虛表。類的物件有乙個指向虛表開始的虛指標。虛表是和類對應的,虛表指標是和物件對應的。多型性是乙個介面多種實現,是物件導向的核心。分為類的多型性和函式的多型性。多型用虛函...