如何在 KVM 中配置并使用共享存储资源?

问题浏览数Icon
36
问题创建时间Icon
2025-04-08 19:07:00
作者头像
bigcat22

在KVM中配置共享存储资源需结合存储类型(如NFS/iSCSI/Ceph)和虚拟化管理工具,核心步骤如下:

  1. 存储服务部署

    • NFS:安装nfs-utils,配置共享目录并导出(/etc/exports),设置权限与防火墙规则。
    • iSCSI:部署targetcli或使用外部存储设备,创建LUN并授权访问。
    • Ceph:部署RBD池,生成客户端密钥并为KVM主机授权。
  2. 主机端挂载

    • NFS:在KVM主机执行mount -t nfs <server_ip>:/path /mnt/kvm_shared,确保fstab持久化。
    • iSCSI:安装iscsi-initiator,通过iscsiadm连接目标,分区并格式化为XFS/ext4。
    • Ceph:安装ceph-common,映射RBD镜像(rbd map <pool>/<image>)并挂载。
  3. Libvirt存储池配置

    • 命令行:virsh pool-define-as kvm_shared_dir dir --target /mnt/kvm_shared --type netfs
    • XML定义存储池类型(dir/diskfs/netfs/scsi等),启动并设为自启(virsh pool-start/autostart)。
  4. 虚拟机磁盘分配

    • 使用virt-install或virt-manager创建VM时,指定共享存储池路径(如/mnt/kvm_shared/vm_disk.qcow2)。
    • 或通过virsh附加磁盘:virsh attach-disk <vm_name> /mnt/kvm_shared/new_disk.img vdb --persistent
  5. 动态迁移与HA

    • 执行在线迁移:virsh migrate --live <vm_name> qemu+ssh://target_host/system --unsafe
    • 结合集群工具(如Pacemaker)实现故障转移,依赖共享存储保证磁盘状态一致性。

注意事项

  • SELinux/AppArmor需放行存储路径(semanage fcontext/chcon或调整策略)。
  • 网络优化:为存储流量分配独立VLAN或使用RDMA/RoCE降低延迟。
  • 监控I/O性能:通过iostat -dx 1ceph osd perf排查存储瓶颈。
  • 权限控制:避免多主机同时写入非集群文件系统(如ext4),建议使用GFS2/OCFS2或分布式存储。

更多回答

作者头像
zzzi77

在KVM里用共享存储,比如NFS或者iSCSI,先挂载到宿主机。然后进virt-manager或者用virsh命令,把共享目录设成存储池。新建虚拟机时选这个池里的空间当磁盘,多个虚拟机就能共用同一块盘了。注意权限和网络别卡住,搞完记得测读写!

作者头像
shanguang77

在KVM中配置共享存储资源需遵循以下核心步骤:

  1. 选择共享存储类型:常用方案包括NFS、iSCSI、Ceph或光纤通道存储。NFS适合文件级共享,iSCSI/Ceph提供块存储,光纤通道适用于高性能场景。

  2. 配置存储服务器

    • NFS:在存储节点创建共享目录,配置/etc/exports并启动nfs服务
    • iSCSI:配置targetcli定义LUN,设置ACL控制访问权限
    • Ceph:部署RADOS集群,创建RBD镜像并导出访问密钥
  3. KVM宿主机配置

    • NFS:安装nfs-utils,执行mount -t nfs <server_ip>:/path /mnt挂载
    • iSCSI:安装iscsi-initiator,使用iscsiadm发现并登录目标
    • 验证存储连通性(multipath -ll检查多路径)
  4. 创建Libvirt存储池

    <!-- 示例:NFS存储池定义 -->
    <pool type='netfs'>
     <name>shared_nfs</name>
     <source>
       <host name='192.168.1.100'/>
       <dir path='/export/kvm'/>
     </source>
     <target>
       <path>/var/lib/libvirt/images/shared</path>
     </target>
    </pool>

    执行virsh pool-define pool.xml && virsh pool-start shared_nfs

  5. 虚拟机配置

    • 新建VM时选择共享存储池作为磁盘位置
    • 迁移现有VM:virsh blockcopy将磁盘迁移至共享存储

关键注意事项:

  • 确保所有KVM节点对存储有相同访问权限
  • 配置存储多路径(multipathd)实现高可用
  • 针对集群环境,需配合CLVM或OCFS2实现并发写入控制
  • 通过virtio-scsi驱动优化性能,避免使用IDE模拟模式
  • 定期验证存储连接状态:virsh pool-list --all及存储I/O性能监控
作者头像
xiaolong88

在KVM中配置共享存储需遵循以下核心步骤:1. 部署共享存储(NFS/iSCSI/Ceph),确保所有宿主机网络连通且权限一致;2. 在宿主机创建存储池(virsh pool-define-as),映射共享存储路径;3. 验证池状态(virsh pool-start/pool-list)及虚拟机XML配置中标签的source指向共享路径。特别注意:需统一文件系统格式(如XFS/ext4),libvirt用户组权限需覆盖存储挂载点,多节点场景建议关闭文件锁(vfs_cache_pressure优化)。典型故障排查聚焦于SELinux上下文、存储挂载稳定性及虚拟机磁盘缓存模式设置。

作者头像
linxiao09
  1. 选择共享存储类型:常用方案包括NFS、iSCSI或LVM共享卷组。根据环境选择适合的类型(例如NFS适用于简单文件共享,iSCSI适用于块设备)。

  2. 配置共享存储服务器

    • NFS:在存储服务器安装NFS服务,创建共享目录(如/nfs_share),并在/etc/exports中添加条目(例如/nfs_share *(rw,sync,no_root_squash))。重启nfs-server服务。
    • iSCSI:配置iSCSI Target(如使用targetcli工具),创建LUN并分配访问权限。记录Target IQN和IP地址。
  3. KVM主机挂载共享存储

    • NFS:在KVM主机执行mount -t nfs <存储服务器IP>:/nfs_share /mnt/kvm_shared,并添加到/etc/fstab实现自动挂载。
    • iSCSI:使用iscsiadm连接Target:
      iscsiadm -m discovery -t st -p <存储服务器IP>
      iscsiadm -m node -T <Target_IQN> -p <IP> --login

      使用lsblk确认识别到新磁盘(如/dev/sdb)。

  4. 创建KVM存储池

    • 通过virsh创建存储池(以NFS为例):
      virsh pool-define-as nfs_pool dir - - - - /mnt/kvm_shared
      virsh pool-start nfs_pool
      virsh pool-autostart nfs_pool
    • 验证:virsh pool-list --all显示状态为active
  5. 配置虚拟机使用共享存储

    • 创建磁盘时指定存储池路径:
      qemu-img create -f qcow2 /mnt/kvm_shared/vm_disk.qcow2 20G
    • 在虚拟机XML配置中引用该路径。
  6. 多主机协同注意事项

    • 确保所有KVM主机对共享存储有相同权限。
    • 使用集群管理工具(如virt-manager集群模式)避免并发写入冲突。

验证:跨主机迁移虚拟机测试存储可访问性,或通过virsh blockjob <VM_NAME> <磁盘路径>检查存储状态。