真分布式zookeeper环境,非伪环境群集,附加solr集群环境下,ik分词的添加
环境和下载包准备
下载包
环境
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.cfg
为 solr-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
部署
在 06
和07
分别创建 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个 solrhome
下 solr.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 ;confdir
是 solrhome
的 conf
目录;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
设置为和之前一样的就可以更新。
关联 solr
和 zookeeper
修改配置文件
主要是添加一个 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分词的部署放在下一篇。