我有一个 shell 脚本,用于监视实时服务器集群上的加载时间和响应代码。它每 5 分钟总共运行 250 次迭代,分布在 10 个服务器和 6 个站点上。它使用带有 -w 标志的 curl 来返回相关信息,然后由我的 shell 脚本解析:
curl -svw 'monitor_load_times %{time_total} %{http_code}' -b 'server=$server' -m 15 -o /dev/null $url 2>&1
Run Code Online (Sandbox Code Playgroud)
然后,该信息由可以显示许多不同响应的图形脚本进行解析。但是,curl 偶尔会返回响应代码“000”。发生这种情况时,尽管分布在多次迭代中,但它似乎同时发生了多次:
我想要解决的是,这是否是一个客户端问题会影响我的结果,或者它是否实际上表明服务器端问题影响了我的整个集群。000 是否表示连接已断开?与具有该响应代码的 curl 迭代对应的数据库条目为 time_total 值返回“0.000”。我发现 curl 返回代码 000 的所有搜索结果都与不受支持的 HTTPS 相关,但我所有的测试 URL 都是 HTTP。
(500 个错误的激增是一个完全无关的问题,昨晚影响了我的服务器。)
我目前有一个带有四个设备的 Btrfs 分区:三个 3 TB 驱动器和一个 4 TB 驱动器。数据和元数据是 RAID 10,所以我有 6 TB 的可用空间,几乎已满。我预计 Btrfs 中的 RAID 5 支持会在我的存储填满时成熟,但显然这不是优先事项。
我的问题是:是否有理由更喜欢 RAID 10 而不是 RAID 1?我知道我当前硬件上的真正 RAID 1 应该给我 3 TB 的可用空间,每个块有 4 个副本,但 Btrfs 显然不会这样。来自Btrfs 常见问题解答:
btrfs 首先将所有设备组合到一个存储池中,然后在创建文件数据时复制块。RAID-1 当前定义为“不同设备上所有数据的 2 个副本”。这与 MD-RAID 和 dmraid 不同,因为它们为 n 个设备制作了 n 个副本。在三个 1 TB 设备上的 btrfs RAID-1 中,我们获得了 1.5 TB 的可用数据。因为每个块只被复制到 2 个设备,所以写入一个给定的块只需要正好写入 2 个设备;阅读只能从一个。
来自堆栈溢出的Jens Erat :
Btrfs 以块方式分发数据(及其 RAID 1 副本),因此可以很好地处理不同大小的硬盘。您将收到所有硬盘的总和,除以二 – 无需考虑如何将它们组合成大小相似的对。
如果多个磁盘出现故障,您总是有丢失数据的危险:RAID 1 …