草庐IT

基于docker的集群搭建

Jcl-_ 2023-06-12 原文

基于docker的集群搭建

2.3.2.1 环境准备

​ 1.搭建docker

​ 要想在docker上搭建solr集群,首先安装docker的环境。这个就不再演示,如果没有学过docker的同学可以参考下面的视频地址进行学习。

​ https://www.boxuegu.com/freecourse/detail-1553.html

​ 如果学习过但是忘了如何搭建,参考一下地址。

​ https://www.runoob.com/docker/centos-docker-install.html

  1. 拉取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)]

2.3.2.2 搭建zookeeper集群

​ 搭建zookeeper集群,我们需要利用我们刚才拉取的zookeeper的镜像创建3个容器。并且让他们产生集群关系。

​ 单独创建一个桥接网卡

docker network create itcast-zookeeper
docker network ls
1.容器1创建
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
2.容器2创建
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
 
3.容器3创建
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)]

2.3.2.3 测试Zookeeper集群的搭建情况

​ 使用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)]

2.3.2.4 zookeeper集群的架构

​ 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

2.3.2.3 搭建solr集群

​ 搭建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)]

2.3.2.5 整体架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0nBfB2ze-1672214916037)(imgs\2020-02-24_233058.png)]

2.3.2.6 创建集群的逻辑结构

​ 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"}
2.3.2.7 solr配置文件修改

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编程思想"}

有关基于docker的集群搭建的更多相关文章

  1. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

  2. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  3. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  4. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  5. ruby-on-rails - (Ruby,Rails) 基于角色的身份验证和用户管理...? - 2

    我正在寻找用于Rails的优质管理插件。似乎大多数现有的插件/gem(例如“restful_authentication”、“acts_as_authenticated”)都围绕着self注册等展开。但是,我正在寻找一种功能齐全的基于管理/管理角色的解决方案——但不是简单地附加到另一个非基于角色的解决方案。如果我找不到,我想我会自己动手......只是不想重新发明轮子。 最佳答案 RyanBates最近做了两个关于授权的railscast(注意身份验证和授权之间的区别;身份验证检查用户是否如她所说的那样,授权检查用户是否有权访问资源

  6. ruby - 在 Rakefile 中动态生成 Rake 测试任务(基于现有的测试文件) - 2

    我正在根据Rakefile中的现有测试文件动态生成测试任务。假设您有各种以模式命名的单元测试文件test_.rb.所以我正在做的是创建一个以“测试”命名空间内的文件名命名的任务。使用下面的代码,我可以用raketest:调用所有测试require'rake/testtask'task:default=>'test:all'namespace:testdodesc"Runalltests"Rake::TestTask.new(:all)do|t|t.test_files=FileList['test_*.rb']endFileList['test_*.rb'].eachdo|task|n

  7. ruby - 如何使用 Ruby 基于字母数字字符串生成颜色? - 2

    我想要像“嘿那里”这样的东西变成,例如,#316583。我希望将任意长度的字符串“归结”为十六进制颜色。我不知道从哪里开始。我在想,每个字符串的MD5散列都是不同的-但如何将该散列转换为十六进制颜色数字? 最佳答案 你可以只取几位前几位:require'digest/md5'color=Digest::MD5.hexdigest('Mytext')[0..5] 关于ruby-如何使用Ruby基于字母数字字符串生成颜色?,我们在StackOverflow上找到一个类似的问题:

  8. 【自动驾驶环境感知项目】——基于Paddle3D的点云障碍物检测 - 2

    文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3

  9. ruby-on-rails - 私有(private) gem 没有安装在 docker 中 - 2

    我正在尝试使用docker运行一个Rails应用程序。通过github的sshurl安装的gem很少,如下所示:Gemfilegem'swagger-docs',:git=>'git@github.com:xyz/swagger-docs.git',:branch=>'my_branch'我在docker中添加了keys,它能够克隆所需的repo并从git安装gem。DockerfileRUNmkdir-p/root/.sshCOPY./id_rsa/root/.ssh/id_rsaRUNchmod700/root/.ssh/id_rsaRUNssh-keygen-f/root/.ss

  10. ruby-on-rails - 将 Heroku 环境变量传输到 Docker 实例 - 2

    我在Heroku上构建了一个必须在Docker容器内运行的RoR应用程序。为此,我使用officialDockerfile.因为它在Heroku中很常见,所以我需要一些附加组件才能使这个应用程序完全运行。在生产中,变量DATABASE_URL在我的应用程序中可用。但是,如果我尝试其他一些使用环境变量(在我的例子中是Mailtrap)的加载项,变量不会在运行时复制到实例中。所以我的问题很简单:如何让docker实例在Heroku上执行时知道环境变量?您可能会问,我已经知道我们可以在docker-compose.yml中指定一个environment指令。我想避免这种情况,以便能够通过项目

随机推荐