我正在设置我的第一个 Gluster 3.4 安装,一切都很好,直到我想创建分布式复制卷。
我有 4 个服务器 192.168.0.11、192.168.0.12、192.168.0.13 和 192.168.0.14。
从 192.168.0.11 我跑了:
gluster peer probe 192.168.0.12
gluster peer probe 192.168.0.13
gluster peer probe 192.168.0.14
Run Code Online (Sandbox Code Playgroud)
在每台服务器上,我在 /export/brick1 处都有一个已安装的存储卷
然后我跑了 192.168.0.11
gluster 卷创建 gv0 replica2 192.168.0.11:/export/brick1 192.168.0.12:/export/brick1 192.168.0.13:/export/brick1 192.168.0.14:/export/brick1
但我收到错误:
volume create: gv0: failed: Host 192.168.0.11 is not in 'Peer in Cluster' state
Run Code Online (Sandbox Code Playgroud)
果然,如果您运行 gluster peer status,它会显示与其他连接主机的 3 个对等点。即对等点数:3
主机名:192.168.0.12 端口:24007 Uuid:bcea6044-f841-4465-88e4-f76a0c8d5198 状态:集群中的对等点(已连接)
主机名:192.168.0.13 端口:24007 Uuid:3b5c188e-9be8-4d0f-a7bd-b738a88f2199 状态:集群中的对等点(已连接)
主机名:192.168.0.14 端口:24007 Uuid:f6f326eb-0181-4f99-8072-f27652dab064 状态:集群中的对等点(已连接)
但是,从 192.168.0.12 开始,相同的命令还显示了 3 个主机,而 192.168.0.11 是其中的一部分。IE
Number of Peers: …Run Code Online (Sandbox Code Playgroud) 我不太擅长 gluster,因为我昨天才开始使用它。
我有2台服务器。两者都在运行 glusterfs-servers。
从服务器 1:我运行sudo glusterfs peer probe server2并将它添加到集群中。没有人问任何问题。我没有告诉 server2 允许 server1 将它添加到集群中。对我来说没有意义。
这让我很困惑。我的意思是,如果有人将我的 glusterfs 服务器添加到他们的集群中会怎样。好像完全没有安全感。这太疯狂了,我不明白。
我只是在检查我的 glusterfs 卷的状态,我有一个没有路径的裂脑条目:
# gluster volume heal private_uploads info
Brick server01:/var/lib/glusterfs/brick01/uploads/
<gfid:4c0edafb-0c28-427c-a162-e530280b3396> - Is in split-brain
<gfid:42d62418-1be9-4f96-96c4-268230316869> - Is in split-brain
Number of entries: 2
Brick server02:/var/lib/glusterfs/brick01/uploads/
<gfid:42d62418-1be9-4f96-96c4-268230316869> - Is in split-brain
<gfid:4c0edafb-0c28-427c-a162-e530280b3396> - Is in split-brain
Number of entries: 2
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我如何解决它?
我正在运行 GlusterFS 3.5.9:
# gluster --version
glusterfs 3.5.9 built on Mar 28 2016 07:10:17
Repository revision: git://git.gluster.com/glusterfs.git
Run Code Online (Sandbox Code Playgroud) 我有 2 个网络服务器,在此过程中可能不得不添加更多服务器。现在我使用 lsyncd + csync2 使这些服务器保持同步。它在性能方面运行良好,因为所有文件都在两台服务器上(无需网络访问即可在本地打开文件),但在其他情况下效果不佳。
一个例子是,如果我删除了服务器 1 上的一个文件,并立即将一个新文件上传到服务器 1,该文件具有相同的名称。然后该文件将同时从服务器 2 中删除,导致服务器 1 上新上传的文件被删除,因为服务器 2 将删除事件发送到服务器 1 以完成“更新循环”。
我不禁想到必须有更好的方法来保持服务器同步。我一直在研究 GlusterFS,我发现不鼓励将所有文件复制到所有服务器的设置。但是,我在这些服务器上运行了像 Drupal 这样的 CMS 系统。这样的 CMS 系统通常会打开相当多的文件,我担心太多的网络流量无法获取这些文件会减慢请求速度。
考虑将 lsyncd + csync2 替换为设置为将所有文件复制到所有节点的 GlusterFS 是一个想法,还是一个坏主意?
我在远程文件服务器上托管了一个 GlusterFS 卷。我可以从同一个 DC 中的网络服务器以及其他 DC 中的其他服务器装载卷,但是当我尝试在本地开发服务器上装载卷时,装载失败并显示以下日志条目:
[2015-02-04 15:02:56.034956] I [MSGID: 100030] [glusterfsd.c:2018:main] 0-/usr/sbin/glusterfs: Started running /usr/sbin/glusterfs version 3.6.2 (args: /usr/sbin/glusterfs --volfile-server=eros --volfile-id=/storage /var/storage)
[2015-02-04 15:02:56.065574] E [glusterfsd-mgmt.c:1494:mgmt_getspec_cbk] 0-glusterfs: failed to get the 'volume file' from server
[2015-02-04 15:02:56.065650] E [glusterfsd-mgmt.c:1596:mgmt_getspec_cbk] 0-mgmt: failed to fetch volume file (key:/storage)
[2015-02-04 15:02:56.065889] W [glusterfsd.c:1194:cleanup_and_exit] (--> 0-: received signum (0), shutting down
[2015-02-04 15:02:56.065905] I [fuse-bridge.c:5599:fini] 0-fuse: Unmounting '/var/storage'.
[2015-02-04 15:02:56.081713] W [glusterfsd.c:1194:cleanup_and_exit] (--> 0-: received signum (15), shutting down
Run Code Online (Sandbox Code Playgroud)
我已经验证防火墙没有阻止数据包,所有机器都运行来自同一个 repo 的相同版本的 …
我很好奇是否有人在某种形式的分布式文件系统上的生产容器中实际运行 PostgreSQL - 最好是 GlusterFS 或任何东西。
我目前正在运行 Mesos/Marathon。如果 PostgreSQL 节点发生故障,Marathon 只需在其他节点上启动另一个 PostgreSQL 实例,如果做得好(服务发现和应用程序从数据库连接丢失中恢复),将实现最终的容错。
我知道PostgreSQL有自己的HA解决方案,比如日志传送和热备备份,但是仍然需要解决什么时候从主切换到从,如何正确切换等等问题。
那么,您如何在 GlusterFS 或类似产品上运行 PostgreSQL?如果是这样,它是否稳定?性能怎么样?
我在同时充当客户端和服务器的 Ubuntu 12.04 机器上运行官方 GlusterFS 3.5 软件包,除了在启动时安装 GlusterFS 卷外,一切似乎都运行良好。这是我在日志文件中看到的:
[2014-06-17 08:20:52.969258] I [glusterfsd.c:1959:main] 0-/usr/sbin/glusterfs: Started running /usr/sbin/glusterfs version 3.5.0 (/usr/sbin/glusterfs --volfile-server=127.0.0.1 --volfile-id=/public_uploads /var/www/shared/public/uploads)
[2014-06-17 08:20:52.998985] I [socket.c:3561:socket_init] 0-glusterfs: SSL support is NOT enabled
[2014-06-17 08:20:52.999048] I [socket.c:3576:socket_init] 0-glusterfs: using system polling thread
[2014-06-17 08:20:53.000373] E [socket.c:2161:socket_connect_finish] 0-glusterfs: connection to 127.0.0.1:24007 failed (Connection refused)
[2014-06-17 08:20:53.000427] E [glusterfsd-mgmt.c:1601:mgmt_rpc_notify] 0-glusterfsd-mgmt: failed to connect with remote-host: 127.0.0.1 (No data available)
[2014-06-17 08:20:53.000442] I [glusterfsd-mgmt.c:1607:mgmt_rpc_notify] 0-glusterfsd-mgmt: Exhausted all volfile servers
[2014-06-17 08:20:53.013793] W [glusterfsd.c:1095:cleanup_and_exit] …Run Code Online (Sandbox Code Playgroud) 以前我问过在 Ubuntu 12.04 服务器中启动时挂载 GlusterFS的问题,答案是这在 12.04 中存在问题并且在 14.04 中工作。出于好奇,我在笔记本电脑上运行的虚拟机上进行了尝试,并且在 14.04 中可以正常工作。由于这对我来说很重要,我决定将我正在运行的服务器升级到 14.04 却发现 GlusterFS 也没有自动挂载本地主机卷。
这是一个 Linode 服务器,fstab 如下所示:
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/xvda / ext4 noatime,errors=remount-ro 0 1
/dev/xvdb none swap sw 0 0
/dev/xvdc /var/lib/glusterfs/brick01 ext4 defaults 1 2
koraga.int.example.com:/public_uploads /var/www/shared/public/uploads glusterfs defaults,_netdev 0 0
Run Code Online (Sandbox Code Playgroud)
启动过程是这样的(围绕网络挂载部分,这是唯一的失败):
* Stopping Mount network filesystems [ OK ]
* Starting set sysctls from /etc/sysctl.conf [ OK ]
* Stopping set …Run Code Online (Sandbox Code Playgroud) 设置:两个带有最新更新的全新 CentOS 6.5 服务器。两者都全新安装了 Gluster 3.5.2。
我所做的(从服务器 2 的角度来看,shared1 和 shared2 是逻辑卷):
wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo
yum -y install glusterfs glusterfs-fuse glusterfs-server -y
/etc/init.d/glusterd start
chkconfig --level 345 glusterd on
echo "1.2.3.4 server1" >> /etc/hosts
echo "4.3.2.1 server2" >> /etc/hosts
gluster peer probe server1
gluster volume create shared replica 2 transport tcp server2:/shared2 server1:/shared1 force
gluster volume start shared
mount.glusterfs server2:/shared /mnt/shared
gluster peer status
Run Code Online (Sandbox Code Playgroud)
这工作得很好,我在两台服务器上的 /mnt/shared 上都有一个很好的共享文件系统。命令集分别在每台服务器上执行,并进行修改以匹配该服务器的观点。
测试:
如果我按下 server1 上的重置按钮,我在使用或访问 /mnt/shared 上的文件时会有大约 45 秒的可怕延迟
我确实在 google、glusterfs 管理指南和 serverfault …
在深入了解如何使用 gluster 设置复制之后,我遇到了这个问题:Apache Can Read The GlusterFS Brick Directly But Write to the GlusterFS Mount?
我还发现了一个似乎可以解释同一件事的方法,我认为我理解它,但现在我认为我不理解。
因此,为了获得这种复制功能,我需要让两台机器同时充当服务器和客户端吗?现在我不明白这种关系是如何运作的:B 不是,例如 A 的客户吗?
是否涉及多个级别的客户端-服务器关系?A 是 A 的客户端,B 是 B 的客户端,每个文件夹都安装在同一台机器上的一个卷中,并且这两个卷在第三层关系中以某种方式同步(从 A 到 B)?
为什么上面的问题是关于写入文件系统或已安装卷的问题?当我让 B 成为 A 的客户端时,A 导出一个文件夹,B 将其安装为文件夹中的远程卷时,我从不问自己在写什么:我写入了 A 上的原始文件夹和安装的卷B. 这不是它应该如何工作的吗?
glusterfs ×10
ubuntu ×2
ubuntu-12.04 ×2
boot ×1
csync2 ×1
docker ×1
lsyncd ×1
mount ×1
postgresql ×1
replication ×1
ubuntu-14.04 ×1
web-server ×1