首先介绍一下系统架构:
* 这个图中代表的是三个solr实例,每个实例包括两个core,组成一个solrcloud
* 索引集合包括两个 shard(shard1和shard2),shard1和shard2分别由三个core组成,其中一个L eader两个Replication,Leader是由zookeeper选举产生,zookeeper控制每个shard上三个core的索引数据一致,解决高可用和高并发问题.
* Collection在solrcloud集群中是一个索引结构,被划分为一个或多个shard(分片),shard之前使用相同的配置;比如对于商品信息搜索可以创建一个collection,collection=shard1+shard2+.....+shardX
* Core提供索引和搜索服务,一个shard需要由一个或多个core组成,由于collection由多个shard组成,所以collection一般由多个core组成
* Master是master-slave结构中的主结点(通常说主服务器),Slave是master-slave结构中的从结点(通常说从服务器或备服务器)。同一个Shard下master和slave存储的数据是一致的,这是为了达到高可用目的。
下面这张图就是接下来要搭建的solr集群架构
需要实现zookeeper 高可用。需要搭建集群。建议是奇数节点。需要三个zookeeper服务器。
搭建solr集群需要7台服务器。
搭建伪分布式:需要三个zookeeper节点,需要四个tomcat节点.
环境 准备:
1.JDK
2.tomcat
3.zookeeper
4.solr
下面开始讲集群的详细步骤
这里省略jdk的安装,tomcat,solr,zookeeper的解压
*复制三份zookeeper解压后的文件到/usr/local/solr-cloud下
*在每一个zookeeper下创建一个data目录
*在每个zookeeper的data目录下创建一个myid文件,内容是每个实例的ID,分别为1,2.3
*把conf目录下的zoo_sample.cfg文件改名为zoo.cfg
* 修改zoo.cfg配置文件
dataDir就指向当前zookeeper的data目录
clientPort保证zookeeper之间不冲突
最后server.1=xxx的地方就是创建的myid文件指向的id
*创建快捷启动方式,名为start-zookeeper-all.sh,启动每一个zookeeper
在启动之前先修改启动文件的权限
*创建四个tomcat实例,每个tomcat运行在不同的端口:8180、8280、8380、8480
修改tomcat的端口号
修改端口号(一共三个地方)
每个tomcat都要改
*部署solr的war包到每个tomcat的webapps下面(我用的是solr的文件夹,tomcat启动后解压的solr.war文件)
为每个solr实例创建solrhome,solrhome的来源参考(linux部署solr)
*把solrhome关联起来
修改solrhome里面的solr.xml文件
host代表当前节点
hostpart代表这个solrhome对应的tomcat的端口号
*关联每一个solr和solrhome
修改每一个tomcat下solr项目里面的web.xml
将solrhome关联
*zookeeper集中管理配置文件,所以这一步是上传配置文件
进入解压的solr.tar.gz文件夹找到zkcli.sh文件
使用工具上传配置文件
执行下面的命令:
./zkcli.sh -zkhost 192.168.25.133:2181,192.168.25.133:2182,192.168.25.133:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf
然后在zookeeper01里面的bin目录下有zkCli.sh文件,启动这个文件,输入一下命令可以看到
那个就是我们刚刚上传的文件
*接下来就关联solr和zookeeper的关系
修改tomcat01下面的 catalina.sh
加入初始化配置:
四个tomcat都要加
*启动这个四个tomcat,保证zookeeper集群是启动状态
编写一个启动tomcat的程序
修改查询权限
启动tomcat:
在浏览器中访问报错:
HTTP Status 503 - Server is shutting down or failed to initialize
发现是catalina.sh中的初始化参数配置出错了,
修改:
JAVA_OPTS="-DzkHost=192.168.25.133:2181,192.168.25.133:2182,192.168.25.133:2183"
重新启动,访问:
看见这个就代表成功了一半了
因为collection1是单片的,没有我们所说的高用性,所以删除这个,创建新的Collection进行分片处理。
http://192.168.25.133:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
第十一步:删除不用的Collection。
http://192.168.25.133:8180/solr/admin/collections?action=DELETE&name=collection1
这是没删除之前
这才代表成功