在Ubuntu14.04操作系统的宿主机中,安装docker17.06.3,将宿主机的操作系统制作成docker基础镜像,之后使用自制的基础镜像在docker中启动3个容器,分配固定IP,再在3个容器中配置solrCloud集群。
关键点:docker17.06.3安装,docker自制镜像及相关容器操作,docker分配固定IP及添加端口映射,solrCloud集群部署等
注:solrCloud采用的solr内置jetty,需要单独配置zookeeper
容器IP及名称见下表:
编号
|
静态IP
|
容器名称
|
1
|
172.18.0.11
|
server1
|
2
|
172.18.0.12
|
server2
|
3
|
172.18.0.13
|
server3
|
一、在宿主机安装docker最新版
1.更新apt-get
apt-get update
2.安装curl工具
apt-get install curl
3.获取并安装docker最新版
curl -fsSL https://get.docker.com/ | sh
4.查看docker版本
docker -v
![](https://i-blog.csdnimg.cn/blog_migrate/727662821aa4a67ef7748660e97956cb.png)
二、在宿主机制作Ubuntu14.10基础镜像ubuntu-self
1.将本机操作系统打包成tar文件
tar --numeric-owner --exclude=/proc --exclude=/sys -cvf ubuntu-self.tar /
![](https://i-blog.csdnimg.cn/blog_migrate/30736924a9065bc62a62ce0365e9b9ef.png)
2.将制作的tar文件导入docker镜像库中,并命令为:ubuntu-self:
cat ubuntu-self.tar | docker import - ubuntu-self
3.现在可以运行它了:
docker run -i -t ubuntu-self
注:官方提供的镜像库中Ubuntu无法sudo,不太好用,这里我自己利用本机的操作系统生成了一个基础纯净版镜像,命名为ubuntu-self,大小约3.5G,里面没有安装任何软件。
三、配置宿主机的hosts文件,以便利用ssh登录容器
1.修改hosts文件,添加如下内容:
vi /etc/hosts
172.18.0.11 server1
172.18.0.12 server2
172.18.0.13 server3
2.查看hosts文件
cat /etc/hosts
![](https://i-blog.csdnimg.cn/blog_migrate/0a7cbb6aeafbc63a78fdca1e51ae58f4.png)
四、启动一个容器,设置静态IP,命名为server1
1.在宿主机上创建自定义网络
docker network create --subnet=172.18.0.0/16 search_network
备注:这里选取了172.18.0.0网段,也可以指定其他任意空闲的网段,search_network为自定义网桥的名字,可自己任意取名。
2.利用docker启动容器server1,分配固定IP 172.18.0.11,并将容器的8983端口与宿主机8983进行映射,以便可以从外部访问容器
docker run -itd --name server1 --net search_network --ip 172.18.0.11 -p 8983:8983 ubuntu-self /bin/bash
注:该命令执行完之后直接进入到server1的命令行界面,主机名称变为docker分配的随机字符串,查看ip是否为静态,执行结果如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/0cb4c51830a74344a01a6e872bd8db66.png)
五、继续操作,在容器server1中配置ssh服务
1.aptget升级
apt-get update
2.安装openssh服务
apt-get install openssh-server
3.开启ssh服务
sudo /etc/init.d/ssh start
4.设置ssh开机启动
vi /etc/rc.local
添加如下内容:
service ssh start
4.退出容器,在宿主机中采用ssh登录
exit
![](https://i-blog.csdnimg.cn/blog_migrate/6ebd112de9833bc5cb450f0083a43a5f.png)
5.在宿主机切换到tank用户(root登录ssh需要修改ssh配置文件,这里用tank用户登录更方便些),并ssh到容器server1
su tank
ssh server1
![](https://i-blog.csdnimg.cn/blog_migrate/2e119552e810e4a7eed66e72e4d553af.png)
六、在容器server1中安装jdk1.8并配置java环境变量
1.解压缩文件
tar -zxvf jdk1.8.0_141.tar.gz -C /usr/local/java/
2.向/etc/profile文件中追加下面内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_141
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=$PATH:${JAVA_HOME}/bin
3.让文件生效
source /etc/profile
4.验证java成功安装
java -version
![](https://i-blog.csdnimg.cn/blog_migrate/87f9d4cbc6983ac27cd4c2da5e5892ba.png)
七、在容器server1中安装配置zookeeper-3.4.10
1.解压zookeeper 安装包到/usr/local目录中
tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/
2.创建zookeeper的data和logs目录,确保拥有读写权限
mkdir /home/tank/zookeeper/data
mkdir /home/tank/zookeeper/log
3.将zookeeper安装目录下conf文件夹中的zoo_sample.cfg重命名为zoo.cfg
![](https://i-blog.csdnimg.cn/blog_migrate/88984d24d273a87f06326b09bee189d5.png)
4.修改zoo.cfg内容,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=/home/tank/zookeeper/data
dataLogDir=/home/tank/zookeeper/log
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# 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=172.18.0.11:2888:3888
server.2=172.18.0.12:2888:3888
server.3=172.18.0.13:2888:3888
5.进入/home/tank/zookeeper/data中,新建myid文件,写入1
![](https://i-blog.csdnimg.cn/blog_migrate/a5da047a49713100b6c81784c3a0fe76.png)
注:其他两个节点的myid内容应分别是2和3
八、在容器server1中安装配置solr-6.6.0
1.解压solr-6.6.0.tgz到/usr/local目录下
tar -zxvf solr-6.6.0.tgz -C /usr/local/
![](https://i-blog.csdnimg.cn/blog_migrate/1876987d36ab3557b349ffe3886b7dc8.png)
2.创建solrCloud根目录solr_cloud_home文件夹
mkdir /usr/local/solrCloud/solr_cloud_home
3.复制/usr/local/solr-6.6.0/server/solr/目录下的文件到solr_cloud_home中
cp /usr/local/solr-6.6.0/server/solr/* /usr/local/solrCloud/solr_cloud_home/
查看solr_cloud_home目录,如图所示:
ls
![](https://i-blog.csdnimg.cn/blog_migrate/cffabcc8df743add096ba8eaa006a9c2.png)
4.创建配置存放目录solr_cloud_collection文件夹
mkdir /usr/local/solrCloud/solr_cloud_collection
5.复制/usr/local/solr-6.6.0/example/example-DIH/solr/solr/目录下的文件到solr_cloud_collection/cloud_core中
mkdir /usr/local/solr_cloud_collection/cloud_core
cp /usr/local/solr-6.6.0/example/example-DIH/solr/solr/* /usr/local/solr_cloud_collection/cloud_core/
ls
![](https://i-blog.csdnimg.cn/blog_migrate/36aef194ff8ad9ae5a2f742e5cec9977.png)
九、在宿主机提交容器server1为新的镜像,命名为ubuntu-self-solr
sudo docker commit server1 ubuntu-self-solr
docker images
![](https://i-blog.csdnimg.cn/blog_migrate/2976c2b2033a28ab1f4340c545554cfc.png)
十、利用上一步生成的镜像启动容器server2,server3
1.在宿主机启动容器server2,设置IP为172.18.0.12
docker run -itd --name server2 --net search_network --ip 172.18.0.12 ubuntu-self-solr /bin/bash
2.将容器server2中/home/tank/zookeeper/data/myid内容由1改为2
3.退出容器server2,回到宿主机
exit
3.在宿主机启动容器server3,设置IP为172.18.0.13
docker run -itd --name server3 --net search_network --ip 172.18.0.13 ubuntu-self-solr /bin/bash
4.将容器server3中/home/tank/zookeeper/data/myid内容由1改为3
5.退出容器server3,回到宿主机
exit
6.在宿主机中查看docker容器运行情况
docker ps
![](https://i-blog.csdnimg.cn/blog_migrate/083706858d48b0b64d9d0c54aabce1e3.png)
十一、在宿主机ssh登录容器server1,server2,server3 并分别启动zookeeper
ssh server1
cd /usr/local/zookeeper-3.4.10/
bin/zkServer.sh start
/usr/local/zookeeper-3.4.10/bin/zkServer.sh start
![](https://i-blog.csdnimg.cn/blog_migrate/0eaf376fa2430a01abd840f17af0b688.png)
注:在server2,server3上同样执行此操作
十二、在宿主机ssh登录容器server1,server2,server3并启动solr
1.ssh登录server1,cloud模式下启动solr
ssh server1
cd /usr/local/solr-6.6.0
bin/solr start -cloud -p 8983 -s "/usr/local/solrCloud/solr_cloud_home/" -z "172.18.0.11:2181,172.18.0.12:2181,172.18.0.13:2181"
![](https://i-blog.csdnimg.cn/blog_migrate/536133ea5e08b75bbb4ef79888812b59.png)
2.打开宿主机浏览器,访问页面http://172.18.0.11:8983/solr/,可以进入solr页面即代表启动成功
注:在server2,server3上同样执行此操作
十三、在容器server1上创建Collection(只需要在一台solr节点上操作)
1、由solr命令建立索引,这里索引命名为:
cloudsuite_web_search
进入solr/bin目录,使用solr命令:
cd /usr/local/solr-6.6.0
bin/solr create_collection -c cloudsuite_web_search -shards 3 -replicationFactor 3 -d /usr/local/solrCloud/solr_cloud_collection/cloud_core/conf -p 8983
-c 核心名称tar
-shards 分片数量
- replicationFactor 副本数量 (一般指有几台solr集群)
2.将solr提供的xml示例文件上传至索引
bin/post -c cloudsuite_web_search *.xml
十四、在宿主机上通过浏览器访问solrCloud集群,验证操作成功
安装成功后,无论从哪个节点访问8983端口,均可以看到cloud的拓扑模式,如下所示
![](https://i-blog.csdnimg.cn/blog_migrate/54d4ec233c9779410d1d1eb59e4f21c4.png)