我正在开发一个有2台服务器的node.js应用程序。其中一个被认为是production
服务器,而第二个被认为为dataAnalytics
服务器。
目前,所有数据都被写入production
集合,只有一个集合的数据量非常大,只写入dataAnalytics
。我还部署了一个每4小时将production
同步到dataAnalytics
的脚本:
- 集合P1:
production
(和dataAnalytics
每4h更新一次( - collectionP2:
production
(dataAnalytics
每4h更新一次( - collectionDA1:
dataAnalytics
(高音量,不在production
中(
在猫鼬中,我用实现了
await mongoose.connect('mongodb://127.0.0.1:27017');
const daCn = await createConnection('mongodb://da.vrack:27017');
const collectionP1 = mongoose.model(new Schema(...));
const collectionP2 = mongoose.model(new Schema(...));
...
const collectionDA1 = daCn.model(new Schema(...));
这运行良好,目前数据正在单独保存。
我想利用mongodb复制。我知道,要创建副本集,需要第三台服务器,甚至希望有一台只包含production
数据的备份服务器(没有collectionDA1(。
Q是否可以用这两个服务器(或考虑backup
的三个服务器(创建一个副本集,并在dataAnalytics
中只保留一些写入?我不确定的是,如果production
失败,dataAnalytics
开始为主,然后production
恢复,但dataAnalytics
继续为主,会发生什么。。。我不希望collectionDA1中的所有记录突然开始出现在production
服务器中。
在不可能的情况下,有比我所描述的更好的方法吗?
选项1:您也可以只使用两台服务器创建replicaSet,但第二台服务器需要设置为HIDDEN,并且不可用于PRIMARY,但这样您就没有自动故障切换选项。如果PRIMARY出现问题,您需要手动将HIDDEN重新配置为PRIMARY。
选项2:根据您添加的详细信息,最好使用PRIMARY+SECONDARY+ARBITER创建replicaSetdataAnalytics(您的分析应用程序将使用SECONDARY首选读取选项进行读取,您将不时从SECONDARY进行备份(
选项3:创建具有3个成员的replicaSet第一个PRIMARY(读取+写入(,第二个SECONDARY(分析-仅读取(,第三个SECONDARY(备份(。