重要提醒:VM虚拟共享磁盘必须使用 vmware-vdiskmanager.exe 工具创建,否则后续容易出现各种奇怪问题(如 code -13218:DCR磁盘VERSION校验失败 等)。
若频繁出现此类错误,建议修复虚拟机后重新创建共享磁盘。
# 进入vmware-vdiskmanager所在目录
cd "C:\bigprogram\VMware\VMware Workstation\"
# 创建各共享磁盘(-t 2 表示多节点共享)
vmware-vdiskmanager.exe -c -s 1g -a lsilogic -t 2 "D:\database\Virtual Machines\disk\dcr.vmdk"
vmware-vdiskmanager.exe -c -s 2g -a lsilogic -t 2 "D:\database\Virtual Machines\disk\vote.vmdk"
vmware-vdiskmanager.exe -c -s 10g -a lsilogic -t 2 "D:\database\Virtual Machines\disk\LOG0.vmdk"
vmware-vdiskmanager.exe -c -s 50g -a lsilogic -t 2 "D:\database\Virtual Machines\disk\DATA0.vmdk"
注:在 VMware 中创建一个虚拟磁盘时,会同时生成 .vmdk(描述文件)和 -flat.vmdk(实际数据文件)两个文件。-flat.vmdk 才是真正占用空间的磁盘内容文件,添加磁盘是选择.vmdk(描述文件)即可。
在每台虚拟机的 .vmx 配置文件中增加以下内容:
disk.enableUUID = "TRUE"
disk.locking = "false"
scsi0.sharedBus = "virtual"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.dataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
每台虚拟机编辑虚拟机配置,添加共享磁盘:
添加→硬盘→使用现有虚拟磁盘(E),添加完成,点击高级→独立&永久
在正式绑定之前,需要先查看磁盘设备是否为我们预期要绑定的设备。可以通过lsblk查看,多路径的需要通过multipath查看。这里的sdb\sdc\sdd\sde就是本次准备的dcr\vote\log和data盘。
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1G 0 part /boot
└─sda3 8:3 0 19G 0 part
├─klas-root 253:0 0 17G 0 lvm /
└─klas-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
sdc 8:32 0 2G 0 disk
sdd 8:48 0 10G 0 disk
sde 8:64 0 50G 0 disk
sr0 11:0 1 4.3G 0 rom /run/media/root/Kylin-Server-11
[root@localhost ~]# multipath
for disk in `ls /dev/sd*`;do
echo $disk;
/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=$disk;
done
for disk in `ls /dev/mapper/*`;do
echo $disk;
udevadm info --query=all --name $disk | grep -i dm_uuid;
done
配置文件必须放在 /etc/udev/rules.d/ 目录下。
KERNEL=="sd?",SUBSYSTEM=="block",PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29d05ceb80787286e0b01476989",SYMLINK+="raw/ASM-DCR",OWNER="dmdba",GROUP="dinstall",MODE="660"
# ... 其他磁盘类似
# 示例脚本(根据实际盘符调整 a b c d,脚本需要写成sh脚本)
curr=$(cd "$(dirname "$0")";pwd)
# 如果是命令行,curr用该方式
# curr=$(pwd) 或者 curr=/etc/udev/rules.d/
rm -f $curr/88-dm-asmdevices.rules
for i in a b c d;do
echo "KERNEL==\"sd?\",SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\",RESULT==\"`/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", SYMLINK+=\"raw/asm-disk$i\",OWNER=\"dmdba\", GROUP=\"dinstall\",MODE=\"0660\"" >> $curr/88-dm-asmdevices.rules
done
## 本地实际盘为sdb\sdc\sdd\sde,脚本放在/etc/udev/rules.d/命令,生成命令如下:
[root@localhost rules.d]# curr=/etc/udev/rules.d/
[root@localhost rules.d]# rm -f $curr/88-dm-asmdevices.rules
itelisted --replace-whitespace --device=/dev/sd$i`\", SYMLINK+=\"raw/asm-disk$i\",OWNER=\"dmdba\", GROUP=\"dinstall\",MODE=\"0660\"" >> $curr/88-dm-asmdevices.rules
done[root@localhost rules.d]#
[root@localhost rules.d]# for i in b c d e;do
> echo "KERNEL==\"sd?\",SUBSYSTEM==\"block\", PROGRAM==\"/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name\",RESULT==\"`/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sd$i`\", SYMLINK+=\"raw/asm-disk$i\",OWNER=\"dmdba\", GROUP=\"dinstall\",MODE=\"0660\"" >> $curr/88-dm-asmdevices.rules
> done
[root@localhost rules.d]# ls
88-dm-asmdevices.rules 99-vmware-scsi-udev.rules
[root@localhost rules.d]# cat 88-dm-asmdevices.rules
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c292564bbd1d2cd39b0692e0758a", SYMLINK+="raw/asm-diskb",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29f810c30f22245cd3cbd156012", SYMLINK+="raw/asm-diskc",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c290c56b4387beb1fa264492fbfc", SYMLINK+="raw/asm-diskd",OWNER="dmdba", GROUP="dinstall",MODE="0660"
KERNEL=="sd?",SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name",RESULT=="36000c29c1c0a9f30fd703c7acf3e4338", SYMLINK+="raw/asm-diske",OWNER="dmdba", GROUP="dinstall",MODE="0660"
[root@localhost rules.d]#
如果需要自定义绑盘名称,可以自行修改SYMLINK后面的名字。
生成后复制到所有节点:
cp 88-dm-asmdevices.rules /etc/udev/rules.d/ scp 88-dm-asmdevices.rules root@其他节点IP:/etc/udev/rules.d/
类似上述方式,使用 ENV{DM_UUID} 进行绑定,脚本生成方式同上。
# 使规则生效(建议重启更彻底)
[root@localhost rules.d]# udevadm control --reload-rules
[root@localhost rules.d]# udevadm trigger
[root@localhost rules.d]# ll /dev/raw/
总计 0
lrwxrwxrwx 1 root root 6 7月22日 01:01 asm-data -> ../sde
lrwxrwxrwx 1 root root 6 7月22日 01:01 asm-dcr -> ../sdb
lrwxrwxrwx 1 root root 6 7月22日 01:01 asm-log -> ../sdd
lrwxrwxrwx 1 root root 6 7月22日 01:01 asm-vote -> ../sdc
[root@localhost rules.d]#
# 验证大小
/usr/sbin/blockdev --getsize64 /dev/raw/asm-diska
# 批量验证
for i in dcr vote data redo;do
echo "$i:"; /usr/sbin/blockdev --getsize64 /dev/raw/asm-$i;
done
验证要点:
文章
阅读量
获赞
