部署基于tomcat 8 的solrCloud 5.5集群
@(OTHERS)[solr]
(一)版本及准备工作
1、下载并解压tomcat, solr至目录/home/hadoop/tomcat, /home/hadoop/solr
其中版本为:
solr-5.5.2
tomcat-8.5.4
(二)准备solr相关webapp内容,并复制至tomcat
1、将/home/hadoop/solr-5.5.2/server/lib/ext/*中的jar包复制到/home/hadoop/solr-5.5.2/server/solr-webapp/webapp/WEB-INF/lib,主要是slf4j与log4j相关的jar包,tomcat加载solr时要用到这些jar包。
cp /home/hadoop/solr-5.5.2/server/lib/ext/* /home/hadoop/solr-5.5.2/server/solr-webapp/webapp/WEB-INF/lib
2、将上述solr webapp整个目录复制到tomcat/webapps中,并重命名为solr
cp -r /home/hadoop/solr-5.5.2/server/solr-webapp/webapp /home/hadoop/tomcat-8.5.4/webapps/solr
(三)准备配置文件并上传至zk
1、准备一个collection配置文件
一个collection需要至少schema.xml与solrconfig 2份配置文件,除此以外还有一些stopword,同义词等配置文件。我们使用官方提供的基本配置basic_configs
mkdir /home/hadoop/solr-5.5.2/conf
cp -r /home/hadoop/solr-5.5.2/server/solr/configsets/basic_configs/conf /home/hadoop/solr-5.5.2/conf/basic_configs
注意这里使用了managed-schema,而不是schema.xml。之后再分析。
2、将配置文件上传至zk
java -classpath .:/home/hadoop/tomcat-8.5.4/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 10.120.69.101:2181,10.120.69.100:2181,10.120.69.102:2181/solr55 -confdir /home/hadoop/solr-5.5.2/conf/basic_configs -confname basic_configs
然后再到zk中检查配置是否成功上传。
(四)准备solr的索引数据目录及配置
1、创建用于保存索引文件的目录
mkdir /disk1/solr55/data/solr-core
chown -R hadoop:hadoop /disk1/solr55
注意这个目录的权限。
2、将solr.xml复制到上述目录
cp /home/hadoop/solr-5.5.2/server/solr/solr.xml /disk1/solr55/data/solr-core/
3、 修改solr.xml,修改hostPort和Tomcat端口一致
<int name="hostPort">8080</int>
(五)配置tomcat并启动
1、在tomca/conf目录下创建Catalina/localhost目录
mkdir -p /home/hadoop/tomcat-8.5.4/conf/Catalina/localhost
2、在上述目录中创建solr.xml,此为Solr/home的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="/home/hadoop/tomcat-8.5.4/webapps/solr" debug="0" crossContext="true">
<Environment name="solr/home" type="java.lang.String" value="/disk1/solr55/data/solr-core/" override="true"/>
</Context>
3、修改bin/catalina.sh中的JAVA_OPTS变量,加上zk的配置:
JAVA_OPTS="$JAVA_OPTS -DzkHost=10.120.69.101:2181,10.120.69.100:2181,10.120.69.102:2181/solr55"
4、启动tomcat
bin/startup.sh
注意先为几个脚本加上权限:
chmod +x startup.sh shutdown.sh catalina.sh
5、验证UI
http://10.120.69.104:8080/solr/index.html
有个小问题:如果上面的URL不加上index.html则加载不成功,看哪里的设置把默认加载index的配置去掉了。这会不会影响索引,等下试一下。
6、建一个测试collection验证功能
因为目前只有一台机器,所以只能建一个shard, 一个副本了。
配置文件使用上面的basic_configs
curl 'http://10.120.69.104:8080/solr/admin/collections?action=CREATE&name=collection_1&numShards=1&replicationFactor=1&collection.configName=basic_configs'
然后在UI上查看是否已经创建成功。
(六)添加其它节点
1、将/home/hadoop/solr-5.5.2、/home/hadoop/tomcat-8.5.4与/disk1/solr55/data/ 三个目录复制到其它机器相同的目录中。
2、启动tomcat
(七)创建core
创建的2个core分别如下图:
(八)使用API索引与搜索
1、索引
public class IndexDemo {
private static final String DEFAULT_COLLECTION = "collection4";
//private static final String SOLR_ZK = "10.120.69.101:2181/solr";
private static final String SOLR_ZK = "10.120.69.101:2181/solr55";
public static void main(String[] args) throws SolrServerException, IOException {
SolrInputDocument doc = new SolrInputDocument();// 实例化索引Doc
doc.addField("id", "index_demo");// 添加主键
//doc.addField("qualifier_col", "valuedemo");// 添加主键
CloudSolrClient client = new CloudSolrClient(SOLR_ZK);// cloud模式
client.setDefaultCollection(DEFAULT_COLLECTION);
client.add(doc);
//client.add("collection1", doc);
client.commit();
client.close();
}
}
2、索引
public class QueryDemo {
private static final String DEFAULT_COLLECTION = "collection4";
private static final String SOLR_ZK = "10.120.69.101:2181/solr55";
// private static final String SOLR_ZK = "10.120.69.101:2181/solr";
public static void main(String[] args) throws SolrServerException, IOException {
try (CloudSolrClient client = new CloudSolrClient(SOLR_ZK);) {// cloud模式
//根据id查doc
SolrDocument doc = client.getById(DEFAULT_COLLECTION, "index_demo");
if(null != doc){
for (String field : doc.getFieldNames()) {
System.out.println(field + " : " + doc.getFieldValues(field));
}
}
//根据field查doc
SolrQuery query = new SolrQuery();
//query.setQuery(mQueryString);
query.setRequestHandler("/query");
// query.set("q", "qualifier_col:valuedemo");//返回index_demo
// query.set("q", "qualifier_col:valuedemo OR id:index_demo2");//返回index_demo
// query.set("q", "qualifier_col:valuedemo AND id:index_demo2");//返回空
// query.set("q", "qualifier_col:valuede*");//返回index_demo
QueryResponse response = client.query(DEFAULT_COLLECTION, query);
for(SolrDocument doc2 :response.getResults()){
System.out.println(doc2.getFieldValue("id"));
}
}
}
}
(九)zk中的内容
[zk: 10.120.69.101(CONNECTED) 16] get /solr5/
configs clusterstate.json aliases.json live_nodes overseer overseer_elect collections
通过命令上传的配置文件都在configs目录中,collections中是各个collection的信息。
其它目录的详细信息以后再分析。
(十)创建新的core
1、准备配置文件
2、上传至zk
java -classpath .:/home/hadoop/tomcat-8.5.4/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 10.120.69.101:2181,10.120.69.100:2181,10.120.69.102:2181/solr55 -confdir /home/hadoop/solr/myconf/ -confname myconf
3、创建core
curl 'http://10.120.69.104:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=1&collection.configName=myconf'