1.搭建docker
要想在docker上搭建solr集群,首先安装docker的环境。这个就不再演示,如果没有学过docker的同学可以参考下面的视频地址进行学习。
https://www.boxuegu.com/freecourse/detail-1553.html
如果学习过但是忘了如何搭建,参考一下地址。
https://www.runoob.com/docker/centos-docker-install.html
拉取zookeeper镜像和solr的镜像,采用的版本是3.4.14和7.7.2
docker pull zookeeper:3.4.14
docker pull solr:7.7.2
遇到问题:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
原因:
可能是上一次的docker没有成功退出导致的,所以要重新启动docker
解决办法:
systemctl start docker.service
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fhxpesQ2-1672214916033)(C:\Users\86151\AppData\Roaming\Typora\typora-user-images\image-20221222150059103.png)]
查看拉取镜像
docker images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sqGlKfoQ-1672214916034)(imgs\2020-02-24_230838.png)]
搭建zookeeper集群,我们需要利用我们刚才拉取的zookeeper的镜像创建3个容器。并且让他们产生集群关系。
单独创建一个桥接网卡
docker network create itcast-zookeeper
docker network ls
docker run
-id
--restart=always
-v /opt/docker/zookeeper/zoo1/data:/data
-v /opt/docker/zookeeper/zoo1/datalog:/datalog
-e ZOO_MY_ID=1
-e ZOO_SERVERS="server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888"
-p 2181:2181
--name=zookeeper1
--net=itcast-zookeeper
--privileged
zookeeper:3.4.14
docker run -id --restart=always -v /opt/docker/zookeeper/zoo1/data:/data -v /opt/docker/zookeeper/zoo1/datalog:/datalog -e ZOO_MY_ID=1 -e ZOO_SERVERS="server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888" -p 2181:2181 --name=zookeeper1 --privileged --net=itcast-zookeeper zookeeper:3.4.14
说明:
--restart:docker重启,容器重启。
-d:守护式方式运行方式,除此之外还有-it
-v:目录挂载,用宿主机/opt/docker/zookeeper/zoo1/data,映射容器的/data目录
-e:指定环境参数。分别指定了自己的id,集群中其他节点的地址,包含通信端口和投票端口
--name:容器的名称
-p:端口映射,用宿主机2181映射容器 2181,将来我们就需要通过本机2181访问容器。
--privileged:开启特权,运行修改容器参数
--net=itcast-zookeeper 指定桥接网卡
zookeeper:3.4.14:创建容器的镜像
查看创建好的容器
docker ps
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OVmDmvjl-1672214916034)(imgs\2020-02-24_172947.png)]
查看宿主机的目录,该目录映射的就是zookeeper1容器中的data目录。
cd /opt/docker/zookeeper/zoo1/data
查看Zookeeper节点的id
cat myid
docker run -d --restart=always
-v /opt/docker/zookeeper/zoo2/data:/data
-v /opt/docker/zookeeper/zoo2/datalog:/datalog
-e ZOO_MY_ID=2
-e ZOO_SERVERS="server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888"
-p 2182:2181
--name=zookeeper2
--net=itcast-zookeeper
--privileged
zookeeper:3.4.14
docker run -d --restart=always -v /opt/docker/zookeeper/zoo2/data:/data -v /opt/docker/zookeeper/zoo2/datalog:/datalog -e ZOO_MY_ID=2 -e ZOO_SERVERS="server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888" -p 2182:2181 --name=zookeeper2 --net=itcast-zookeeper --privileged zookeeper:3.4.14
说明:
需要修改目录挂载。
修改Zookeeper的id
端口映射:用宿主机2182 映射容器 2181
容器名称:zookeeper2
docker run -d --restart=always
-v /opt/docker/zookeeper/zoo3/data:/data
-v /opt/docker/zookeeper/zoo3/datalog:/datalog
-e ZOO_MY_ID=3
-e ZOO_SERVERS="server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888"
-p 2183:2181
--name=zookeeper3
--net=itcast-zookeeper
--privileged
zookeeper:3.4.14
docker run -d --restart=always -v /opt/docker/zookeeper/zoo3/data:/data -v /opt/docker/zookeeper/zoo3/datalog:/datalog -e ZOO_MY_ID=3 -e ZOO_SERVERS="server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888" -p 2183:2181 --name=zookeeper3 --net=itcast-zookeeper --privileged zookeeper:3.4.14
说明:
需要修改目录挂载。
修改Zookeeper的id
端口映射:用宿主机2183 映射容器 2181
容器名称:zookeeper3
查看容器创建情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GBmbkopA-1672214916035)(imgs\2020-02-24_191129.png)]
使用yum安装nc指令
yum install -y nc
方式1:
通过容器的ip查看Zookeeper容器状态
查看三个Zookeeper容器的ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' zookeeper1
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' zookeeper2
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' zookeeper3
查看Zookeeper集群的状态
echo stat|nc ip 2181
echo stat|nc ip 2181
echo stat|nc ip 2181
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hf6YvZUB-1672214916035)(imgs\2020-02-24_191247.png)]
方式2:通过宿主机的ip查询Zookeeper容器状态
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ClAGbX6a-1672214916035)(imgs\2020-04-29_202943.bmp)]
Zookeeper集群架构[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X7UPbIDK-1672214916036)(imgs\2020-02-24_214848.png)]
Zookeeper客户端连接Zookeeper容器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6kkcHND0-1672214916036)(imgs\2020-04-29_211639.bmp)]
遇到问题:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AHyZbvk7-1672214916036)(C:\Users\86151\AppData\Roaming\Typora\typora-user-images\image-20221222153732976.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mDvDHKDv-1672214916037)(C:\Users\86151\AppData\Roaming\Typora\typora-user-images\image-20221222153741720.png)]
已解决,原因是ip地址为虚拟机的ip,使用ip addr 查看虚拟机ip
搭建Solr集群,我们需要利用我们刚才拉取的solr的镜像创建4个容器。并且需要将集群交由Zookeeper管理,Solr容器内部使用jetty作为solr的服务器。
1.容器1创建
docker run --name solr1 --net=itcast-zookeeper -d -p 8983:8983 solr:7.7.2 bash -c '/opt/solr/bin/solr start -f -z zookeeper1:2181,zookeeper2:2181,zookeeper3:2181'
--name:指定容器名称
--net:指定网卡,之前创建的桥接网卡
-d:后台运行
-p:端口映射,宿主机8983映射容器中8983
-c:
/opt/solr/bin/solr:通过容器中脚本,指定Zookeeper的集群地址
2.容器2创建
docker run --name solr2 --net=itcast-zookeeper -d -p 8984:8983 solr:7.7.2 bash -c '/opt/solr/bin/solr start -f -z zookeeper1:2181,zookeeper2:2181,zookeeper3:2181'
--name:指定容器名称
--net:指定网卡,之前创建的桥接网卡
-d:后台运行
-p:端口映射,宿主机8983映射容器中8984
-c:/opt/solr/bin/solr:通过容器中脚本,指定Zookeeper的集群地址
3.容器3创建
docker run --name solr3 --net=itcast-zookeeper -d -p 8985:8983 solr:7.7.2 bash -c '/opt/solr/bin/solr start -f -z zookeeper1:2181,zookeeper2:2181,zookeeper3:2181'
--name:指定容器名称
--net:指定网卡,之前创建的桥接网卡
-d:后台运行
-p:端口映射,宿主机8983映射容器中8984
-c:/opt/solr/bin/solr:通过容器中脚本,指定Zookeeper的集群地址
4.容器4创建
docker run --name solr4 --net=itcast-zookeeper -d -p 8986:8983 solr:7.7.2 bash -c '/opt/solr/bin/solr start -f -z zookeeper1:2181,zookeeper2:2181,zookeeper3:2181'
--name:指定容器名称
--net:指定网卡,之前创建的桥接网卡
-d:后台运行
-p:端口映射,宿主机8983映射容器中8985
-c:/opt/solr/bin/solr:通过容器中脚本,指定Zookeeper的集群地址
5.查看结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GZ5Hnsau-1672214916037)(imgs\2020-02-24_231205.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0nBfB2ze-1672214916037)(imgs\2020-02-24_233058.png)]
1.通过端口映射访问solr的后台系统(注意关闭防火墙)
http://192.168.200.128:8983/solr
http://192.168.200.128:8984/solr
http://192.168.200.128:8985/solr
http://192.168.200.128:8986/solr
2.上传solr配置文件到Zookeeper集群。
进入到某个solr容器中,使用/opt/solr/server/scripts/cloud-scripts/的zkcli.sh 。上传solr的配置文件。
位置/opt/solr/example/example-DIH/solr/solr/conf到Zookeeper集群zookeeper1:2181,zookeeper2:2181,zookeeper3:2181。
docker exec -it solr1 /opt/solr/server/scripts/cloud-scripts/zkcli.sh -zkhost zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 -cmd upconfig -confdir /opt/solr/server/solr/configsets/sample_techproducts_configs/conf -confname myconfig
3.使用zooInterceptor查看配置文件上传情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPjdxEdL-1672214916038)(imgs\2020-02-25_091219.png)]
4.使用后台管理系统创建connection
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0APSmTkv-1672214916038)(imgs\2020-02-25_091346.png)]
5. 查看集群的逻辑结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bO6PtEdq-1672214916038)(imgs\2020-02-25_091958.png)]
到这基于docker的solr集群我们就讲解完毕。
6.测试集群
{id:1,name:"zx"}
1.在linux服务器上需要有一份solr的配置文件,修改宿主机中的配置文件。
之前单机版solr的/usr/local/solr_home下,就有solr的配置文件。
/usr/local/solr_home下面的配置文件,schema已经配置了基于IK分词器的FieldType
2.将宿主机中的配置文件,替换到某个solr容器中。
docker cp /usr/local/solr_home/collection1/conf/managed-schema solr1:/opt/solr/server/solr/configsets/sample_techproducts_configs/conf/managed-schema
3.将容器中修改后managed-schema配置文件,重新上传到Zookeeper集群。
进入到solr1容器中,使用zkcli.sh命令,将最新的配置文件上传到Zookeeper集群
容器文件位置:/opt/solr/server/solr/configsets/sample_techproducts_configs/conf/managed-schema
集群文件位置: /configs/myconfig/managed-schema
docker exec -it solr1 /opt/solr/server/scripts/cloud-scripts/zkcli.sh -zkhost zookeeper1:2181,zookeeper2:2181,zookeeper3:2181 -cmd putfile /configs/myconfig/managed-schema /opt/solr/server/solr/configsets/sample_techproducts_configs/conf/managed-schema
4.在Files中查看,修改后的配置文件
5.将IK分词器的jar包,及配置文件复制到4个solr容器中。
5.1 将IK分词器上传到linux服务器
5.2 使用docker cp命令进行jar包的拷贝
docker cp /root/ik-analyzer-solr5-5.x.jar solr1:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib/ik-analyzer-solr5-5.x.jar
docker cp /root/ik-analyzer-solr5-5.x.jar solr2:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib/ik-analyzer-solr5-5.x.jar
docker cp /root/ik-analyzer-solr5-5.x.jar solr3:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib/ik-analyzer-solr5-5.x.jar
docker cp /root/ik-analyzer-solr5-5.x.jar solr4:/opt/solr/server/solr-webapp/webapp/WEB-INF/lib/ik-analyzer-solr5-5.x.jar
5.3 使用docker cp命令进行配置文件的拷贝
将IK分析器的相关配置文件复制到/root/classes目录中
docker cp /root/classes solr1:/opt/solr/server/solr-webapp/webapp/WEB-INF/classes
docker cp /root/classes solr2:/opt/solr/server/solr-webapp/webapp/WEB-INF/classes
docker cp /root/classes solr3:/opt/solr/server/solr-webapp/webapp/WEB-INF/classes
docker cp /root/classes solr4:/opt/solr/server/solr-webapp/webapp/WEB-INF/classes
6、重启所有solr容器
docker restart solr1
docker restart solr2
docker restart solr3
docker restart solr4
7、使用text_ik创建业务域
不再使用修改配置文件的方式,直接利用后台管理系统进行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ESWeOUsq-1672214916039)(imgs\2020-02-25_120512.png)]
{id:2,book_name:"java编程思想"}