前言
一般情况下,我们用solr都是用单机版,tomcat+solr ,但是可能随着业务的提升,我们想把部分列表的查询放在solr里,或者一些搜索功能,可能单机版的solr性能就有了瓶颈,取而代之的就是solr集群了,也就是solrcloud。
那么我们要配置solrCloud之前,需要配置zookeeper,这是管理solr集群的重要组件,下面我们就开始来一步一步的配置这些集群,内容较多,可能会分几篇文章来讲。
文章中是阿里云ECS服务器3台,拥有内网IP和公网IP,此示例全程都用公网ip,对有需要的小伙伴,可以换成内网环境,这里就不多说了。
zookeeper集群
1、准备阶段
所有挂载docker的目录都统一放在home目录下,大家也可以放在其他目录,但是系统目录不要使用,会有暴露漏洞的风险。
- 创建docker挂载目录 (三台机器都要创建)
cd /home
mkdir docker
cd docker
mkdir zk
cd zk
mkdir {data,datalog,conf}
- 创建配置文件 zoo.cfg (三台机器都要创建)
cd conf
vim zoo.cfg
我们把配置文件写进去
dataDir=/data
dataLogDir=/datalog
clientPort=2181
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=false
server.1=ip1:2888:3888
server.2=ip2:2888:3888
server.3=ip3:2888:3888
具体配置文件是干什么的,大家查询一下就知道了,这里就不赘述了,这里ip1、ip2、ip3 分别对应你主机的ip,自己填一下就可以了。
- 在data文件夹里创建pid文件
每台机器的pid文件里的内容就是上面配置文件中server.后面的数字,如果当前主机为ip3,那你ip3对应的就是server.3 那你pid中的内容就是 3
echo 3 > data/myid
vim myid
图片里是server.3的 myid
到这里呢,我们的准备工作就做的差不多了。
2、docker部署zookeeper
- docker拉去zookeeper镜像 (三台机器都要做)
docker pull zookeeper
- 运行zookeeper
三台机器分别执行
docker run -d \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
--restart=always \
-v /home/docker/zk/data/:/data/ \
-v /home/docker/zk/datalog/:/datalog/ \
-v /home/docker/zk/conf/zoo.cfg:/conf/zoo.cfg \
-v /etc/localtime:/etc/localtime:ro \
--name solr-zk \
-h 你的ip \
zookeeper:latest
到这里zookeeper就部署完毕了。
solr集群
1、准备阶段
- docker 拉取solr镜像 (三台机器都要做)
docker pull solr
- 制作配置文件 (三台机器都要做)
根目录还是在home下 home/docker/solr
mkdir solr
cd solr
mkdir {config,data,dist,logs}
cd config
vim solr.in.sh
将配置文件写入
# Increase Java Heap as needed to support your indexing / query needs
SOLR_HEAP="4g"
ZK_HOST="ip1:2181,ip2:2181,ip3:2181" # 三个zookeeper的host
SOLR_HOST="ip" # 当前ip
SOLR_TIMEZONE="UTC+8"
ENABLE_REMOTE_JMX_OPTS="false"
SOLR_OPTS="$SOLR_OPTS -Xss256k"
SOLR_OPTS="$SOLR_OPTS -Dsun.net.inetaddr.ttl=60 -Dsun.net.inetaddr.negative.ttl=60"
SOLR_HOME="/var/solr/data/" # 容器中 solr data 的目录
SOLR_LOGS_DIR="/var/solr/logs/" # 容器中 log 的目录
- 我们把docker里的server目录拿出来,这里需要先创建个solr容器,三台机器都要做
docker run --name solr -d -p 8983:8983 solr:latest
创建成功后看一下 是否启动成功了 docker ps
然后我们把docker容器中的server目录拷贝到我们home/docker/solr/目录下,这样做是为了我们未来方便扩展solr,安装ik或者连接数据库等操作,如果你对docker非常熟悉的话 可以docker exec -it 进入容器内部进行操作。
拷贝server目录出来:
docker cp solr:/opt/solr/server /home/docker/solr/
这时候 我们就可以启动docker了
2、启动solr集群
三台分别执行
docker run -d \
--restart=always \
-p 8983:8983 \
-l io.rancher.container.network=true \
-v /home/docker/solr/server:/opt/solr/server \
-v /home/docker/solr/data/:/var/solr/data/ \
-v /home/docker/solr/logs/:/var/solr/logs/ \
-v /home/docker/solr/dist/:/var/solr/dist/ \
-v /home/docker/solr/config/solr.in.sh:/etc/default/solr.in.sh \
-v /etc/localtime:/etc/localtime:ro \
--name solr \
-h 你的ip \
solr:latest
这时候我们就已经启动了,你可以在浏览器里输入ip:8983 来看你的solr控制台了
3、solr 的collection
- 创建collection
三个ip随便找一个 在浏览器里执行:
http://ip:8983/solr/admin/collections?action=CREATE&name=ik_core&numShards=3&replicationFactor=3&maxShardsPerNode=3&autoAddReplicas=true
出现这个结果以后,那就是创建成功了,我们可以随便进入一个控制台看一下
其实到这里,我们的solrcloud就算配置完成了,
因为cloud版本比单机版多了一个cloud,我们可以进去看一下我们集群的状态等。
IK分词
1、我们下载ik分词的jar包 (github里有连接)
2、我们要下载ik的配置文件 代码里有 路径
这里这5个文件 就是ik的配置文件了。
第一步,复制这5个配置文件到以下目录
如果你没有classes目录,就自己建一个
/home/docker/solr/server/solr-webapp/webapp/WEB-INF/classes/
第二步,复制ik的jar包 到以下目录
/home/docker/solr/server/solr-webapp/webapp/WEB-INF/lib/
第三步,我们修改默认的配置文件
cd /home/docker/solr/server/solr/configsets/_default/conf
vim managed-schema
在配置文件的最下面添加
<!-- ik分词器 -->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
第四步,配置文件同步的zookeeper里
cd /home/docker/solr/server/scripts/cloud-scripts
./zkcli.sh -zkhost 你的zookeeperip:2181 -cmd putfile /configs/你collection的名字/managed-schema /home/docker/solr/server/solr/configsets/_default/conf/managed-schema
如果不知道你collection的名字,可以在控制台里查看
可以查看以下 这里的managed-schema有没有同步上
然后就可以愉快地使用ik分词了