请教一个 Linux 服务器文件双向实时同步问题

2015-09-12 12:17:06 +08:00
 Ansen

现有服务器如下

目前是使用 Nginx Server 反向代理 两台 File Server

在使用过程中,用户会随机上传文件到其中一台 File Server (主要是静态文件)

那么要怎么才能让两台 File Server 之前的文件实时保持一致呢?

文件同步流程如下:
A =实时=> B
B <=实时= A

在此处使用 inotify 貌似会造成无限循环

考虑过使用 NFS 共享,如果 NFS 宕掉的时候 可能会造成用户文件丢失

后期我准备让 Nginx 来处理静态文件,减小 tomcat 的压力(这个可以使用 rsync + inotify 和其中一台服务器保持实时同步就行了)

7232 次点击
所在节点    Linux
42 条回复
ryd994
2015-09-12 12:22:52 +08:00
只上传到其中一台,另一台在找不到文件的时候,尝试拉取
Ansen
2015-09-12 12:41:28 +08:00
@ryd994 开发那边实现吗?
Aliencn
2015-09-12 12:50:24 +08:00
看看能否读写分离,这样只做单项同步就行了
ansemz
2015-09-12 13:00:24 +08:00
用分布式文件系统即可。 glusterfs 比较适用这种场景。
Ansen
2015-09-12 13:14:31 +08:00
@Aliencn 主要是写,读我可以配置读 nginx 上面的
cevincheung
2015-09-12 13:22:49 +08:00
sersync
ryd994
2015-09-12 15:14:52 +08:00
nginx proxy_storage
这个估计你用得到
Ansen
2015-09-12 15:19:23 +08:00
@ansemz 如果用 glusterfs 那是不是 AB 要同时作为 服务端和客户端
Ansen
2015-09-12 15:20:19 +08:00
@ryd994 非常感谢,这样我就不需要考虑 nginx 服务器的同步问题了
fangpeishi
2015-09-12 16:22:22 +08:00
btsync ?
Orzzzz
2015-09-12 16:44:15 +08:00
我想到的办法是利用现成的 seafile ,在你的两台 fileserver A 和 B 的基础上,再加一台总的 fileserver_C , server_C 作为服务端,而 A 和 B 作为客户端,反正是内网,速度肯定很快的,而且,最重要的, server_C 上的文件都会有时间点备份,就是数据不丢失,缺点是,如果读写过于频繁,那在 server_C 上产生的数据量也是很大的。。

希望能帮到你。
wdongxv
2015-09-12 16:44:50 +08:00
nginx 判断文件是否存在,不存在反向代理到另一台。这里要自定义一个 http 头来防止陷入死循环。
Ansen
2015-09-12 16:47:43 +08:00
@wdongxv 这样会增加 nginx 服务器的负担,而且当后端服务器数量较多的时候响应时间太长
Ansen
2015-09-12 16:48:34 +08:00
@fangpeishi btsync 是最简单的解决方法了,但是我不知道在生产环境中表现如何
ab
2015-09-12 16:57:19 +08:00
A 反代 B B 反代 C 文件传到 C 用 proxy storage
Ansen
2015-09-12 17:07:24 +08:00
@ab 这样服务器的架构就全乱了
rrfeng
2015-09-12 17:45:40 +08:00
发布代码的时候把静态文件 rsync 到 nginx 上一份也不是很难吧!
Ansen
2015-09-12 18:20:40 +08:00
@rrfeng 项目引用的倒是简单,但是用户上传的就不好处理了
9hills
2015-09-12 18:24:39 +08:00
@Ansen btsync 不一定是最简单的,但一定是最坑爹的。这种双写绝对不能用 sync 架构

要么就是单写多读,要么就是网络文件系统(有 NFS , iSCSI ,分布式文件系统)

分布式文件系统不要用 GlusterFS ,此货坑爹
gamexg
2015-09-12 18:26:40 +08:00
即使能上传到两个上面你也分开到不同的路径啊。
比如上传到服务器 A 的文件路径是 static.xxx.com/a/filename
上传到 B 的是 static.xxx.com/b/filename

这样就变成了单向同步了,难度降低多了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/220151

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX