基于Zookeeper进行Solr集群搭建,前提是需要将Zookeeper集群搭建。然后配置Solr服务,其中注意导入solr的配置文件的时候,zkcli.sh脚本是solr的,而不是zookeeper自带的脚本,搭建的时候,先配置好一个solr的环境后,然后复制粘贴整个目录,修改配置文件即可,不要一个一个节点的配置。
搭建前提
solr的集群是依赖于zookeeper的,所以前提必须是将zookeeper搭建好。
1、Zookeeper之集群搭建-yellowcong
2、Shell实战之一键自动部署Zookeeper-yellowcong
3、Solr之单机安装-yellowcong
系统架构图
Solr的架构中,最低的配置是4个Solr容器实例,所以我们这次的安装也是采用的4个容器实例,采用单机伪分布式的安装方式。
节点 | 服务 | 数据目录 |
---|---|---|
192.168.66.100:2181 | zookeeper1 | /tmp/zookeeper1 |
192.168.66.100:2182 | zookeeper2 | /tmp/zookeeper2 |
192.168.66.100:2183 | zookeeper3 | /tmp/zookeeper3 |
192.168.66.100:8081 | solr(Tomcat实例) | /usr/local/solrColud/solr1 |
192.168.66.100:8082 | solr(Tomcat实例) | /usr/local/solrColud/solr2 |
192.168.66.100:8083 | solr(Tomcat实例) | /usr/local/solrColud/solr3 |
192.168.66.100:8084 | solr(Tomcat实例) | /usr/local/solrColud/solr4 |
目录结构
在solrColud目录下面,有4个节点,每个节点里面都会有独自的tomcat容器和solr的home
Solr集群安装
一般的操作,配置一台后,然后直接拷贝里面所有的到第二台,然后修改solr/home和tomcat的端口即可,不能每台都手动配置,会哭的
1、Tomcat端口修改
由于是单节点安装,所以tomcat的端口号必须不能有冲突,不然就完犊子了,redirectPort=”8443” 不需要配置
tomcat端口分配
节点 | SHUTDOWN(端口) | HTTP/1.1(端口) | AJP/1.3(端口) |
---|---|---|---|
192.168.66.100:8081 | 8005 | 8081 | 8009 |
192.168.66.100:8082 | 8006 | 8082 | 8010 |
192.168.66.100:8083 | 8007 | 8083 | 8011 |
192.168.66.100:8084 | 8008 | 8084 | 8012 |
vim /usr/local/solrColud/solr1/apache-tomcat-7.0.62/conf/server.xml
<Server port="8005" shutdown="SHUTDOWN">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
2、配置tomcat的solr
配置solr的时候,一定要注意solr/WEB-INF/web.xml
的solr/home
都不一样,一定要注意了
#拷贝并进入目录
cp /usr/local/solrColud/solr1/solr-4.10.3/dist/solr-4.10.3.war /usr/local/solrColud/solr1/apache-tomcat-7.0.62/webapps/ && cd $_
#解压需要使用到unzip,没有的朋友,请运行下面命令
#yum install -y unzip
#解压
unzip solr-4.10.3.war -d solr
#删除war包
rm -rf solr-4.10.3.war
##配置solr home环境
vim /usr/local/solrColud/solr1/apache-tomcat-7.0.62/webapps/solr/WEB-INF/web.xml
#每个tomcat 容器的 这个配置都不一样,所以一定要注意了
#/usr/local/solrColud/solr1/solr-4.10.3/example/solr
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<!--目录看你自己的是,不能直接粘贴过去就用-->
<env-entry-value>/usr/local/solrColud/solr1/solr-4.10.3/example/solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
#添加solr目录下的包到 tomcat的lib目录下
cp -rf /usr/local/solrColud/solr1/solr-4.10.3/example/lib/ext/* /usr/local/solrColud/solr1/apache-tomcat-7.0.62/lib/
#拷贝数据导入包
cp /usr/local/solrColud/solr1/solr-4.10.3/dist/solr-dataimporthandler-4.10.3.jar /usr/local/solrColud/solr1/apache-tomcat-7.0.62/webapps/solr/WEB-INF/lib/
cp /usr/local/solrColud/solr1/solr-4.10.3/dist/solr-dataimporthandler-extras-4.10.3.jar /usr/local/solrColud/solr1/apache-tomcat-7.0.62/webapps/solr/WEB-INF/lib/
#启动tomcat(solr1节点)
/usr/local/solrColud/solr1/apache-tomcat-7.0.62/bin/startup.sh
#关闭tomcat(solr1节点)
/usr/local/solrColud/solr1/apache-tomcat-7.0.62/bin/shutdown.sh
#查看tomcat 日志
tail -f -n 100 /usr/local/solrColud/solr1/apache-tomcat-7.0.62/logs/catalina.2017-12-06.log
#查看启动情况
curl localhost:8081
3、配置tomcat的catalina.sh
修改每一台solr的tomcat 的 bin目录下catalina.sh文件中加入DzkHost指定zookeeper服务器地址:
vim /usr/local/solrColud/solr1/apache-tomcat-7.0.62/bin/catalina.sh
#添加配置
JAVA_OPTS="-DzkHost=192.168.66.100:2181,192.168.66.100:2182,192.168.66.100:2183"
4、拷贝tomcat和solor的home
cp -rf solr1/* solr2/
cp -rf solr1/* solr3/
cp -rf solr1/* solr4/
#更改这两个文件集合,看是solr2 ,solr3 ...看你是咋分配的
#修改solr的tomcat,避免端口冲突
vim /usr/local/solrColud/solr2/apache-tomcat-7.0.62/conf/server.xml
#修改 solr/home
vim /usr/local/solrColud/solr2/apache-tomcat-7.0.62/webapps/solr/WEB-INF/web.xml
5、修改solr.xml文件
修改每一个solrhome下的solr.xml文件。修改host、hostPort两个属性。分别是对应的tomcat的ip及端口号。
vim solr1/solr-4.10.3/example/solr/solr.xml
#ip地址
<str name="host">192.168.66.100</str>
#端口号
<int name="hostPort">8081</int>
6、上传配置文件到zookeeper
把配置文件上传到zookeeper。需要使用solr压缩目录下的zkcli.sh脚本 对应路径为solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh,不是zookeeper系统提供的zkCli.sh。。。。。
#上传配置文件到zookeeper(说实话,我第一知道这么样上传的。。。我只用java命令上传过)
/usr/local/solrColud/solr1/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh -zkhost 192.168.66.100:2181, 192.168.66.100:2182, 192.168.66.100:2183 -cmd upconfig -confname myconf -confdir /usr/local/solrColud/solr1/solr-4.10.3/example/solr/collection1/conf/
#连接zookeeper
/usr/local/zookeeper/zookeeper1/zookeeper-3.4.10/bin/zkCli.sh -server 192.168.66.100:2183
#查看根目录
ls /
#查看配置
ls /configs
#查看
ls /configs/myconf
注意zkcli是solr提供的,而不是zookeeper系统自带的
查看文件是否上传成功
7、启动服务
建立脚本,用来启动这里面的tomcat容器
#!/bin/bash
#4 个tomcat 服务器
TOMCAT1="/usr/local/solrColud/solr1/apache-tomcat-7.0.62/bin"
TOMCAT2="/usr/local/solrColud/solr2/apache-tomcat-7.0.62/bin"
TOMCAT3="/usr/local/solrColud/solr3/apache-tomcat-7.0.62/bin"
TOMCAT4="/usr/local/solrColud/solr4/apache-tomcat-7.0.62/bin"
case $1 in
startup)
echo "start solrcloud"
echo "start tomcat1"
echo $TOMCAT1/startup.sh
sh $TOMCAT1/startup.sh
echo "start tomcat2"
echo $TOMCAT2/startup.sh
sh $TOMCAT2/startup.sh
echo "start tomcat3"
echo $TOMCAT3/startup.sh
sh $TOMCAT3/startup.sh
echo "start tomcat4"
echo $TOMCAT4/startup.sh
sh $TOMCAT4/startup.sh
;;
shutdown)
echo "stop solrcloud"
echo "start tomcat1"
echo $TOMCAT1/shutdown.sh
sh $TOMCAT1/shutdown.sh
echo "start tomcat2"
echo $TOMCAT2/shutdown.sh
sh $TOMCAT2/shutdown.sh
echo "start tomcat3"
echo $TOMCAT3/shutdown.sh
sh $TOMCAT3/shutdown.sh
echo "start tomcat4"
echo $TOMCAT4/shutdown.sh
sh $TOMCAT4/shutdown.sh
;;
status)
#ps ef|grep tomcat
#查看有多少tomcat实例运行
count=$(ps -ef |grep tomcat |grep -v "grep" |wc -l)
echo 有${count}个tomcat 运行
;;
*)
echo "./solrcloud.sh startup|shutdown|status"
exit 1
;;
esac
exit 0
启动tomcat
打开浏览器查看节点信息
登录查看节点信息。
#登录后,效果还是一样的。
http://192.168.66.100:8081/solr/
http://192.168.66.100:8082/solr/
http://192.168.66.100:8083/solr/
http://192.168.66.100:8084/solr/
我重启了一下发现,妈蛋,又挂了几个节点。。。难道是我的姿势不对吗,(不是姿势不读,是没有完全启动服务,所以慢了一波。。)
参考文章
http://josh-persistence.iteye.com/blog/2234411
https://www.cnblogs.com/append/p/5747956.html
http://blog.csdn.net/jeofey/article/details/50749446