CentOS-6.4-x86_64-minimal.iso
jdk-6u45-linux-i586-rpm.bin
zookeeper-3.4.5.tar
solr-4.6.0.zip
服务器6台: 192.168.56.11- SolrCloud.Shard1.Leader
192.168.56.12-SolrCloud.Shard2.Leader
192.168.56.13-SolrCloud.Shard3.Leader
192.168.56.14-SolrCloud.Shard1.Replica
192.168.56.15-SolrCloud.Shard2.Replica
192.168.56.16-SolrCloud.Shard3.Replica
1)配制用户
安装完后配制用户solrcloud 密码: solrcloud
[root;localhost ~]# useradd solrcloud
[root; localhost ~]# passwd solrcloud
vi etc/sysconfig/network
HOSTNAME=SolrCloud.Shard1.Leader
vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=08:00:27:5C:8C:BD
TYPE=Ethernet
UUID=4fc0a398-f82b-49e5-8657-27bf5b260444
ONBOOT=yes
NM_CONTROLLED=yes
IPADDR=192.168.56.11
NETMASK=255.255.255.0
重启服务 service network restart
创建文件夹 mkdir /solrcloud
赋写权限 chmod 777 /solrcloud
上传所需安装软件包到/solrcloud
默认jdk安装会报错,64位系统安装32位jdk报的错
需要安装glic , yum install glibc.i686
安装完后再安装jdk 进入/solrcloud目录
./jdk-6u45-linux-i586-rpm.bin
(集群安装测试时以ip为例说明;正式上线后可以配主机名称)
tar -zxvf zookeeper-3.4.5.tar.gz
创建目录并赋于写权限
指定zookeeper的数据存放目录和日志目录
拷贝zookeeper配制文件zoo_sample.cfg并重命名zoo.cfg
cp /solrcloud/zookeeper-3.4.5/conf/zoo_sample.cfg /solrcloud/zookerper-3.4.5/conf/zoo.cfg
加入 dataDir=/solrcloud/zookeeper-3.4.5/data
dataLogDir=/solrcloud/zookeeper-3.4.5/log
server.1=192.168.56.11:2888:3888
server.2=192.168.56.12:2888:3888
server.3=192.168.56.13:2888:3888
server.4=192.168.56.14:2888:3888
server.5=192.168.56.15:2888:3888
server.6=192.168.56.16:2888:3888
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=/solrcloud/zookeeper-3.4.5/data
dataLogDir=/solrcloud/zookeeper-3.4.5/log
# the port at which the clients will connect
clientPort=2181
#
# 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.56.11:2888:3888
server.2=192.168.56.12:2888:3888
server.3=192.168.56.13:2888:3888
server.1=192.168.56.11:2888:3888
server.2=192.168.56.12:2888:3888
server.3=192.168.56.13:2888:3888
server.4=192.168.56.14:2888:3888
server.5=192.168.56.15:2888:3888
server.6=192.168.56.16:2888:3888
例如server.1=192.168.56.11 data文件夹下的myid文件内容为1
/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 #重启防火墙以便改动生效
进入bin
./zkServer.sh start
查看集群状态
./zkServer.sh status 刚启动可能会有错误;集群中其他节点一并起来后就正常了
tar -zxvf solr-4.6.0.tgz
cp /solrcloud/solr-4.6.0/dist/solr-4.6.0.war /solrcloud/solrhome/solr.war
tar -zxvf apache-tomcat-6.0.29.tar.gz
cd /solrcloud/apache-tomcat-6.0.29/bin 进入bin目录
./startup.sh 启动tomcat 此时会在tomcat下的conf文件夹下多出一个目录Catalina
cd /solrcloud/apache-tomcat-6.0.29/conf/Catalina/localhost
新建solr.xml文件内容如下:
<Environment name=;solr/home;
type=;java.lang.String;
value=;/solrcloud/solrhome;
override=;true; />
docBase=;/solrcloud/solrhome/solr.war; 指定为solrcloud/solrhome下复制出来solr的war包
进入solr/WEB-INF/ 下修改web.xml
改为 :
cp -r /solrcloud/solr-4.6.0/example/solr/* /solrcloud/solrhome
cp /solrcloud/solr-4.6.0/example/lib/ext/* /solrcloud/apache-tomcat-6.0.29/lib/
复制 solr-4.6.0/example/resources/log4j.properties 到solr/WEB-INF/class
如果没有class先创建class文件夹;并赋于写权限
cp /solrcloud/solr-4.6.0/example/resources/log4j.properties /solrcloud/apache-tomcat-6.0.29/webapps/solr/WEB-INF/class/
将zookeeper和tomcat关联
192.168.56.11台机修改tomcat 的 bin目录下catalina.sh文件在第二行加入
JAVA_OPTS=;-Dbootstrap_confdir=/solrcloud/solrhome/collection1/conf -Dcollection.configName=myconf -DzkHost=192.168.56.11:2181,192.168.56.12:2181,192.168.56.13:2181,192.168.56.14:2181,192.168.56.15:2181,192.168.56.16:2181 -DnumShards=3;
192.168.56.12-16 , 5台机都修改tomcat 的 bin目录下catalina.sh文件在第二行加入
JAVA_OPTS=;-DzkHost=192.168.56.11:2181,192.168.56.12:2181,192.168.56.13:2181,192.168.56.14:2181,192.168.56.15:2181,192.168.56.16:2181;
至此集群配制完毕
创建集合
http://192.168.56.11:8080/solr/admin/collections?action=CREATE&name=guangzhou&numShards=3&replicationFactor=3
任何一个ip均可访问
http://192.168.56.11:8080/solr/#/~cloud
SolrCloud(solr 云)是Solr提供的分布式搜索方案;当你需要大规模;容错;分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的;当索引量很大;搜索请求并发很高;这时需要使用SolrCloud来满足这些需求。SolrCloud 是基于Solr和Zookeeper的分布式搜索方案;具体拥有以下几个特色功能;
1;集中式的配置信息
2;自动容错
3;近实时搜索
4;查询时自动负载均衡
SolrCloud在搭建时;通过先搭建完一个Solr实例后;可以很容易地使用Zookeeper来做一个集群。我演示的安装步骤基于一台机器;所以采用伪集群的方式进行安装;如果是真正的生成环境;将伪集群的ip改下就可以了;步骤是一样的。
JDK1.7以上
Solr5.5.4部署包;solr-5.5.4.tgz 大约130M;
Tomcat8部署包 ;apache-tomcat-8.5.16.tar.gz;
zookeeper-3.4.6部署包;zookeeper-3.4.6.tar.gz;
你可以在Solr5.5.4单机部署找到如何将Solr5.5.4部署在Tomcat8环境下.
如果已经成功部署了一个Solr;那么接下来的工作也不会太难。下面的集群部署基于已经成功部署过单个Solr。如果你还没有部署过Solr或者还没有部署过单机版的;讲义看一下Solr5.5.4单机部署里面第二部分;通过tomcat部署Solr;然后再来部署集群。
具体zookeeper集群部署我在这里就不讲啦;如果不会部署zookeeper集群的可以看一下看一下zookeeper集群部署。本次部署详情信息如下;
机器
192.168.219.11;node11;,192.168.219.12(node12),192.168.219.13(node13),192.168.219.14(node14)
系统
Red Hat Enterprise Linux Server release 6.5 (Santiago)
系统内核
2.6.32-358.el6.x86_64
solr版本
Solr-5.5.4
zookeeper版本
3.4.6
zookeeper地址(ip:port)
node11:2282,node12:2282,node13:2282
tomcat版本
8.5.16
solr;tomcat地址
/home/anu/tomcat8
solr_home(core)地址
/home/anu/tomcat8/solr_home; node11:8888(leader),node12:8888(follower),node13:8888(follower),node14:8888(follower)
1、我早之前已经在一台机器上那装过单机的Solr;鄙人是在node11机器上安装的;通过tomcat;Solr实现;放在tomcat8中;;所以直接来改动它里面的配置就可以啦。
2、为了保证端口不冲突;我们来改一下tomcat端口还有Solr端口
修改./tomcat8/conf/server.xml;将下面几个地方的端口尽量改动一下不要和别的地方冲突
这些地方本人已经改过啦;注意上面那个8888端口是tomcat发布端口;这个后面要用到;需要设置成Solr端口
3、配置tomcat8的启动项;配置zookeeper和各个tomcat进行关联;首先确定leader节点;本人使用node11作为leader;其余的作为follower;现在先配置leader的tomcat目录下(我的是tomcat8)的bin/catalina.sh中的最上面添加一行
JAVA_OPTS=;-Djetty.port=8888 -Dbootstrap_confdir=/home/anu/tomcat8/solr_home/ustcinfo/conf -Dcollection.configName=solr_home -DzkHost=node11:2282,node12:2282,node13:2282 -DnumShards=2;
8888;必须要和我们上面配置的tomcat端口一致;
/home/anu/tomcat8/solr_home/ustcinfo/conf;这个是我的Solr_home 的路径;这个下面我们单机安装的时候已经说了这个的由来;下面马上我再说一下
solr_home;是我的solr_home名字;可以随便取;但是尽量和你的solr_home文件名一样;便于查看
node11:2282,node12:2282,node13:2282;这是我的zookeeper集群;前面已经安装并且已经启动
2;表示有两个shard节点
下面大致解释一下这些参数含义;
-Djetty.port Solr的发布端口;需要和tomcat端口一致;使用jetty.port是响应Solr内部jetty关联
-Dbootstrap_confdir ZooKeeper需要准备一份集群配置的副本;这个参数是告诉SolrCloud这些配置是放在哪里;同时作为整个集群共用的配置文件。
-Dcollection.configName 指定你的配置文件上传到zookeeper后的名字;建议和你所上传的核心名字一致;这样容易识别。
-DzkRun 在Solr中启动一个内嵌的zooKeeper服务器;该服务会管理集群的相关配置。
-DzkHost 跟上面参数的含义一样;允许配置一个ip和端口来指定用哪个Zookeeper服务器进行协调。
-DnumShards=2 配置需要把你的数据分开到多少个shard中
-Dbootstrap_conf=true 将会上传solr/home里面的所有数据到zookeeper的home/data目录,也就是所有的core将被集群管理;本次我未使用这个参数。
这里面配好之后;我们再说说我配置的Solr_home路径由来。
首先;我们在单机中已经将./solr-5.5.4/server/solr 下面所有的东西都拷贝到./tomcat8/solr_home目录下。我们进入到./tomcat/sole_home 目录下
其次;在这个路径下新建一个作为core使用的文件夹;名字可以随意起;我创建名字为ustcinfo的文件夹
然后将./tomcat8/solr_home/configsets/basic_configs 目录下的所有文件都拷贝到我们刚刚新建的ustcinfo 下面
mkdir ustcinfo
cp -r configsets/basic_configs/* ustcinfo/
cd ustcinfo/
ls
cd conf
pwd
在这就可以看到我们配置的Solr_home地址;用于后面同一创建Solr集合识别core使用。
特别需要注意;上面添加JAVA_OPTS时针对leader节点的;其余三台机器的JAVA_OPTS如下;
JAVA_OPTS=;-Djetty.port=8888 -Dcollection.configName=solr_home -DzkHost=node11:2282,node12:2282,node13:2282 -DnumShards=2;
这个配置后面会提到
4、修改solr.xml的jetty.port参数值为tomcat的端口
打开./tomcat8/solr_home/solr.xml 文件;修改jetty.port参数值为tomcat的端口;即我们前面配置的8888;
5、将配置好的tomcat;solr拷贝到其他三台机器node12、node13、node14;
scp -r tomcat8 anu;node12:/home/anu/
scp -r tomcat8 anu;node13:/home/anu/
scp -r tomcat8 anu;node14:/home/anu/
6、修改其他三台follower的tomcat8启动项;
分别进入node12、node13、node14机器;通过vim tomcat8/bin/catalina.sh 打开catalina.sh文件;将tomcat启动项的 -Dbootstrap_confdir=/home/anu/tomcat8/solr_home/ustcinfo/conf 删掉;最终JAVA_OPTS参数如下
JAVA_OPTS=;-Djetty.port=8888 -Dcollection.configName=solr_home -DzkHost=node11:2282,node12:2282,node13:2282 -DnumShards=2;
7、分别启动4台机器的tomcat8;Solr
使用命令tomcat8/bin/catalina.sh start 或者tomcat8/bin/startup.sh 启动四台tomcat8
8、通过访问页面查看Sole配置
在浏览器中打开http://192.168.219.11:8888/solr/index.html#/;进入后点击左边导航栏的cloud查看
Java操作solrCloud
在java中操作solrCloud和操作solr一样;都是通过solrJ;只不过初始化solrServer对象时有点不同;
简单示例;
;Test
public void testAddDocument() throws Exception {
// zkHost;zookeeper的地址列表
String zkHost = ;192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183;;
// 创建一个集群的连接;应该使用CloudSolrServer创建
CloudSolrServer solrServer = new CloudSolrServer(zkHost);
// 设置一个defaultCollection属性
solrServer.setDefaultCollection(;collection2;);
// 创建一个文档对象
SolrInputDocument document = new SolrInputDocument();
// 向文档中添加域
document.setField(;id;, ;solrCloud01;);
document.setField(;item_title;, ;测试商品01;);
document.setField(;item_price;, 123);
// 把文件内容写入索引库
solrServer.add(document);
// 提交
solrServer.commit();
}
测试结果;
如果要在Spring中使用集群版本solr;配置如下;
该配置和单机版的配置同时只能存在一份;不然会报不唯一异常;
然后在代码中通过;
;Autowired
private SolrServer solrServer;
自动注入即可使用;注入后的使用方法和单机版的是一样的。