集群+共享存储,如何实时同步到备用服务器?
我的场景:两侧集群,简称A群和B群,每群里有4台web服务器,各服务器都挂载了一台网络存储至/opt/upload,其中有很多目录以及子目录,web服务器上的业务系统都会随时读写网络存储对其中的文件进行操作。B群是备用集群。为了保证两侧集群的文件是一样的,需要实时将A群的文件同步到B群的网络存储。
我现在的做法是在A群的4台web(web1,web2,web3,web4)服务器上都部署了sersync+rsync,在B群的某一台web服务器上部署rsync作为接收端。现在遇到的问题是假设web2在/opt/upload中创建了一个目录dir1,然后web1的业务系统向dir1中写入了一个文件file1,web1上的sersync并不会监听到相关事件,所以不会将file1同步到B群。
原因我分析是A群的4台web服务器上的sersync启动的时候是对当时的/opt/upload下的所有目录利用inotifywait添加了监听,而由于dir1是在web2上创建的,web2上sersync能监听到dir1的创建事件所以创建新的监听,而web2并不知道创建了dir1,所以不会监听该目录,从而对于其中的文件操作事件也不会监听,所以sersync不会执行同步。
我也考虑了使用inotify-tools+rsync,但发现只能这种方案是同步/opt/upload整个目录,而由于这个目录中有很多目录和子目录,并且存储量太大(接近2T),同步一次的时间太长,导致无法采用inotify-tools+rsync方案。
对于这种问题和使用场景,大家都是如何处理的,有什么更好的方案吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
试试分布式文件系统呢?一般都会支持主从结构的
现在就是两地集群的,两地集群都有各自的存储
你没理解我的意思,我的意思是应用与存储分开,引用做自己的容灾,存储做自己的容灾,何来的存储同步的问题
为何不是应用与存储分开,应用做容灾,存储也做容灾?
或者持久化目录结构信息,然后每个集群根据持久化的信息去取文件就好了,不需要rsyc之类的东西了
这个恐怕不现实了,同样是因为同步一次耗时太长
我的意思是 发个消息,然后异步去同步文件
发个消息,让另外一个集群主动同步一次?