比尔云BierYun--阿里云最新优惠活动
阿里云优惠码丨阿里云代金券

搭建SolrCloud的详细步骤

搭建SolrCloud的详细步骤http://www.bieryun.com/2440.html

一、需求

SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。
当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。SolrCloud是基于Solr和Zookeeper的分布式搜索方案,它的主要思想是使用Zookeeper作为集群的配置信息中心。

它有几个特色功能:
集中式的配置信息
自动容错
近实时搜索
查询时自动负载均衡
需要实现的solr集群架构

需要实现的solr集群架构

Zookeeper作为集群的管理工具。
集群管理:容错、负载均衡。
配置文件的集中管理
集群的入口

为实现zookeeper 高可用,需要搭建集群。建议是奇数节点,最少需要三个zookeeper服务器。

搭建solr集群需要7台服务器。

搭建伪分布式:
需要三个zookeeper节点
需要四个tomcat节点。

环境准备:
CentOS-6.5-i386-bin-DVD1.iso
jdk-7u72-linux-i586.tar.gz(建议虚拟机的内存1G以上。)
apache-tomcat-7.0.47.tar.gz
zookeeper-3.4.6.tar.gz
solr-4.10.3.tgz

二、Zookeeper集群搭建

第一步:在Linux下,需要安装jdk环境。
第二步:把zookeeper的压缩包上传到服务器。
第三步:解压缩。
第四步:把zookeeper复制三份。
[root@localhost ~]# mkdir /usr/local/solr-cloud
[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper01
[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper02
[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper03
第五步:在每个zookeeper目录下创建一个data目录。
第六步:在data目录下创建一个myid文件,文件名就叫做“myid”。
内容就是每个实例的id。这里分别为1、2、3

[root@localhost data]# echo 1 >> myid
(创建一个名为myid的文件,并向文件中加入1,另外两个同理,也可用touch myid创建文件,vim myid 向文件中写入)

[root@localhost data]# ll
total 4
-rw-r--r--. 1 root root 2 Apr  7 18:23 myid
[root@localhost data]# cat myid 
1
第七步:修改配置文件。把conf目录下的zoo_sample.cfg文件改名为zoo.cfg
[root@Solr zookeeper01]# cd conf
[root@Solr conf]# ll
总用量 12
-rw-r--r--. 1 root root  535 3月  22 08:43 configuration.xsl
-rw-r--r--. 1 root root 2161 3月  22 08:43 log4j.properties
-rw-r--r--. 1 root root  922 3月  22 08:43 zoo_sample.cfg
修改:
[root@Solr conf]# mv zoo_sample.cfg zoo.cfg
[root@Solr conf]# ll
总用量 12
-rw-r--r--. 1 root root  535 3月  22 08:43 configuration.xsl
-rw-r--r--. 1 root root 2161 3月  22 08:43 log4j.properties
-rw-r--r--. 1 root root  922 3月  22 08:43 zoo.cfg

修改每个实例的配置文件:zoo.cfg

[root@Solr conf]# vim 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=/usr/local/solr-cloud/zookeeper01/data/(当前实例的data目录)
# the port at which the clients will connect
clientPort=2181(端口号,不能重复2181,2182,2183)
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=192.168.25.130:2881:3881
server.2=192.168.25.130:2882:3882
server.3=192.168.25.130:2883:3883
(每个实例的都一样)
~
~
第八步:启动每个zookeeper实例(启动之后先不要关闭,后面搭建solr集群的时候要用到)
[root@Solr solr-cloud]# ll
总用量 12
drwxr-xr-x. 11 root root 4096 3月  22 08:46 zookeeper01
drwxr-xr-x. 11 root root 4096 3月  22 08:46 zookeeper02
drwxr-xr-x. 11 root root 4096 3月  22 08:46 zookeeper03

启动脚本:
[root@Solr solr-cloud]# vim start-zookeeper.sh
cd zookeeper01/bin
./zkServer.sh start
cd ../../
cd zookeeper02/bin
./zkServer.sh start
cd ../../
cd zookeeper03/bin
./zkServer.sh start
cd ../../

"start-zookeeper.sh" [新] 9L, 147C 已写入                                                             
[root@Solr solr-cloud]# ll
总用量 16
-rw-r--r--.  1 root root  147 3月  22 09:24 start-zookeeper.sh
drwxr-xr-x. 11 root root 4096 3月  22 08:46 zookeeper01
drwxr-xr-x. 11 root root 4096 3月  22 08:46 zookeeper02
drwxr-xr-x. 11 root root 4096 3月  22 08:46 zookeeper03
[root@Solr solr-cloud]# chmod +x start-zookeeper.sh

启动:
[root@Solr solr-cloud]# ./start-zookeeper.sh 
JMX enabled by default
Using config: /usr/local/solr-cloud/zookeeper01/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
JMX enabled by default
Using config: /usr/local/solr-cloud/zookeeper02/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
JMX enabled by default
Using config: /usr/local/solr-cloud/zookeeper03/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@Solr solr-cloud]#

状态脚本:
[root@Solr solr-cloud]# vim status-zookeeper.sh
cd zookeeper01/bin
./zkServer.sh status
cd ../../
cd zookeeper02/bin
./zkServer.sh status
cd ../../
cd zookeeper03/bin
./zkServer.sh status
cd ../../
"status-zookeeper.sh" [新] 9L, 150C 已写入                                                            
[root@Solr solr-cloud]# chmod +x status-zookeeper.sh 

查看状态:
[root@Solr solr-cloud]# ./status-zookeeper.sh 
JMX enabled by default
Using config: /usr/local/solr-cloud/zookeeper01/bin/../conf/zoo.cfg
Mode: follower
JMX enabled by default
Using config: /usr/local/solr-cloud/zookeeper02/bin/../conf/zoo.cfg
Mode: follower
JMX enabled by default
Using config: /usr/local/solr-cloud/zookeeper03/bin/../conf/zoo.cfg
Mode: leader
[root@Solr solr-cloud]#

从上面的状态可以看出zookeeper03为内部选举出来的leadder。

zookeeper集群搭建成功!

三、Solr集群的搭建

第一步:创建四个tomcat实例。每个tomcat运行在不同的端口。8180、8280、8380、8480
[root@Solr ~]# cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat01
[root@Solr ~]# cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat02
[root@Solr ~]# cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat03
[root@Solr ~]# cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat04

[root@Solr solr-cloud]# vim tomcat01/conf/server.xml
进行如下修改:

这里写图片描述
这里写图片描述
这里写图片描述

其他tomcat操作一样,端口不能冲突。
vim tomcat02/conf/server.xml(8205、8280、8209)
vim tomcat03/conf/server.xml(8305、8380、8309)
vim tomcat04/conf/server.xml(8405、8480、8409)
第二步:部署solr的war包。把单机版的solr工程复制到集群中的tomcat中(首先要已经安装好单机版的solr)。
cp -r ../tomcat/apache-tomcat-7.0.52/webapps/solr/ tomcat01/webapps/
cp -r ../tomcat/apache-tomcat-7.0.52/webapps/solr/ tomcat02/webapps/
cp -r ../tomcat/apache-tomcat-7.0.52/webapps/solr/ tomcat03/webapps/
cp -r ../tomcat/apache-tomcat-7.0.52/webapps/solr/ tomcat04/webapps/
第三步:为每个solr实例创建一个对应的solrhome。使用单机版的solrhome复制四份(首先要已经安装好单机版的solrhome)。
[root@Solr solr-cloud]# cp -r ../solrhome/solr/ solrhome01/
[root@Solr solr-cloud]# cp -r ../solrhome/solr/ solrhome02/
[root@Solr solr-cloud]# cp -r ../solrhome/solr/ solrhome03/
[root@Solr solr-cloud]# cp -r ../solrhome/solr/ solrhome04/
[root@Solr solr-cloud]# ll
总用量 52
drwxr-xr-x.  4 root root 4096 3月  22 10:07 solrhome01
drwxr-xr-x.  4 root root 4096 3月  22 10:07 solrhome02
drwxr-xr-x.  4 root root 4096 3月  22 10:07 solrhome03
drwxr-xr-x.  4 root root 4096 3月  22 10:07 solrhome04
-rwxr-xr-x.  1 root root  147 3月  22 09:24 start-zookeeper.sh
-rwxr-xr-x.  1 root root  150 3月  22 09:31 status-zookeeper.sh
drwxr-xr-x.  9 root root 4096 3月  22 10:04 tomcat01
drwxr-xr-x.  9 root root 4096 3月  22 09:45 tomcat02
drwxr-xr-x.  9 root root 4096 3月  22 09:45 tomcat03
drwxr-xr-x.  9 root root 4096 3月  22 09:45 tomcat04
drwxr-xr-x. 11 root root 4096 3月  22 08:46 zookeeper01
drwxr-xr-x. 11 root root 4096 3月  22 08:46 zookeeper02
drwxr-xr-x. 11 root root 4096 3月  22 08:46 zookeeper03
第四步:需要修改solr的web.xml文件。把solrhome关联起来。
[root@Solr solr-cloud]# vim tomcat01/webapps/solr//WEB-INF/web.xml

这里写图片描述

其他三个同理

第五步:配置solrCloud相关的配置。每个solrhome下都有一个solr.xml,把其中的ip及端口号配置好。

这里写图片描述

    host:Linux的ip
    hostPort:分别为tomcat的端口号8180、8280、8380、8480
第六步:修改tomcat/bin目录下的catalina.sh (237行)文件,关联solr和zookeeper。
把此配置添加到配置文件中(每个tomcat中都加):
JAVA_OPTS="-DzkHost=192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183"

这里写图片描述

第七步:让zookeeper统一管理配置文件。需要把solrhome/collection1/conf目录上传到zookeeper。上传任意solrhome中的配置文件即可。
使用工具上传配置文件:/root/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh

./zkcli.sh -zkhost 192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183
 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf

查看zookeeper上的配置文件:
使用zookeeper目录下的bin/zkCli.sh命令查看zookeeper上的配置文件:

[root@localhost bin]# ./zkCli.sh (默认连到2181,指定:./zkCli.sh -server 192.168.25.130:2182)
[zk: localhost:2181(CONNECTED) 0] ls /
[configs, zookeeper]

[zk: localhost:2181(CONNECTED) 1] ls /configs
[myconf]
[zk: localhost:2181(CONNECTED) 2] ls /configs/myconf

[admin-extra.menu-top.html, currency.xml, protwords.txt, mapping-FoldToASCII.txt,
 _schema_analysis_synonyms_english.json, _rest_managed.json, solrconfig.xml, 
_schema_analysis_stopwords_english.json, stopwords.txt, lang, spellings.txt, mapping-ISOLatin1Accent.txt,
 admin-extra.html, xslt, synonyms.txt, scripts.conf, update-script.js,
 velocity, elevate.xml, admin-extra.menu-bottom.html, clustering, schema.xml]

退出:
[zk: localhost:2181(CONNECTED) 3] quit
第八步:启动每个tomcat。(zookeeper集群为启动状态)
创建脚本启动:
[root@Solr solr-cloud]# vim start-tomcat.sh

/usr/local/solr-cloud/tomcat01/bin/startup.sh
/usr/local/solr-cloud/tomcat02/bin/startup.sh
/usr/local/solr-cloud/tomcat03/bin/startup.sh
/usr/local/solr-cloud/tomcat04/bin/startup.sh
第九步:开启Linux的端口号,供外部访问。
solr:
/sbin/iptables -I INPUT -p tcp --dport 8180 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 8280 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 8380 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 8480 -j ACCEPT

zookeeper:
/sbin/iptables -I INPUT -p tcp --dport 2181 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 2182 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 2183 -j ACCEPT

/etc/rc.d/init.d/iptables save
查看状态:
/etc/init.d/iptables status

图片去旅游了

solr集群搭建成功!

第十步:访问集群。
地址:192.168.25.130:8180/solr

这里写图片描述

第十一步:创建新的Collection进行分片处理。

http://192.168.25.130:8180/solr/admin/collections?
action=CREATE&name=collection2&numShards=2&replicationFactor=2
成功:

这里写图片描述

这里写图片描述

第十二步:删除不用的Collection。
http://192.168.25.130:8180/solr/admin/collections?action=DELETE&name=collection1
  • 1
  • 2

这里写图片描述

这里写图片描述

SolrCloud搭建成功……

测试

@Test
    public void addDocument() throws Exception {
        // 创建一个SolrServer对象,需要使用CloudSolrServer子类。构造方法的参数是zookeeper的地址列表。
        CloudSolrServer solrServer = new CloudSolrServer("192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183");
        // 设置DefaultCollection属性
        solrServer.setDefaultCollection("collection2");
        // 创建SolrInputDocument对象
        SolrInputDocument document = new SolrInputDocument();
        // 向文档对象中添加域
        document.addField("id", "test001");
        document.addField("item_title", "测试商品");
        // 把文档对象写入索引库
        solrServer.add(document);
        // 提交
        solrServer.commit();
    }
未经允许不得转载:比尔云 » 搭建SolrCloud的详细步骤
分享到: 更多 (0)

相关推荐

  • 暂无文章

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

强烈推荐

高性能SSD云服务器ECS抗攻击,高可用云数据库RDS