当前位置: 首页 > news >正文

vcenter 虚机共享盘笔记

在 VMware vSphere 中配置多写入器共享磁盘(Multi-Writer Shared Disks)时,需注意以下关键点:


1. 磁盘控制器类型的要求

  • 必须使用 VirtualLsiLogicSASController
    多写入器共享磁盘要求控制器支持 SCSI-3 Persistent Reservations(PR),而 VirtualLsiLogicSASController(LSI Logic SAS)控制器是 VMware 官方唯一支持此功能的控制器类型。
    VirtualLsiLogicController(标准 LSI Logic)不支持多写入器模式,可能导致集群不稳定或数据损坏。

2.磁盘模式(diskMode)

磁盘模式定义了虚拟机磁盘与快照的交互行为,以及数据的持久性:

diskMode描述数据持久性适用场景
独立 - 持久
(Independent - Persistent)
- 磁盘数据永久保存,不受快照影响。
- 快照操作不会包含此磁盘的更改。
数据永久保存关键数据磁盘(如数据库文件),需确保数据独立于快照生命周期。
独立 - 非持久
(Independent - Nonpersistent)
- 磁盘数据在虚拟机重启后重置为初始状态。
- 所有写入操作在关机后丢失(类似临时磁盘)。
数据不保存(临时性)测试环境、临时操作(如软件安装测试),或需要恢复初始状态的场景。
依赖(默认)
(Dependent)
- 磁盘数据与快照关联。
- 快照会捕获磁盘的更改,并允许回滚到快照状态。
数据受快照管理常规用途,需要利用快照功能的环境(如开发、备份恢复)。

 独享盘一般用VirtualDiskModePersistent(即Dependent),共享盘用VirtualDiskModeIndependent_persistent


3. 控制器SharedBus 属性的区别

在虚拟机磁盘控制器的高级参数中,SharedBus 定义了共享磁盘的访问模式:

  • noSharing(默认)
    禁用共享,仅允许单个虚拟机独占访问磁盘。

  • virtualSharing
    同一 ESXi 主机内的虚拟机共享磁盘

    • 多个虚拟机(位于同一主机)可同时挂载同一磁盘(如 .vmdk 文件)。

    • 适用于测试或开发环境(例如同一主机内的集群节点)。

    • 要求所有虚拟机均启用多写入器模式(disk.EnableUUID=TRUE 且 diskLib.dataCacheMaxSize=0)。

  • physicalSharing
    跨 ESXi 主机的虚拟机共享磁盘

    • 允许多个虚拟机(位于不同主机)通过共享存储(如 SAN/NFS)访问同一磁盘(通常为 RDM 或 VMFS 上的 .vmdk)。

    • 用于生产环境跨主机集群(如跨节点的 Windows 故障转移集群、Oracle RAC)。

    • 存储必须支持 SCSI PR 且配置正确(如启用原子测试单元(ATS))。


4. 配置注意事项

  • 多写入器模式必须显式启用
    在虚拟机高级配置中添加 scsiX:Y.sharedBus = "virtual" 或 "physical"(X=控制器编号,Y=磁盘编号)。

  • 存储兼容性
    确保存储后端(如 VMFS、NFS、vSAN)支持多写入器操作,并遵循 VMware 的兼容性指南。

  • 性能与稳定性
    多写入器模式可能导致 SCSI 预留冲突,影响性能。建议仅在集群软件明确要求时使用。


总结

  • 控制器类型:必须为 VirtualLsiLogicSASController

  • virtualSharing:同一主机内多虚拟机共享。

  • physicalSharing:跨主机共享,需依赖共享存储和集群文件系统。

代码片段:

func AddDisksExt(devices object.VirtualDeviceList, disks []model.Disk) (object.VirtualDeviceList, []types.BaseVirtualDeviceConfigSpec, error) {
	var (
		deviceChange  []types.BaseVirtualDeviceConfigSpec
		controller    *types.VirtualLsiLogicSASController = nil
		newController bool                                = false
	)

	ctrls := devices.SelectByType((*types.VirtualController)(nil))
	for _, ctrl := range ctrls {
		if devices.Type(ctrl) == "lsilogic-sas" {
			controller = ctrl.(*types.VirtualLsiLogicSASController)
			break
		}
	}

	if controller == nil {
		scsi, err := devices.CreateSCSIController("lsilogic-sas")
		if err != nil {
			return nil, nil, err
		}
		newController = true
		controller = scsi.(*types.VirtualLsiLogicSASController)
		config := NewDeviceConfigSpec(scsi, types.VirtualDeviceConfigSpecOperationAdd)
		deviceChange = append(deviceChange, config)
	}

	shared := false
    for _, d := range disks {
		file := ""
		sharing := string(types.VirtualDiskSharingSharingNone)
		diskMode := string(types.VirtualDiskModePersistent)
		if d.Shared {
			shared = true
			file = d.File
			sharing = string(types.VirtualDiskSharingSharingMultiWriter)
			diskMode = string(types.VirtualDiskModeIndependent_persistent)
		}
		disk := &types.VirtualDisk{
			CapacityInKB: int64(d.Size) * 1024 * 1024,
			VirtualDevice: types.VirtualDevice{
				Backing: &types.VirtualDiskFlatVer2BackingInfo{ // 通过ThinProvisioned来控制是否为精简模式
					DiskMode:        diskMode,
					ThinProvisioned: types.NewBool(d.Thin),
					Sharing:         sharing,
				},
			},
		}

		devices.AssignController(disk, controller)
		devices = append(devices, disk)
		config := &types.VirtualDeviceConfigSpec{
			Device:    disk,
			Operation: types.VirtualDeviceConfigSpecOperationAdd,
		}
		if len(file) == 0 { // 支持使用现有硬盘,现有硬盘不需要创建
			config.FileOperation = types.VirtualDeviceConfigSpecFileOperationCreate
		} else if d.Shared {
			backing, _ := disk.VirtualDevice.Backing.(*types.VirtualDiskFlatVer2BackingInfo)
			backing.VirtualDeviceFileBackingInfo.FileName = file
		}
		deviceChange = append(deviceChange, config)
	}

    if shared { // 共享盘需要设置控制器ShareBus为物理共享
		controller.SharedBus = types.VirtualSCSISharingPhysicalSharing
		if !newController {
			config := NewDeviceConfigSpec(controller, types.VirtualDeviceConfigSpecOperationEdit)
			deviceChange = append(deviceChange, config)
		}
		
	}
	return devices, deviceChange, nil

相关文章:

  • 锦华新材业绩波动明显:偿债能力偏弱,大额分红引关注
  • 20250320在荣品的PRO-RK3566开发板的buildroot系统下使用J27口的OTG0口接鼠标
  • AI社交的服务走向
  • 【力扣刷题实战】只出现一次的数字III
  • CVPR2025 | 蚂蚁浙大提出MP-GUI算法:全方位增强MLLM的GUI理解能力
  • VLAN的处理机制
  • 爬虫——playwright获取亚马逊数据
  • Web爬虫利器FireCrawl:全方位助力AI训练与高效数据抓取
  • 服务器部署Kong和Konga过程
  • vue路由去掉#
  • 07. 面向对象高级(2)_设计模式
  • 基于ssm的在线点歌系统(全套)
  • 电源电路篇
  • python:AI+ music21 构建LSTM模型生成爵士风格音乐
  • Liunx安装elasaticsearch、ik分词器、kibana
  • 批处理文件:用gifsicle删除gif文件中的奇数帧
  • 【快递分拣员-Git介绍】
  • elsticsearch 通过reindex修改shards
  • 使用crash解析vmcore(fulldump)文件,基于qemu,arm64,linux6.6
  • 社区医疗管理系统基于Spring Boot SSM
  • 回家了!子弹库帛书二、三卷将于7月首次面向公众展出
  • 世界高血压日|专家:高血压患者控制血压同时应注重心率管理
  • 卿晨璟靓等用服刑经历“引流”,专家:将犯罪问题娱乐化会消解刑罚严肃性
  • 工商银行杭州金融研修院原院长蒋伟被“双开”
  • 上海静安将发放七轮文旅消费券,住宿券最高满800元减250元
  • 大外交|巴西总统卢拉第六次访华签署20项协议,“双方都视对方为机遇”