设为首页 收藏本站
查看: 897|回复: 0

[经验分享] solr一次性重建所有内容的索引引发的问题及优化方案

[复制链接]

尚未签到

发表于 2016-12-16 11:07:08 | 显示全部楼层 |阅读模式
  一、设定应用布署环境为Nginx+Tomcat
  二、问题集:
  1、Nginx下504 Timeout出错或Length出错
  2、Nginx下502 Conntect Refused出错及solr使用域名时的安全问题
  3、Java Heap Out of Memory出错
  三、问题详细分析
  1、由于请求时间太长,导致请求时间过期;在Nginx的缓存设置太小,导致Length出错
  2、solr使用域名后,需要加上安全控制配置,这时需要确保当前的布署应用的ip是被允许访问solr的,否则会出现502错误。
  3、由于一次性取出内容的数据列表对象太大,导致内存溢出。
  四、问题的解决
  1、nginx配置片短
  server{
  listen 80;
  server_name sou.caidao8.com;//配置成域名访问 说明1
  location / {
  //ip限制 说明1
  deny 192.168.1.1;
  allow 192.168.90.0/24;你允许的内部外段
  allow ip;你指定的ip;
  deny all;
  proxy_pass http://192.168.90.24:8080;
  proxy_buffering off;//此处解决Length问题 说明2
  proxy_set_header        Host            $host;
  index index.html;
  client_max_body_size    1024m;
  #client_body_buffer_size 128k;
  //以下解决超时问题   说明3
  proxy_connect_timeout   6000;
  proxy_send_timeout      6000;
  proxy_read_timeout      6000;
  }
  }
  当然相关的应用调用sou.caidao8.com时,也要做相关的timeout配置    说明3
  2、tomcat connector配置片段
  <Connector executor="tomcatThreadPool"
  port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8"
  maxHttpHeaderSize="8192"
  maxThreads="5000" minSpareThreads="1000"
  enableLookups="false" redirectPort="8443" acceptCount="3500"
  connectionTimeout="600000" 说明3 disableUploadTimeout="true"   compression="on" compressionMinSize="2048"
  compressableMimeType="text/html,text/xml,application/x-javascript,text/javascript,text/css,text/plain"
  />
  3、为防止内存溢出,需指定jvm以下参数较大值,比如 -Xms1024m -Xmx1024m  说明4
  说明1:solr支持分布式布署,使用域名调用更加灵活和便于分布式的实现。另外solr提供后台管理,若应用布署在远程机房,如果不使用域名,造成无法访问solr服务。由此还是有必要提供域名,但是这给solr的安全带来隐患,因此需要过虑和限制ip,比如我们这里只允许远程机房内部网段和公司的ip可访问solr域名。这样就达到了solr服务的安全性,又方便于以后分布式扩展及工作环境下访问solr的后台管理。
  说明2:由于内容较大,需设置proxy_buffering off;
  说明3:由于solr服务及其他调用solr服务的应用是在一个请求链上,因此相关的请求时间都需要设大。看上面的说明3标志,至少有三个地方需要相关的timeout设置
  五、应用优化 
  以上方法,虽然一时避免问题的出现,但如果数据量再次扩大,可能还是没有根本解决问题。需要从进一步优化应用。优化办法
  1、尽可能使用增量重建索引,由于增量索引数据量小,可避免以上所有问题。
  2、即使全文索引重建索引无法避免,必须按业务分段增量重建,比如每次取2000条记录,不要形成java大对象,这样也可避免以上所有问题。
  六、在解决问题的过程中,一度尝试使用nginx HttpChunkinModule来解决问题,低版本的nginx需要安装 HttpChunkinModule,因此直接升级nginx到1.4.1版本,但此时设置chunkin on;重起nginx无法生效;
           最终在http://serverfault.com/questions/159313/enabling-nginx-chunked-transfer-encoding/187573#187573找到了解决问题的关键"proxy_buffering off;"//此处解决Length问题,也就没有必要进一步去研究HttpChunkinModule。
           进一步了解在HttpChunkinModule http://wiki.nginx.org/HttpChunkinModule
          

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-315128-1-1.html 上篇帖子: solr 更新报错java.net.NoRouteToHostException: Cannot assign requested address 下篇帖子: solr限制admin界面访问(端口限制和http授权限制)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表