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集群搭建完毕。