如何在单机上建一个假的solrcloud 搭建

sbp 的BLOG
用户名:sbp
文章数:179
评论数:84
访问量:378885
注册日期:
阅读量:5863
阅读量:12276
阅读量:410050
阅读量:1098236
51CTO推荐博文
前面简单了解了的相关知识,为的学习作了一层铺垫。在的中,可以很简单地用实现嵌入式的单机版。但是在生产环境中,一般都是部署在上的。为了使架构更加灵活,也是单独部署的。日常学习中,就一台单机怎么学习呢?本文将记录在上实现版的伪分布式。1、软件工具箱在本文的实践中,需要用到以下的软件: &
solr-4.2.0.zip & & &zookeeper-3.4.6.tar.gz & & apache-tomcat-6.037.tar.gz都是旗下的软件,很容易在官网下载到,就不贴下载地址了。2、部署过程单机上的学习环境搭建大部分都是体力活,没有什么技术含量。不像生产环境,需要考虑到性能问题。2.1 部署好单机版Tomcat+Solr第一步:在盘根目录下建立目录。并把解压到目录下,重命名为。把解压,并把solr-4.2.0/example/目录下的文件夹复制到目录下,重命名为。如下图:第二步:把复制到目录下。第三步:修改目录下的文件,里面加入的启动参数。截图如下:650) this.width=650;" width="553" height="192" src="/wyfs02/M02/26/43/wKioL1NrDxby9CpwAAFpmoHquWI731.jpg" title="_SolrCloud+ZooKeeper+Tomcat单机伪分布式部署 2-778.png" alt="wKioL1NrDxby9CpwAAFpmoHquWI731.jpg" />第四步:启动,并在浏览器中输入: 验证是否配置成功。如果配置成功,浏览器的页面如下:650) this.width=650;" width="555" height="295" src="/wyfs02/M01/26/43/wKiom1NrD1ChePyFAAErOVH13Z8549.jpg" title="_SolrCloud+ZooKeeper+Tomcat单机伪分布式部署 2-900.png" alt="wKiom1NrD1ChePyFAAErOVH13Z8549.jpg" />关于的设置,其实有三种方法:、在的中设置,在启动时附带参数,还有就是本文的方法。2.2 配置多Tomcat+solr同时运行第一步:把复制份,分别命名,;把复制份,分别命名,。最后的目录结构如下图:650) this.width=650;" width="556" height="205" src="/wyfs02/M00/26/43/wKioL1NrDzDhpmBBAADtVltmdkw864.jpg" title="_SolrCloud+ZooKeeper+Tomcat单机伪分布式部署 2-1120.png" alt="wKioL1NrDzDhpmBBAADtVltmdkw864.jpg" />第二步:为了三个能够在一台机器上同时启动,需要修改的端口信息。修改方案如下:Tomcat Admin PortHTTP/1.1 PortAJP/1.3 &Porttomcat-server_1800580808009tomcat-server_2801580908019tomcat-server_3802581008029修改位置在里面。Tomcat Admin Port:650) this.width=650;" width="556" height="94" src="/wyfs02/M00/26/43/wKioL1NrDz3T-TWYAACxbvJiUaw864.jpg" title="_SolrCloud+ZooKeeper+Tomcat单机伪分布式部署 2-1391.png" alt="wKioL1NrDz3T-TWYAACxbvJiUaw864.jpg" />HTTP/1.1 Port650) this.width=650;" width="556" height="80" src="/wyfs02/M02/26/43/wKiom1NrD3GzaoHMAACAAlzHkQY468.jpg" title="_SolrCloud+ZooKeeper+Tomcat单机伪分布式部署 2-1407.png" alt="wKiom1NrD3GzaoHMAACAAlzHkQY468.jpg" />AJP/1.3 &Port650) this.width=650;" width="556" height="66" src="/wyfs02/M00/26/43/wKiom1NrD3yScytgAABiq0Z-ckk358.jpg" title="_SolrCloud+ZooKeeper+Tomcat单机伪分布式部署 2-1423.png" alt="wKiom1NrD3yScytgAABiq0Z-ckk358.jpg" />第三步:修改各个tomcat服务器文件里面的tomcat-server_2修改成tomcat-server_3修改成第四步:验证修改是否成功,依次启动三个。并在浏览器输入如下的:如果都能正常访问到的页面,那么说明配置是成功的。否则就需要检查哪里错了或者遗漏了。2.3 配置ZooKeeper集群这部分的内容与前面tomcat+solr是没有关联的,所以配置这里,可以跟忘记前面的内容。第一步:解压到目录,重命名为。第二步:把目录下的修改为。并写入如下的配置参数:650) this.width=650;" width="556" height="239" src="/wyfs02/M02/26/43/wKiom1NrD4rzP7OkAAFfqUKxN7I033.jpg" title="_SolrCloud+ZooKeeper+Tomcat单机伪分布式部署 2-2131.png" alt="wKiom1NrD4rzP7OkAAFfqUKxN7I033.jpg" />并且按照配置创建相应的data和目录。如果不不创建目录是无法正常启动的。在目录中创建文件不需要后缀名,在文件中写入数字并保存退出。第三步:把zk-server_1复制份,分别命名为、。然后修改各个的目录下的和和。修改方案如下:dataDirdataLogDirclientPortzk-server_1/conf/zoo.cfgD:/solrCloud/zk-server_1/dataD:/solrCloud/zk-server_1/logs2181zk-server_2/conf/zoo.cfgD:/solrCloud/zk-server_2/dataD:/solrCloud/zk-server_2/logs2182zk-server_3/conf/zoo.cfgD:/solrCloud/zk-server_3/dataD:/solrCloud/zk-server_3/logs2183并且修改每个目录下的文件中的内容。是, 是,是。第四步:启动三个。并验证是否配置成功。我是在程序中验证的,程序代码见附录。验证方法需参看我的另一篇博客。简而言之就是连接三台服务器的任意一台,创建结点,然后连接另外一台,取得结点的数据,如果能够取到,则说明配置是成功的。注意:连接第一台时有异常信息,不用管,等都连接起来就没有异常了。2.4 配置Tomcat+solr+zookeeper集群前面能够启动和访问了,而且也能启动和访问了。接下来就需要把他们关联起来。第一步:修改的配置信息,把分别修改成对应的端口。solr_home_1/solr.xml650) this.width=650;" width="556" height="44" src="/wyfs02/M01/26/43/wKioL1NrD3PCCvd6AABbW_UhzV0155.jpg" title="_SolrCloud+ZooKeeper+Tomcat单机伪分布式部署 2-3039.png" alt="wKioL1NrD3PCCvd6AABbW_UhzV0155.jpg" />solr_home_2/solr.xml650) this.width=650;" width="555" height="40" src="/wyfs02/M02/26/43/wKioL1NrD4LxgMHdAABcIiLCW7M838.jpg" title="_SolrCloud+ZooKeeper+Tomcat单机伪分布式部署 2-3062.png" alt="wKioL1NrD4LxgMHdAABcIiLCW7M838.jpg" />solr_home_3/solr.xml第二步修改中的的参数信息。tomcat-server_1参数信息如下set JAVA_OPTS=-Dsolr.solr.home=D:/solrCloud/solr_home_1 &-Dbootstrap_confdir=D:/solrCloud/solr_home_1/collection1/conf -Dcollection.configName=myconf -DnumShards=2 -DzkHost=127.0.0.1:2181 tomcat-server_2的参数信息如下:set JAVA_OPTS=-Dsolr.solr.home=D:/solrCloud/solr_home_2 &-DzkHost=127.0.0.1:2181tomcat-server_3的参数信息如下:set JAVA_OPTS=-Dsolr.solr.home=D:/solrCloud/solr_home_3 &-DzkHost=127.0.0.1:2181第三步:先启动,然后启动其它的。启动完成后,在浏览器中输入:得到的页面都是一样的:650) this.width=650;" width="555" height="258" src="/wyfs02/M00/26/43/wKioL1NrD5TSLjTOAAB-1mLVCqk996.jpg" title="_SolrCloud+ZooKeeper+Tomcat单机伪分布式部署 2-3890.png" alt="wKioL1NrD5TSLjTOAAB-1mLVCqk996.jpg" />这样一个简单的运行环境就搭建起来了。附录package zookeeper_
import java.io.IOE
import org.apache.zookeeper.CreateM
import org.apache.zookeeper.KeeperE
import org.apache.zookeeper.WatchedE
import org.apache.zookeeper.W
import org.apache.zookeeper.ZooDefs.I
import org.apache.zookeeper.ZooK
public class ZkClient {
//创建 一个结点
public static void create(ZooKeeper zk) throws KeeperException, InterruptedException{
System.out.println("/n1. 创建 ZooKeeper 节点 (znode : zoo2, 数据: myData2 ,权限: OPEN_ACL_UNSAFE ,节点类型: Persistent");
zk.create("/zoo2","myData2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
//修改结点信息
public static void modify(ZooKeeper zk) throws KeeperException, InterruptedException{
System.out.println("/n3. 修改节点数据 ");
zk.setData("/zoo2", "shenlan211314".getBytes(), -1);
//查看结点信息
public static void monitor(ZooKeeper zk) throws KeeperException, InterruptedException{
System.out.println("/n4. 查看节点: ");
System.out.println(new String(zk.getData("/zoo2", false, null)));
//查看结点是否存在
public static void exist(ZooKeeper zk) throws KeeperException, InterruptedException{
System.out.println("/n6. 查看节点是否被删除: ");
System.out.println(" 节点状态: ["+zk.exists("/zoo2", false)+"]");
//删除一个结点
public static void delete(ZooKeeper zk) throws InterruptedException, KeeperException{
System.out.println("/n5. 删除节点 ");
zk.delete("/zoo2", -1);
public static ZooKeeper connect(String host) throws IOException{
return new ZooKeeper(host, 3000, new Watcher(){
public void process(WatchedEvent arg0) {
System.out.println("watch "+arg0);
public static void main(String[] args) {
ZooKeeper zk1=connect("0.0.0.0:2181");
create(zk1);
//modify(zk1);
zk1.close();
ZooKeeper zk2=connect("0.0.0.0:2182");
monitor(zk2);
zk2.close();
} catch (Exception e) {
e.printStackTrace();
}本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
14:13:50 18:02:44 19:07:24solrcloud 配置与搭建过程 -
- ITeye技术网站
博客分类:
本文的配置示例采用单台zookeeper与两台solr实例(即两个tomcat启动),collection分为两个shard(分片),每个shard两个replia(复本),本例使用版本为solr 4.4, zookeeper 3.4.6。
实际生产不会采用单台zookeeper,读者可自行扩展。
本文链接地址:
zookeeper配置
这里使用zookeeper单机, ip为172.16.31.184。在conf 文件夹 新建zoo.cfg,内容如下
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/data/zookeeper
# the port at which the clients will connect
clientPort=2181
2、zookeeper服务启动
bin 目录下 执行zkServer.cmd/zkServer.sh
上传solr配置
在solr机器上,新建目录,用于存放conf文件
mkdir /home/solr/solrhome/zkConf
将solr 中的相关配置文件复制进去
cp -r /home/solr/solrhome/collection1/conf/* /home/solr/solrhome/zkConf
调用上传命令, 这里使用的solr自身提供的jar包,本例将相应的solr 的相关jar放在tomcat 的lib中,大家自行替换目录,利用tomcat启动solr的配置不在此讲解。
java -classpath .:/home/solr/tomcat-6.0.41/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 172.16.31.184:2181 -confdir /home/solr/solrhome/zkConf -confname myconf
可以利用zookeeper/bin 目录下的zkCli命令验证上传是否成功,利用如下命令连接zookeeper
zkCli.sh -server 127.0.0.1:2181
查看配置结点
ls /configs/myconf
如上所示所有配置文件成功上传
4、将上传到ZooKeeper中配置文件与Collection相关联
java -classpath .:/home/solr/tomcat-6.0.41/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig --collection mycollection --confname myconf --zkhost 172.16.31.184:2181
这里将myconf与mycollection相关联。 myconf为zookeeper配置结点,mycolletion为即将建立的solrcloud的collection(集合)名。
大家应该在之前配置standalone与master/salve形式的solr时,注意到了solr example示例中solr.xml文件中的&solrcloud&配置结点,其实在上述两种形式下,该配置结点并不会生效。《Apache Solr Reference Guide》中的描述如下:
This element defines several parameters that relate so SolrCloud. This section is ignored unless the solr instance is started with either
-DzkRun or –DzkHost
可见只有指定-DzkRun 或 –DzkHost参数时,才能使solrCloud生效。
修改solr.xml文件如下:
&solrcloud&
&str name="zkHost"&172.16.31.184:2181&/str&
&str name="host"&${host:}&/str&
&int name="hostPort"&8080&/int&
&str name="hostContext"&${hostContext:solr}&/str&
&int name="zkClientTimeout"&${zkClientTimeout:15000}&/int&
&bool name="genericCoreNodeNames"&${genericCoreNodeNames:true}&/bool&
&/solrcloud&
&shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory"&
&int name="socketTimeout"&${socketTimeout:0}&/int&
&int name="connTimeout"&${connTimeout:0}&/int&
&/shardHandlerFactory&
其中8080为tomcat的端口
接着,在Tomcat的启动脚本bin/catalina.sh中,增加如下配置
JAVA_OPTS='-DzkRun'
当然有些人将zkHost,zkClientTimeout等上述配置也放到JAVA_OPTS中去,也是可以的。但是我还是觉得着尽量这些配置放到solr专属的配置文件中更好。
接下来,启动solr所在的tomcat,不用我说了吧。
验证: 进入zkCli命令,查看live_nodes结点
ls /live_nodes
返回结果如下
如上所示,zookeeper已经检测到了该solr服务了。
6、 replia与shard配置
solr 是使用restful,基于restful的,没想到replia与shard配置也是都通过http来的,反正我没找到还可文件或者web界面配置的方式。
访问solr的地址,执行solrcloud的CREATE命令:
&maxShardsPerNode=3
结果提示创建不成功 This requires 4 shards to be created (higher than the allowed number)
说明我们的solr运行实例还是不够。
我采用同一台机器上开始两个tomcat的方式模拟两个solr运行实例,读者条件允许的话,可以使用多台机器。在同一台solr服务器上,另外复制一个tomcat 端口为8081,并复制另一个solrhome为,我保存为solrhome1,
&solrcloud&
&str name="zkHost"&172.16.31.184:2181&/str&
&str name="host"&${host:}&/str&
&int name="hostPort"&8081&/int&
&str name="hostContext"&${hostContext:solr}&/str&
&int name="zkClientTimeout"&${zkClientTimeout:15000}&/int&
&bool name="genericCoreNodeNames"&${genericCoreNodeNames:true}&/bool&
&/solrcloud&
&shardHandlerFactory name="shardHandlerFactory"
class="HttpShardHandlerFactory"&
&int name="socketTimeout"&${socketTimeout:0}&/int&
&int name="connTimeout"&${connTimeout:0}&/int&
&/shardHandlerFactory&
当然要记得将webapps/solr/WEB_INF/web.xml的solrhome地址修改
再次访问地址
&maxShardsPerNode=3
返回结果如下:
在Solr web界面上查看cloud的graph结果如下:
至止solrcloud搭建成功,不枉我费了近一下午。
quentinXXZ
浏览: 25920 次
来自: 杭州
[size=x-[url][/url]][color=viol ...
quentinXXZ 写道qindongliang1922 写 ...
qindongliang1922 写道mongodb存储搜索引 ...
mongodb存储搜索引擎的索引?
楼主上面说的3个小时,是 ...君,已阅读到文档的结尾了呢~~
单机搭建伪分布solrcloud
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
单机搭建伪分布solrcloud
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口随笔 - 1321&
文章 - 60&评论 - 237&trackbacks - 0
首先声明,我们团队在使用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的集群。
如果为三台机器配置域名,通过ngx来做负载均衡是不行的,因为在具体方位时url中需要指定相应的核名。如
解决方案,通过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 搭建 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信