在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二、在宿主机制作Ubuntu14.10基础镜像ubuntu-self
1.将本机操作系统打包成tar文件 tar --numeric-owner --exclude=/proc --exclude=/sys -cvf ubuntu-self.tar / 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四、启动一个容器,设置静态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是否为静态,执行结果如下图所示:五、继续操作,在容器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 5.在宿主机切换到tank用户(root登录ssh需要修改ssh配置文件,这里用tank用户登录更方便些),并ssh到容器server1 su tank ssh server1六、在容器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七、在容器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 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 注:其他两个节点的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/ 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 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九、在宿主机提交容器server1为新的镜像,命名为ubuntu-self-solr
sudo docker commit server1 ubuntu-self-solr docker images十、利用上一步生成的镜像启动容器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十一、在宿主机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 注:在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" 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的拓扑模式,如下所示