云服务器搭建solr伪集群

工具+版本

editplus64+SSH远程工具

zookeeper-3.4.12
solr-4.10.3
jdk版本1.7
Tomcat7

首先,云服务器上防火墙是默认关闭状态,所以出现链接拒绝问题请尝试设置安全组。(那么那些要求你将防火墙关闭的博客可以尝试将端口放在安全组中。)如下,这个是我购买腾讯云服务器设置的部分安全组。

上面的图无关紧要哈,就是我的服务器的自定义开放端口。如果你想用这个端口一定要先netstat一下下。废话不多少了,开始干活。


一、zookeeper伪集群搭建

第一步:需要安装jdk环境。(tomcat也用,这个简单不说了,不会自行度娘。)

第二步:把zookeeper的压缩包上传到服务器。

第三步:解压缩,tar -zxvf zookeeper-版本号。

第四步:把zookeeper复制三份。

[[email protected] ~]# mkdir /usr/local/solr-cloud

[[email protected] ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper01

[[email protected] ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper02

[[email protected] ~]# cp -r zookeeper-3.4.6 /usr/local/solr-cloud/zookeeper03

第五步:在每个zookeeper目录下创建一个data目录。

第六步:在data目录下创建一个myid文件,文件名就叫做“myid”。内容就是每个实例的id。例如1、2、3。

挺费劲的,别弄差了。一定要提醒自己细心细心再细心。

第七步:修改配置文件。把conf目录下的zoo_sample.cfg文件改名为zoo.cfg。此外zoo.cfg有几个配置要修改。

1.dataDir=/usr/local/solr-cloud/zookeeper01/data/ (data文件夹位置)

2.clientPort=2191(端口号)

3. server.1=(ip地址):2881:3881

    server.2=(ip地址):2882:3882

    server.3=(ip地址):2883:3883

(末尾添加上)

第八步:启动每个zookeeper实例。

启动zookeeper:bin/zkServer.sh start(最好自己写个批处理,一次全启动。一次全关闭。下面的tomcat也是)。

查看zookeeper的状态:bin/zkServer.sh status

还有一点就是,我在完成了所有步骤之后,发现启动zookeeper伪集群失败,使用工具查看一下zookeeper文件夹下的bin目录的zookeeper.out文件,发现如下错误。

2018-10-07 17:08:11,834 [myid:1] - WARN  [QuorumPeer[myid=1]/0.0.0.0:2191:[email protected]] - Cannot open channel to 2 at election address /139.199.201.162:3192

java.net.ConnectException: Connection refused

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)

at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)

at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)

at java.net.Socket.connect(Socket.java:579)

at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)

at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:610)

at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:838)

at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:957)

2018-10-07 17:08:11,835 [myid:1] - INFO  [QuorumPeer[myid=1]/0.0.0.0:2191:[email protected]] - Resolved hostname: 139.199.201.162 to address: /139.199.201.162

2018-10-07 17:08:11,835 [myid:1] - WARN  [QuorumPeer[myid=1]/0.0.0.0:2191:[email protected]] - Cannot open channel to 3 at election address /139.199.201.162:3193

java.net.ConnectException: Connection refused

at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)

at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)

at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)

at java.net.Socket.connect(Socket.java:579)

at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)

at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:610)

at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:838)

at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:957)

2018-10-07 17:08:11,836 [myid:1] - INFO  [QuorumPeer[myid=1]/0.0.0.0:2191:[email protected]] - Resolved hostname: 139.199.201.162 to address: /139.199.201.162

2018-10-07 17:08:11,836 [myid:1] - INFO  [QuorumPeer[myid=1]/0.0.0.0:2191:[email protected]] - Notification time out: 60000

查看安全组设置没问题,然后就尴尬了,度娘出来了一个大哥,zookeeper集群无法正确启动。大哥看源码解决了,那我先拿来试试吧。其他的感觉都是瞎糊弄的,也有可能是版本问题。

第七步加上一条.quorumListenOnAllIPs=true这个属性加上后再启动,成功。

ZooKeeper JMX enabled by default

Using config: /usr/local/solr-cloud/zookeeper01/bin/../conf/zoo.cfg

Mode: follower

二、Solr集群搭建

第一步:创建四个tomcat实例。每个tomcat运行在不同的端口。

第二步:部署solr的war包。把单机版的solr工程复制到集群中的tomcat中。

第三步:为每个solr实例创建一个对应的solrhome。使用单机版的solrhome复制四份。

第四步:需要修改solr的web.xml文件。把solrhome关联起来。

    <env-entry>

       <env-entry-name>solr/home</env-entry-name>

       <env-entry-value>/usr/local/solr-cloud/solrhome01/</env-entry-value>

       <env-entry-type>java.lang.String</env-entry-type>

    </env-entry>

第五步:配置solrCloud相关的配置。每个solrhome下都有一个solr.xml,把其中的ip及端口号配置好。

  <solrcloud>

    <str name="host">ip地址</str>

    <int name="hostPort">tomcat开放端口号</int>

    <str name="hostContext">${hostContext:solr}</str>

    <int name="zkClientTimeout">${zkClientTimeout:30000}</int>

    <bool name="genericCoreNodeNames">${genericCoreNodeNames:true}</bool>

  </solrcloud>

第六步:让zookeeper统一管理配置文件。需要把solrhome/collection1/conf目录上传到zookeeper。

上传任意solrhome中的配置文件即可。

使用工具上传配置文件:/root/solr-4.10.3/example/scripts/cloud-scripts/zkcli.sh

./zkcli.sh -zkhost ip地址:zookeeper开放端口1,ip地址:zookeeper开放端口2,ip地址:zookeeper开放端口3 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf

使用zookeeper目录下的bin/zkCli.sh命令查看zookeeper上的配置文件:查看zookeeper上的配置文件:

./zkCli.sh -server zookeeper:开放端口1
[admin-extra.menu-top.html, currency.xml, protwords.txt, mapping-FoldToASCII.txt, _schema_analysis_synonyms_english.json, _rest_managed.json, solrconfig.xml, _schema_analysis_stopwords_english.json, lang, stopwords.txt, spellings.txt, mapping-ISOLatin1Accent.txt, admin-extra.html, xslt, scripts.conf, synonyms.txt, update-script.js, velocity, elevate.xml, admin-extra.menu-bottom.html, schema.xml, clustering][zk: 139.199.201.162:2191(CONNECTED) 2] ls /configs/myconf

[zk: 139.199.201.162:2191(CONNECTED) 4] quit

Quitting...

2018-10-08 13:39:42,611 [myid:] - INFO  [main:[email protected]] - Session: 0x10019ea05c50002 closed

2018-10-08 13:39:42,612 [myid:] - INFO  [main-EventThread:[email protected]] - EventThread shut down for session: 0x10019ea05c50002

第七步:修改tomcat/bin目录下的catalina.sh 文件,关联solr和zookeeper。

把此配置添加到配置文件中:(位置随意)

JAVA_OPTS="-DzkHost=zookeeper开放端口1,ip地址:zookeeper开放端口2,ip地址:zookeeper开放端口3

第八步:启动每个tomcat实例。要包装zookeeper集群是启动状态。

第九步:访问集群。

文件结构如下图:

接着访问各tomcat(自己写批处理)

出现云标

第十步:创建新的Collection进行分片处理。

http://IP地址:端口号/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2

重新进入页面

至此,solr集群搭建完毕。