Elasticsearch部署遇到的那些坑

最近一个项目要求部署Elasticsearch+mongdb,感觉是一个比较简单的事,却遇到了不少的坑。客户的数据库有5万多条数据,大小共60多G的文档。
先说明步骤:
1、安装Elasticsearch和elasticsearch-river-mongodb,就不多说了,按照随下官方说明安装即可(https://github.com/richardwilly98/elasticsearch-river-mongodb/wiki)。
2、增量导入
先导入30%文档到mongodb,然后启动Elasticsearch服务,通过river插件自动同步到Elasticsearch服务器。
完成后,再导入30%文档到mongodb,这时候不需要关闭Elasticsearch,让它自动同步。
一直增量导入,直到完成。
遇到的坑
1、不能连接远程mongodb。
原来之前mongodb初始化副本集都是本地模式,如下图 : 127.0.0.1一定要换成具体IP,否则远程不能连接。
rs.initiate({“_id” : “rs0”,”members” : [{“_id” : 0,”host” : “127.0.0.1:27017”}]})

2、第一次初始化ES时很顺利,再次增量时,报River out of sync with oplog.rs collection。
由于mongodb oplog大小太小。官方建议100MB,如果硬盘足够,可以扩展到10-20G,修改oplog大小,百度一下 。

3、每次同步到某个文档时,就失败,具体错误忘了,应该也是内存溢出之类的。
后来发现,文档中居然有3G多的文档,这个文档肯定同步不到Elasticsearch里。只有修改river的源码了 ,修改org.elasticsearch.river.mongodb.util.MongoDBHelper.serialize()方法,增加大小判断,如果大于50MB,就不同步内容到Elasticsearch。重新编译并拷贝到Elasticsearch插件里。

Long maxLength=50000000L;
if(file.getLength()<maxLength){
            try (InputStream stream = file.getInputStream()) {
                while ((nRead = stream.read(data, 0, data.length)) != -1) {
                    buffer.write(data, 0, nRead);
                }
                buffer.flush();
            }
            encodedContent=Base64.encodeBytes(buffer.toByteArray());
            buffer.close();
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值