FC 交换机如何工作,我应该如何配置我的交换机?
我运行一个网站,其中大约 1000 万个文件(书籍封面)存储在 3 个级别的子目录中,范围为 [0-f]:
0/0/0/
0/0/1/
...
f/f/f/
Run Code Online (Sandbox Code Playgroud)
这导致每个目录大约有 2400 个文件,这在我们需要检索一个文件时非常快。这也是许多问题建议的做法。
但是,当我需要备份这些文件时,仅浏览包含 10m 文件的 4k 目录就需要很多天。
所以我想知道我是否可以将这些文件存储在一个容器(或 4k 容器)中,每个文件系统都完全像一个文件系统(某种安装的 ext3/4 容器?)。我想这几乎与直接访问文件系统中的文件一样有效,并且这将具有非常有效地复制到另一台服务器的巨大优势。
关于如何做到最好的任何建议?或者任何可行的替代方案(noSQL,...)?
我熟悉 BBWC(电池支持的写入缓存)的用途 - 并且以前在我的服务器中使用过它们,即使 UPS 良好。显然存在它不提供保护的故障。我很想知道它在实践中是否真的提供了任何真正的好处。
(注意,我特别在寻找有 BBWC 和崩溃/失败的人的回应,以及 BBWC 是否有助于恢复)
更新
在收到这里的反馈后,我越来越怀疑 BBWC 是否会增加任何价值。
为了对数据完整性有任何信心,文件系统必须知道数据何时被提交到非易失性存储(不一定是磁盘 - 我会回到这一点)。值得注意的是,很多磁盘都在数据何时提交到磁盘上撒谎 ( http://brad.livejournal.com/2116715.html )。虽然假设禁用磁盘缓存可能会使磁盘更诚实似乎是合理的,但仍然不能保证情况确实如此。
由于 BBWC 中的缓冲区通常很大,屏障可能需要将更多数据提交到磁盘,因此会导致写入延迟:一般建议是在使用非易失性回写缓存时禁用屏障(并禁用 on-磁盘缓存)。然而,这似乎会破坏写操作的完整性——仅仅因为在非易失性存储中维护更多数据并不意味着它会更加一致。事实上,如果逻辑事务之间没有划分,那么确保一致性的机会似乎比其他方式少。
如果 BBWC 在数据进入它的非易失性存储(而不是提交到磁盘)时确认障碍,那么它似乎满足了数据完整性要求而不会造成性能损失 - 这意味着仍应启用障碍。然而,由于这些设备通常表现出与将数据刷新到物理设备(使用屏障显着慢)以及禁用屏障的广泛建议一致的行为,因此它们不能以这种方式运行。为什么不?
如果操作系统中的 I/O 被建模为一系列流,那么当写缓存由操作系统管理时,有一些范围可以最小化写屏障的阻塞效应 - 因为在这个级别只有逻辑事务(单个流) 需要提交。另一方面,不知道哪些数据位构成事务的 BBWC 必须将其整个缓存提交到磁盘。内核/文件系统是否在实践中真正实现了这一点,需要付出比我目前愿意投入的更多的努力。
磁盘组合告诉 fibs 已提交的内容和突然断电无疑会导致损坏 - 并且日志或日志结构的文件系统在中断后不会执行完整的 fsck 不太可能检测到损坏,更不用说试图修复它。
就故障模式而言,根据我的经验,大多数突然停电是由于市电断电(使用 UPS 和管理关机可轻松缓解)。人们从机架中拉出错误的电缆意味着数据中心卫生(标签和电缆管理)不佳。UPS 无法防止某些类型的突然断电事件 - PSU 或 VRM 中的故障 带有屏障的 BBWC 可以在发生故障时提供数据完整性,但此类事件有多常见?从这里缺乏回应来看,这是非常罕见的。
当然,在堆栈中提高容错能力比 BBWC 的成本要高得多——但是,将服务器实现为集群还有许多其他性能和可用性方面的好处。
减轻突然断电影响的另一种方法是实施 SAN - AoE 使这成为一个实用的提议(我在 iSCSI 中并没有真正看到这一点),但同样存在更高的成本。
我正在考虑构建一个更大的 ZFS 池(150TB+),我想听听人们关于由于硬件故障导致数据丢失情况的经验,特别是区分仅丢失一些数据的实例与整个文件系统(如果在 ZFS 中甚至有这样的区别)。
例如:假设 vdev 由于外部驱动器机箱断电或控制器卡故障等故障而丢失。从我读到的池应该进入故障模式,但如果返回 vdev 池应该恢复?或不?或者如果 vdev 部分损坏,是否会丢失整个池、某些文件等?
如果 ZIL 设备出现故障会怎样?或者只是几个 ZIL 之一?
真正感谢以深厚的技术知识为后盾的所有轶事或假设场景!
谢谢!
更新:
由于我们是一家小型企业(大约 9 人),因此我们以低廉的价格执行此操作,但我们生成了大量成像数据。
数据主要是小文件,据我统计,每 TB 大约有 50 万个文件。
数据很重要,但不是超级关键。我们计划使用 ZFS 池来镜像 48TB 的“实时”数据阵列(使用了 3 年左右),并将其余存储用于“归档”数据。
该池将使用 NFS 共享。
机架应该在建筑物备用发电机线上,我们有两个 APC UPS,能够在满载时为机架供电 5 分钟左右。
我正在尝试将基于文件的磁盘热添加到正在运行的 KVM 虚拟服务器。我使用命令从头开始创建了一个新磁盘
dd of=/home/cloud/vps_59/test.img bs=1 seek=5G count=0
Run Code Online (Sandbox Code Playgroud)
我希望通过在 virsh shell 中执行此操作来将其热添加到来宾中:
virsh # attach-disk vps_59 /home/cloud/vps_59/test.img \
vdd --driver=file --subdriver=raw
Run Code Online (Sandbox Code Playgroud)
然后域的 XML 定义变为:
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/home/cloud/vps_59/root.img'/>
<target dev='vda' bus='virtio'/>
</disk>
<disk type='file' device='disk'>
<driver name='file' type='raw'/>
<source file='/home/cloud/vps_59/test.img'/>
<target dev='vdd' bus='virtio'/>
</disk>
Run Code Online (Sandbox Code Playgroud)
如您所见,驱动程序名称错误,应该是driver name='qemu'现有vda磁盘。我已经尝试过,--drive=qemu但它表示它不受支持。
其次,一旦我重新启动运行 Ubuntu 10.04.4 LTS 的虚拟机,我只会“看到”新添加的驱动器。如何使驱动器“热插拔”?我希望虚拟机无需重新启动即可立即“看到”新驱动器。
virtualization storage virtual-machines libvirt kvm-virtualization
假设连接是通过 LAN 1Gbe 或 10Gbe 连接,可以在生产服务器上合理地使用 NFS 作为将计算服务器连接到存储服务器的方法吗?
显然有一些网络开销,如果启用了同步模式,NFS 在写入时似乎特别慢。否则它看起来相当轻巧,并且能够根据我的说法进行扩展,但我个人对此几乎没有经验。我错了吗?
问题是我现在有一个服务器既充当存储服务器又充当 Web 服务器,但我最终可能在将来需要将两者分开,并考虑到某些请求需要通过 Web 应用程序层进行身份验证在初始化文件传输之前,这个软件有点棘手。网络 fs 挂载是我最简单的选择……不知道这是否合适。
我还计划尝试使用 NFS 的本地缓存,这应该可以大大提高性能,但我不确定这是否足够。
至于替代方案,我知道只有 iSCSI 是真正的竞争对手,而且大多数人似乎都推荐 NFS,而不是其他任何鲜为人知的产品。
在 Windows 7/Vista 中使用 FAT32(兼容 Mac)格式化 USB 驱动器的最佳方法是什么?
我问是因为磁盘管理只允许您选择 exFAT(因为我相信磁盘超过 32 GB)。
使用diskpart从命令行执行此操作似乎也不起作用。
我以为我知道 HBA 和 RAID 之间的区别。
在我看来,HBA 从主主板/CPU 卸载,只是 JBOD……通常有一个外部 SAS 端口,而 RAID 卡与 HBA 做同样的工作,但增加了所有不错的 RAID 级别,可能还有电池备份+其他好处。
在查看产品的 LSI 网站后,我看到他们有内置 RAID 的 HBA 卡,例如LSI SAS 9211-8i 主机总线适配器。
所以......显然我错了!
HBA卡和RAID卡有什么区别?
阅读文档后,我发现自己对如何最好地管理生产应用程序/服务数据有些困惑。
似乎有3种选择:
-v参数docker run)--volumes-from)docker volume create)现在,似乎公认的做法是选项 #2,但我想知道 #3 的目的是什么。
特别是您如何正确处理这些场景,docker volume对于每种情况,最好使用数据卷容器还是这个?
我还是 ZFS 的新手。我一直在使用 Nexenta,但我正在考虑切换到 OpenIndiana 或 Solaris 11 Express。现在,我正在考虑将 ZFS 服务器虚拟化为 ESXi、Hyper-V 或 XenServer 中的客户机(我还没有决定哪一个 - 我倾向于使用 ESXi 来支持 VMDirectPath 和 FreeBSD)。
主要原因是我似乎有足够的资源可以轻松地同时运行 1-3 个其他 VM。主要是 Windows 服务器。也可能是 Linux/BSD VM。我希望虚拟化 ZFS 服务器托管其他 VM 的所有数据,以便它们的数据可以保存在与 ZFS 磁盘分离的物理磁盘上(以 iscsi 或 nfs 安装)。
该服务器目前有一个 AMD Phenom II,总共有 6 个内核(2 个未锁定)、16GB RAM(最大)和一个 LSI SAS 1068E HBA,连接了 (7) 个 1TB SATA II 磁盘(计划在带热备件的 RAIDZ2 上)。我还有 (4) 个 32GB SATA II SSD 连接到主板。我希望将两个 SSD 镜像到引导镜像(用于虚拟主机),并将另外两个 SSD 留给 ZIL 和 L2ARC(用于 ZFS VM 来宾)。我愿意再添加两个磁盘来存储 VM 来宾并将所有七个当前磁盘分配为 ZFS …