solrcloud使用中遇到的问题及解决方式
首先声明,我们团队在使用solrcloud过程中踩了一些坑,同事(晓磊和首富)进行了总结,我列到我的博客上做记录用:
Q:为什么Solr里面的时间比数据库里面早8小时?
Solr默认采用的时区是UTC时区,而DB中用的则是CST时区,这两个时区本身就相差了8个小时。可以通过修改Solr启动配置SOLR_TIMEZONE="UTC+08:00"将时区设置为CST。注意:修改SOLR_TIMEZONE只在导入数据时起到自动转换时区的作用。即使修改了以上配置,Solr在展示数据时任然采用UTC时区,通过solrj交互时任然需要手动转换时区。
Q:Solr集群配置域名无法作用。
在搭建Solr集群时,不同机器上的核心具有不同的命名例如:
127.0.0.1:8983上有financeLog_shard1_replca1核
127.0.0.2:8983上有financeLog_shard1_replca2核
127.0.0.3:8983上有financeLog_shard1_replca3核
三个核共同组成了名为financeLog的集群。
如果为三台机器配置solr.nonobank.com域名,通过ngx来做负载均衡是不行的,因为在具体方位时url中需要指定相应的核名。如
http://127.0.0.1:8983/solr/financeLog_shard1_replica1
解决方案,通过solrj提供的SolrCloudClient,通过Zookeeper地址进行访问。
Q:SolrClient连接Zookeeper超时问题
SolrClient首次连接需要较长的时间可以通过setZkConnectTimeout()方法设置一个较长的超时时间。
Q:关于Solr中文分词问题
Solr对中文的原生支持较差,只能单个字分词,如“真开心”只能分词成:真、开、心,这样在搜索“心开”时该条同样会被搜索出来,这不是我们所想要的。
解决方案:使用ICUTokenizer替代solr默认的Tokenizer,ICUTokenizer对中文有较好的分词,可以将“真开心”只能分词成:真、开心、真开心。
Q:如何记录较慢的查询
在Solr启动配置中添加<slowQueryThresholdMillis>1000</slowQueryThresholdMillis>将超过1s的查询记录。
Q:Solr日志量太大
可以将CONSOLE的日志级别由INFO调整为WARN;或者控制日志文件的大小,如:
log4j.appender.CONSOLE=org.apache.log4j.RollingFileAppender
log4j.appender.CONSOLE.MaxFileSize=1000MB
log4j.appender.CONSOLE.MaxBackupIndex=10
保证最多记录10G的日志文件。
Q:修改Solr配置是否需要重启服务器
Solr的配置文件分为两部分,一部分留在本地,一部分留在Zookeeper,留在Zookeeper的配置只需先下载,再修改,最后再上传回Zookeeper即可,无需重启。留在本地的配置修改后需要重启当前服务器才会生效。
使用bin目录下的zkcli.sh脚本完成配置文件的上传下载。
Q:Solr集群无法恢复
Solr集群恢复在最坏的情况下需要2倍当前core的存储空间,所以有时会出现磁盘空间不够的情况。
Q:通过solr自带的delta-import增量导入会丢数据
Solr本身会记录最后一次执行增量导入的时间,设为time1,下一次通过执行 SELECT * FROM finance_log WHERE update_time >= time1 找出增量数据。
丢失数据的根本原因在于DB中一条记录的update_time并不是该条记录实际提交的时间(即出现在DB中的时间)。
例如, DB在8:00:00执行一条update语句更新一条数据data后,data的update_time会被设置为8:00:00,而对应事务实际提交(执行commit)的时间可能是 8:00:20。假设Solr在8:00:10时执行增量导入,执行后会记录最后一次更新时间为8:00:10,此时由于data的更新状态尚未被提交,其对应Solr数据不会被更新。下一次执行增量导入时通过SELECT * FROM finance_log WHERE update_time >= 8:00:10找出增量的数据时并不包含data,即data被丢失了。
性能方面
solr上线后我们发现了几个性能方面的问题
Q: Solr在多核情况下只能使用一个CPU,如下图所示,一共有8个核,永远只有一个核在工作

分析:有可能和我们的VM配置有关,我们换成多CPU单核的情况下(8个CPU),CPU使用率上去了

Q:Solr GC 吞吐量低,如下图所示,gc的吞吐量只有85%

分析: 初步怀疑是young heap设置了太小
解决方案:使用G1GC,增大了Xmn后吞吐量提升很明显 (85%-> 98%)

Q:Out of Memory
分析:观察log发现有很多OOM的错误,通过分析一台solr的JVM Heap,发现solr dump中的FieldCache占了大约5G(不能被GC),fieldCache这个配置在solrcloud不能控制,是底层的lucene来控制,它是用来做sorting 和faceting的,也就是说我们业务中会在solr中进行大批量数据的排序(比如拿最大值是时候)。
解决方案:优化业务方每一次取排序数据的量

solrcloud使用中遇到的问题及解决方式的更多相关文章
- tmux使用中出现的问题和解决方式
常用操作: tmux ls 看当前都有哪些sessiontmux new -s my1 创建窗口,名为my1ctrl+B,D 退出窗口 (这个就是同时按ctrl和B,然后松开后再按D键)tmux at ...
- mysql中limit与in不能同时使用的解决方式.
mysql中limit与in不能同时使用的解决方式. 分类: MySQL2011-10-31 13:53 1277人阅读 评论(0) 收藏 举报 mysqlsubquery MySQL5.1中子查询是 ...
- Android加载图片OOM错误解决方式
前几天做项目的时候,甲方要求是PAD (SAMSUNG P600 10.1寸 2560*1600)的PAD上显示高分辨率的大图片. SQLITE採用BOLD方式存储图片,这个存取过程就不说了哈,网上一 ...
- 后端Long类型传到前端精度丢失的正确解决方式
原因:前端js对Long类型支持的精度不够,导致后端使用的Long传到前端丢失精度,比如现在分布式id生成算法"雪花算法"在使用中就会出现问题. 解决方式: 1.后端的Long类型 ...
- Android内存优化-内存泄漏的几个场景以及解决方式
转自:http://blog.csdn.net/a910626/article/details/50849760 一.什么是内存泄漏 在Java程序中,如果一个对象没有利用价值了,正常情况下gc是会对 ...
- Linux下Chrome浏览器不支持WebGL的解决方式。
今天使用Chrome浏览器,总是报这样一个错误: Uncaught TypeError: Cannot read property 'canvas' of null. 细看之下是无法获取WebGL上下 ...
- get传递中文产生乱码的解决方式汇总
1 最基本的乱码问题. 这个乱码问题是最简单的乱码问题.一般新会出现.就是页面编码不一致导致的乱码. <%@ page language="java" pageEncodin ...
- Ubuntu安装出现左上角光标一直闪解决方式
Ubuntu安装出现左上角光标一直闪解决方式: 01下载ubunu http://cn.ubuntu.com/download/ 02.软碟通 http://pan.baidu.com/s/1qY8O ...
- https 页面中引入 http 资源的解决方式
相对协议 应用场景 浏览器默认是不允许在 https 里面引用 http 资源的,一般都会弹出提示框. 用户确认后才会继续加载,用户体验非常差. 而且如果在一个 https 页面里动态的引入 http ...
随机推荐
- INNO安装卸载自动结束进程插件使用
[Code] //安装前判断是否有进程正在运行,istask.dll文件与打包的exe文件一起function RunTask(FileName: string; bFullpath: Boolean ...
- android: SQLite使用 SQL 操作数据库
虽然 Android 已经给我们提供了很多非常方便的 API 用于操作数据库,不过总会有一些 人不习惯去使用这些辅助性的方法,而是更加青睐于直接使用 SQL 来操作数据库.这种人 一般都是属于 SQL ...
- [3].jekyll的基础
一.创建新项目 以下是一个获取最简单 Jekyll 模板并生成静态页面的方法.: Administrator@FANGPENG /e $ jekyll new myblog # 创建名为 myblog ...
- 初识React,Virutal DOM, State以及生命周期
这是React分类下的第一篇文章,是在了解了一些基本面后,看Tyler文章,边看边理解边写的. React可以看做是MVC中的V,关注的是视图层.React的组件就像Angular的Directive ...
- csdn 泄露用户密码害人不浅啊。
先是京东被盗,接着博客园也登陆不了了.
- 在github上写博客
在github上混了几个月,收获颇多.作为一个开源的坚定信仰者,深深觉得每一个码农都应该参与到开源社区中,github提供了一个平台,让你为开源项目提交代码变得异常简单和直接.以前由于工作异常繁忙和繁 ...
- 《STL系列》之vector原理及实现
最近忙得蛋疼,但还是想写点属于自己的东西.也不知道写点啥,最后决定试着自己实现STL中常用的几个集合,一来加深自己对STL的理解,二来看看自己是否有这个能力实现.实现目标就是:1能和STL兼容:2最大 ...
- 奇怪吸引子---Russler
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...
- TaskHosting - 开发桌面工具原来还可以这么简单
由来 对于喜欢开发的我经常会写一些小工具,这些小工具多以功能为主,不要求漂亮.个性化的UI.但起码要保证使用方便,因此最基本的功能要有: GUI(图片用户界面) 程序配置的保存与读取(让用户在GUI上 ...
- Scala 深入浅出实战经典 第54讲:Scala中复合类型实战详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...