我需要构建一个解决方案来托管内部 git 存储库。它需要支持数十万(或更多)存储库。
我计划将多个“哑”服务器与共享存储一起使用,因此基本上当客户端尝试访问存储库时 - 负载平衡器会将其重定向到任何可用服务器。对存储库的任何更改 - 将在所有节点上复制。
我的第一个想法是为此使用 GlusterFS,但我读过它不能很好地处理小文件。我也在考虑使用 DRBD 自己复制所有内容,但这需要更多设置,并且与 GlusterFS 相比似乎更复杂。
两者中哪一个提供更好的性能?基本上,我试图解决的问题是,当任何服务器出现故障时 - 我希望其他人仍然能够提供数据。
有人有使用 MooseFS 的经验吗?我想要一个简单的分布式存储平台来存储大约 10 TB 的静态数据存档并将其提供给 20-40 个节点。此外,我希望能够随着存档的增长而添加存储,而无需重建文件系统。我不在乎它是否有点慢。我只是希望它简单而稳定。基本上从我所看到的 OS X 来看,它介于 MooseFS 和 Gluster 之间。还有其他建议吗?
在过去的几个月里,我一直在努力寻找在多个运行 Apache+PHP 的 Web 服务器(12+)之间共享多个网站内容的最佳方式。我面临的最大挑战之一是,我们需要能够随时读取和写入文件系统,无论是好是坏的原因(即应用程序不在我们的控制范围内,通过 Web 界面管理的 wordpress 站点等……)。
以下是我尝试过的一些事情,结果证明:
有关我们设置的一般信息:
所以我认为这涵盖了一切:)。提前感谢您的时间和回复。
我在理解 Gluster 程序块和节点时遇到了一个小问题。特别是,在3.3.0 Administration Guide 上,例如第 12 - 13 页,讨论了“条带卷”与“分布式条带卷”。有关概述,请参见第 5 章第 9 页。
我希望在 VMware ESXi 5.X 环境中将它用于 HA NFS 存储解决方案。因此,条带卷和分布式条带卷很受关注,因为它们与“访问非常大文件的高并发环境”有关。这充分描述了虚拟磁盘。
但是,在阅读手册时,我有这个:
所以我假设砖块是(例如)节点上的块设备(或者他们有时似乎提到的对等点)。一个节点是一个不同的服务器(其中一个节点)。
但是,条带卷上的图表显示了 server1 和 server2,因此这种假设似乎是错误的。
但是分布式条带卷也显示相同的内容,但不同。现在它显示 server1 有两个砖块(exp1 和 exp2),它称为“条带卷 0”,然后 server2 也有两个砖块(exp3 和 exp4),称为“条带卷 1”。
示例创建显示创建一个 8 节点 4 条带卷,这显然与每个节点只有 1 个砖块的图表不同。
此外,创建这两种类型的示例使用相同的语法。
有人可以帮忙澄清一下吗?什么是砖,什么是节点?我说得对吗,“条带化”图实际上是错误的,实际上显示的是分布式条带化卷?
你能帮我理解 GlusterFS 中的“direct-io-mode”吗?
我在禁用直接 I/O 模式的情况下获得了更好的读取结果 - 这是否意味着在禁用模式下它正在从缓存写入/读取 - 它是系统缓存还是 GlusterFS 缓存?推荐的方法是什么?我正在使用 4 个具有分布式复制卷的节点进行 Web 服务:
Write: dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc
echo 3 > /proc/sys/vm/drop_caches
Read: dd if=tempfile of=/dev/null bs=1M count=1024
Read-Read: dd if=tempfile of=/dev/null bs=1M count=1024
Write Read Re-Read
67.5 MB/s 94.9 MB/s 94.6 MB/s direct-io-mode=enabled
65.8 MB/s 230 MB/s 226 MB/s direct-io-mode=disabled
Run Code Online (Sandbox Code Playgroud) 我的服务器基础设施发展迅速,我决定创建一个分布式存储集群。我一直在为这个任务寻找一个合适的文件系统来满足我的要求,但它们都不支持本地磁盘缓存功能。我的每台服务器都有两个 600GB SAS 硬盘驱动器,我喜欢将它们用作缓存存储,用于存储来自分布式存储的最常访问的文件。
是否有任何开源文件系统支持此功能?我喜欢使用 Ceph 或 GlusterFS,但我没有找到有关本地磁盘缓存的任何信息。我认为这是分布式文件系统应该支持的基本功能之一。
首先是一些背景:我在一家运行 PHP 网络应用程序的公司工作。我们在多个网络服务器上通过 NFS 安装了一个存储后端。今天我们遇到了一个问题,如果一个网络服务器通过 NFS 写入文件,有时该文件直到几分钟后才会出现在其他安装的客户端上。它也不是多余的,因此我们无法执行任何“隐形”维护。
我一直在考虑迁移到 GlusterFS 解决方案(两个或三个复制的砖块/机器以实现冗余)。现在,使用 XFS 作为 Gluster “背后”的存储文件系统效果很好,性能也很好。Gluster 似乎也没有上面提到的同步问题。
但是,我想使用 ZFS 作为后端文件系统,原因是;
在我的解决方案演示设置中,我有三台带有 Replicated Gluster 的服务器,在每台服务器上的单独磁盘上都有一个 ZFS 后端池。我在 Linux (0.6.2) + GlusterFS 3.4 上使用 CentOS 6.5 和 ZFS。我也尝试过 Ubuntu 13.10。一切都在 VMware ESX 中。
为了测试这个设置,我在 Gluster 上安装了卷,然后运行 BlogBench ( http://www.pureftpd.org/project/blogbench ) 来模拟负载。我遇到的问题是,在测试结束时,ZFS 存储似乎陷入僵局。所有三台机器都有“zfs_iput_taskq”以 90-100% 的 CPU 运行,并且测试冻结。如果我中止测试,僵局不会消失,唯一的选择似乎是硬重启。
我试过了:
想法?我应该放弃 ZFS 并使用其他东西吗?备择方案? …
我已经在一对服务器上配置了 gluserfs,我可以将它安装在我的客户端机器上。当我将两台机器脱机并从头启动时,我还希望能够在引导时在两台 glusterfs 服务器上挂载 glusterfs 文件系统。
这些服务器使用起搏器设置为集群。除了共享数据库之外,pacemaker 还提供了一个虚拟 IP 地址来挂载 gluster 文件系统。
在两台服务器都使用以下命令启动后,我可以在每个服务器上手动挂载文件系统:
mount -t glusterfs nodea:/gv0 /data
Run Code Online (Sandbox Code Playgroud)
这很棒。但我希望这在启动时自动发生。
所以我尝试在 fstab 中添加一个条目:
nodea:/gv0 /data glusterfs _netdev 0 0
Run Code Online (Sandbox Code Playgroud)
当我在集群启动并运行后运行“mount -a”命令时,它会起作用。但是,它在启动时不起作用。(这是客户端机器在启动时挂载 glusterfs 的方式,但集群已启动并正在运行。所以当然它可以在启动时为它们工作。)
我还尝试创建一个 systemd 单元文件来处理启动时 glusterfs 的安装。我的单元文件位于名为“data.mount”的 /etc/systemd/system 中,如下所示:
# Mounting gluster fs at /data
[Unit]
Description = Automount gluster filesystem
After=pcsd.service
[Mount]
What=nodea:/gv0
Where=/data
Type=glusterfs
[Install]
WantedBy = pcsd.service
Run Code Online (Sandbox Code Playgroud)
同样,当两台服务器都通过运行命令“systemctl start data.mount”启动并运行时,这会起作用。如果我只重启集群中的一台机器,它也可以工作。但它不适用于重新启动两台服务器。
如果集群中的两个节点都出现故障,或者如果我出于某种原因想同时重新启动两个节点,我想确保当两台机器重新启动时,glusterfs 已安装在 /data 上。
作为一种解决方法,我在两台机器上的 root 的 crontab 中添加了以下几行:
@reboot sleep 60 && mount -t glusterfs nodea:/gv0 …Run Code Online (Sandbox Code Playgroud) 我正在使用 GlusterFS 3.7.9,目前在具有 4 个砖块的单个服务器上。
每块砖有 4TB,卷设置为仅分发。
该卷安装在辅助服务器上,我将其用于备份目的。
问题是,每隔几天辅助服务器就会看到该卷变小(12TB),并且当它尝试访问我得到的一些文件时transport endpoint not connected。
就好像它不再看到 4 块砖中的一块,而卷所在的服务器可以毫无问题地看到它们。
我的IP在防火墙白名单中,gluster volume status说一切都很好。
我应该检查什么?我找不到任何理由。
我运行了一个基于 Heketi 的 3 节点 glusterfs 3.10 集群,以通过 Kubernetes 自动配置和取消配置存储。目前,有 20 个卷处于活动状态——大多数卷的最小允许大小为 10gb,但每个卷只有几百 mb 的数据持久化。每个卷都复制到两个节点上(相当于 RAID-1)。
但是,节点上的 gluster 进程在每个节点上占用了大量内存 (~13gb)。创建statedump并查看结果,每个卷使用 1 到 30mb 的内存:
# for i in $(gluster volume list); do gluster volume statedump $i nfs; done
# grep mallinfo_uordblks -hn *.dump.*
11:mallinfo_uordblks=1959056
11:mallinfo_uordblks=20888896
11:mallinfo_uordblks=2793760
11:mallinfo_uordblks=23316944
11:mallinfo_uordblks=1917536
11:mallinfo_uordblks=29287872
11:mallinfo_uordblks=14807280
11:mallinfo_uordblks=2170592
11:mallinfo_uordblks=2077088
11:mallinfo_uordblks=15463760
11:mallinfo_uordblks=2030032
11:mallinfo_uordblks=2079856
11:mallinfo_uordblks=2079920
11:mallinfo_uordblks=2167808
11:mallinfo_uordblks=2396160
11:mallinfo_uordblks=34000240
11:mallinfo_uordblks=2649920
11:mallinfo_uordblks=1683776
11:mallinfo_uordblks=6316944
Run Code Online (Sandbox Code Playgroud)
所有卷都有性能的默认设置。出于某种原因,缓存大小显示了两次 - 一次是 32mb,一次是 128mb:
# gluster volume get <volumeId> all | grep performance …Run Code Online (Sandbox Code Playgroud) glusterfs ×10
nfs ×3
storage ×2
apache-2.2 ×1
centos ×1
cloud ×1
cluster ×1
drbd ×1
filesystems ×1
fuse ×1
git ×1
linux ×1
web-server ×1
zfs ×1