Zookeeper 加 solr-cloud 实现Solr群集

真分布式zookeeper环境,非伪环境群集,附加solr集群环境下,ik分词的添加

环境和下载包准备

下载包

  1. Jdk8
  2. Tomcat8
  3. Solr7
  4. Zookeeper3.4.10

环境

zookeeper 最好是奇数节点的大于3台的服务器,我这里用到了两台服务器,实际上这样是有问题的,我后面会说到,然后节点是4个tomcat ,首先搭建 zookeeper 然后 部署 solr-cloud

Zookeeper集群搭建

Zookeeper的功能:
1、集群管理:容错、负载均衡。
2、配置文件的集中管理
3、集群的入口

待会儿搭建用到的所有文件放在 solr-cloud 目录下面
这里写图片描述

分别部署两台服务器上的 zookeeper 节点

解压整个 Zookeeper3.4.10 包,复制到 06服务器 solr-cloud 目录下,命名为 zookeeper01,07服务器 solr-cloud 目录下,命名为 zookeeper02
这里写图片描述
这里写图片描述

创建 data/myid 文件存放 id

06 服务器上
这里写图片描述
07服务器上
这里写图片描述

修改配置文件

修改 solr-cloud/zookeeper01/conf/zoo_sample.cfgsolr-cloud/zookeeper01/conf/zoo.cfg ,修改内容如下:
zk01 节点 :
这里写图片描述

zk02 节点 :
这里写图片描述
2181是zk客户端连接集群的端口,2881和3881这种自定义端口是zk集群直接通信用的端口,都可以自己定义,每个 zk 节点可以不同。

启动 zookeeper 节点

这里每次都需要执行集群命令太麻烦了,所以配置了 alias ,Alias 和 参数的使用
比如这里如果手动启动 zookeeper 需要执行 /opt/app/ctpsp/solr-cloud/zookeeper01/bin/zkServer.sh start,定义了alias 之后可以 执行 zookeeperStartAll 命令即可,之后的重启 tomcat 和查询状态命令都是alias 之后的命令。


alias tomcatshutall=shutAllTomcatexec

startZookeerperexec() {
/opt/app/ctpsp/solr-cloud/zookeeper01/bin/zkServer.sh  start
}
alias zookeeperStartAll=startZookeerperexec


statusZookeerperexec() {
/opt/app/ctpsp/solr-cloud/zookeeper01/bin/zkServer.sh  status
}
alias zookeeperStatusAll=statusZookeerperexec

在06 和07 zk 节点上分别 zookeeperStartAll 启动zk ,zookeeperStatusAll 查询 zk 状态 ,显示如下:
06上:
这里写图片描述

07上:
这里写图片描述
可以看到 这里一个 07zk节点leader ,一个 06zk节点follower

分布式集群脑裂问题

这里是一点扩展讨论,可以跳过,直接到 solr-cloud 的部署 ,不会影响配置。

这里我们试着停掉 07 leader zk 节点,看看另外一台06是否会变成 leader节点

这里写图片描述

06的状态变成什么样了呢?
这里写图片描述

可以看到 06 直接就停掉了,这就是分布式集群脑裂问题。如果 zk 节点大于3 ,正常情况下是可以再推举一个 leader 出来的。所以两台服务器是做不了zookeeper集群功能的,不过配置上是一样的,本文还是基于两台来部署。

Solr-cloud部署

0607 分别创建 tomcat01/2, tomcat/3/4 实例

这里写图片描述

修改 tomcat 运行端口

配置文件位置:
/opt/app/ctpsp/solr-cloud/tomcat01/conf/server.xml

1 修改为 8105,8205,8305,8405
这里写图片描述
2 修改为 8180,8280,8380,8480
这里写图片描述
3 修改为 8189,8289,8389,8489
这里写图片描述

添加 tomcat中的solr 项目

参考 在Linux上搭建solr单机版 单机版创建的 solr 项目文件,复制到 solr-cloud 中的 tomcat

这里写图片描述

添加 tomcat中的 solrhome 项目

单机版中创建的 solrhome项目文件 复制到 solr-cloud
这里写图片描述

当前的项目结构是这样的:
06上:
这里写图片描述
07上:
这里写图片描述

检查一下,长征路已经快到接近尾声啦。

修改 solrhome 配置

配置 两台服务器4个 solrhomesolr.xml 对应服务器ip 和对应 端口
这里写图片描述

修改 solr 配置 关联 solrhome

同样是配置 两台服务器4个地方,看图理解一下
这里写图片描述

Zookeeper统一管理配置 solrhome 文件。

# 进入solr源码包 
/usr/local/src/solr-6.6.0/server/scripts/cloud-scripts

#执行
./zkcli.sh -zkhost 10.237.67.6:2181,10.237.67.7:2181 -cmd upconfig -confdir /opt/app/ctpsp/solr-cloud/solrhome01/configsets/sample_techproducts_configs/conf -confname myconf

zkhost 是集群ip ;confdirsolrhomeconf 目录;confname 是 上传conf文件的名称 。这个命令只需要在任意一个 zk 节点执行即可实现 zk 统一管理4个 solrhome 配置。

检查一下 zk的conf 是否上传成功,进入这个目录,执行 zookeepeer 下的 脚本进入 zookeeper,使用 quit 退出

[prouser@b7515169318-1 conf]$ cd ../../zookeeper01/bin/
[prouser@b7515169318-1 bin]$ ls
README.txt  zkCleanup.sh  zkCli.cmd  zkCli.sh  zkEnv.cmd  zkEnv.sh  zkServer.cmd  zkServer.sh  zookeeper.out
[prouser@b7515169318-1 bin]$ ./zkCli.sh

进入之后,查询是否有刚刚的 myconf 文件,旁边那个 myconfIK 是之后我上传ik分词的conf ,这里如果修改了 conf 配置,只需要再次执行本步骤,confname 设置为和之前一样的就可以更新。
这里写图片描述

关联 solrzookeeper

修改配置文件
这里写图片描述

主要是添加一个 zookeeper 的集群ip配置,可以搜索 umask 来定位。4个tomcat 修改是一样的。

启动 tomcat

分别在 两台服务器启动 01-04 tomcat,同样定义 alias 方便每次使用

startAllTomcatexec() {
bash /opt/app/ctpsp/solr-cloud/tomcat01/bin/startup.sh
bash /opt/app/ctpsp/solr-cloud/tomcat02/bin/startup.sh
}
alias tomcatstartall=startAllTomcatexec


shutAllTomcatexec() {
bash /opt/app/ctpsp/solr-cloud/tomcat01/bin/shutdown.sh
bash /opt/app/ctpsp/solr-cloud/tomcat02/bin/shutdown.sh
}
alias tomcatshutall=shutAllTomcatexec

访问集群

可以看到相比单机版的,集群多了红框的部分
这里写图片描述

创建一个 collection试一试
这里写图片描述

查看集群云图
这里写图片描述

至此,zookeeper + solrcloud 的部署就完成了,由于篇幅太长,集群ik分词的部署放在下一篇。

猜你喜欢

转载自blog.csdn.net/qq_28018283/article/details/79994518
今日推荐