1、将solr-4.9.1\example\webapps下的solr.war上传到linux中的tomcat下webapps
2、运行tomcat,会自动出现一个solr文件夹
3、拷取jar包
将solr-4.9.1\example\lib\ext下的jar包拷至tomcat下/webapps/solr/WEB-INF/lib下
4、修改配置solrhome(tomcat/webapps/solr/WEB-INF/web.xml)
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/opt/data/solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
如果没有/opt/data/solr目录,则需要创建(mkdir)
5、拷贝文件
将/solr-4.9.1/solr-4.9.1/example/solr下的文件全部拷到/opt/data/solr下
6、运行测试
${tomcat_home}/bin/start.sh
二、搭建solr集群
1、搭建三个服务器为例
192.168.13.132(先在该服务器配置)
192.168.13.133
192.168.13.134
分别在三个服务器安装solr单机(如上一)
2、向三台服务器上传zookeeper-3.4.6.tar.gz,如在/opt/sxt/soft/目录下
解压该文件
tar -zxvf zookeeper-3.4.6.tar.gz
3、拷贝zookeeper配制文件zoo_sample.cfg并重命名zoo.cfg
cp /opt/sxt/soft/zookeeper-3.4.6/conf/zoo_sample.cfg /opt/sxt/soft/zookeeper-3.4.6 /conf/zoo.cfg
4、修改zoo.cfg(vi zoo.cfg)
修改dataDir=/opt/zookeeper(如果没有该目录要创建,mkdir -p /opt/zookeeper)
添加:server.1=192.168.13.132:2888:3888
server.2=192.168.13.133:2888:3888
server.3=192.168.13.134:2888:3888
5、进入/opt/zookeeper文件夹 建立对应的myid文件
vi myid
例如server.1为192.168.13.132则 文件夹下的myid文件内容为1
server.2为192.168.13.133则 文件夹下的myid文件内容为2
server.3为192.168.13.134则 文件夹下的myid文件内容为3
6、拷贝zoo.cfg到其他机器(192.168.13.133和192.168.13.134)
scp zoo.cfg root:192.168.13.133:/opt/sxt/soft/zookeeper-3.4.6/conf
scp zoo.cfg root:192.168.13.134:/opt/sxt/soft/zookeeper-3.4.6/conf
7、开启zookeeper的端口(或者直接关闭防火墙service iptables stop)
/sbin/iptables -I INPUT -p tcp --dport 2181 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 2888 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 3888 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT --这里开启tomcat 8080端口
/etc/rc.d/init.d/iptables save #将更改进行保存
/etc/init.d/iptables restart #重启防火墙以便改动生效
8、启动三台服务器的zookeeper
进入/opt/sxt/soft/zookeeper-3.4.6/bin
./zkServer.sh start
查看集群状态
. /zkServer.sh status
刚启动可能会有错误,集群中其他节点一并起来后就正常了
9、修改SolrCloud监控端口为8080:
修改每个solrhome的/opt/data/solr/solr.xml文件
10、上传solr-4.9.1.zip至/opt/sxt/soft(只需一台机器运行,即可添加到zookeeper集群)
解压zip文件需要先安装unzip yum -y install unzip
解压文件 unzip solr-4.9.1.zip
11、执行下边的命令(只需一台机器运行,与上面为同一台)
sh /opt/sxt/soft/solr-4.9.1/example/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.13.132:2181,192.168.13.133:2181,192.168.13.134:2181 -cmd upconfig -confdir /opt/sxt/soft/solr-4.9.1/example/solr/collection1/conf -confname myconf -solrhome /opt/sxt/soft/solr-4.9.1/example/solr
12、登陆zookeeper服务器查询配置文件
cd /opt/sxt/soft/zookeeper-3.4.6/bin
进入zookeeper ./zkCli.sh
输入命令 ls / 出现结果[configs, zookeeper]
ls /configs 出现结果[myconf]
13、每一台solr和zookeeper关联(三台服务器)
修改每一台solr的tomcat 的 bin目录下catalina.sh文件中加入DzkHost指定
zookeeper服务器地址:(/opt/apache-tomcat-7.0.61/bin)
vi /opt/apache-tomcat-7.0.61/bin/catalina.sh
内容如下:
JAVA_OPTS="-DzkHost=192.168.13.132:2181,192.168.13.133:2181,192.168.13.134:2181"
14、分别重新启动三台服务器的tomcat和zookeeper
三、访问solrcloud
访问任意一台solr,左侧菜单出现Cloud:
四、SolrCloud集群配置
上图中的collection1集群只有一片,可以通过下边的方法配置新的集群。
创建新集群collection2,将集群分为两片,每片两个副本。
http://192.168.200.149:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
删除集群命令;
http://192.168.200.149:8080/solr/admin/collections?action=DELETE&name=collection1
执行后原来的collection1删除,如下:
更多的命令请参数官方文档:apache-solr-ref-guide-4.10.pdf
另一种配置方法:如下
${solr_home}/collenction1/core.properties
numShards=2
name=collection1
shard=shard1
coreNodeName=core_node1
以上参数说明
numShards=2 //分片数量
name=collection1 //core名称
shard=shard1 //所属分片
coreNodeName=core_node1 //结点名称
五、SolrCloud测试
创建索引:
测试1:在一台solr上创建索引,从其它solr服务上可以查询到。
测试2:一次创建100个文档甚至更多,通过观察每个solr的core下边都有索引文档,说明索引文档是分片存储。
查询索引:
从任意一台Solr上查询索引,返回一个完整的结果,说明查询请求从不同的分片上获取数据,最终返回集群上所有匹配的结果。
六、solrJ访问solrCloud
public class SolrCloudTest { // zookeeper地址 private static String zkHostString = "192.168.101.7:2181,192.168.101.8:2181,192.168.101.9:2181"; // collection默认名称,比如我的solr服务器上的collection是collection2_shard1_replica1,就是去掉“_shard1_replica1”的名称 private static String defaultCollection = "collection2"; // 客户端连接超时时间 private static int zkClientTimeout = 3000; // zookeeper连接超时时间 private static int zkConnectTimeout = 3000; // cloudSolrServer实际 private CloudSolrServer cloudSolrServer; // 测试方法之前构造 CloudSolrServer @Before public void init() { cloudSolrServer = new CloudSolrServer(zkHostString); cloudSolrServer.setDefaultCollection(defaultCollection); cloudSolrServer.setZkClientTimeout(zkClientTimeout); cloudSolrServer.setZkConnectTimeout(zkConnectTimeout); cloudSolrServer.connect(); } // 向solrCloud上创建索引 @Test public void testCreateIndexToSolrCloud() throws SolrServerException, IOException { SolrInputDocument document = new SolrInputDocument(); document.addField("id", "100001"); document.addField("title", "李四"); cloudSolrServer.add(document); cloudSolrServer.commit(); } // 搜索索引 @Test public void testSearchIndexFromSolrCloud() throws Exception { SolrQuery query = new SolrQuery(); query.setQuery("*:*"); try { QueryResponse response = cloudSolrServer.query(query); SolrDocumentList docs = response.getResults(); System.out.println("文档个数:" + docs.getNumFound()); System.out.println("查询时间:" + response.getQTime()); for (SolrDocument doc : docs) { ArrayList title = (ArrayList) doc.getFieldValue("title"); String id = (String) doc.getFieldValue("id"); System.out.println("id: " + id); System.out.println("title: " + title); System.out.println(); } } catch (SolrServerException e) { e.printStackTrace(); } catch (Exception e) { System.out.println("Unknowned Exception!!!!"); e.printStackTrace(); } } // 删除索引 @Test public void testDeleteIndexFromSolrCloud() throws SolrServerException, IOException { // 根据id删除 UpdateResponse response = cloudSolrServer.deleteById("zhangsan"); // 根据多个id删除 // cloudSolrServer.deleteById(ids); // 自动查询条件删除 // cloudSolrServer.deleteByQuery("product_keywords:教程"); // 提交 cloudSolrServer.commit(); } } |