最近的生活就像黄昏,感觉黎明太遥远,需要一个漫长的黑夜。自从接手其他组的项目以来,我带领三个新员工举步维艰。东西太多,细节太多,骨头怎么啃是个问题。记得7年前,我和大卫两个人搞BigData,什么经验都没有,windows service导20万的商品数据到cassandra,加班到半夜两点半。那个阶段有时候真想撂挑子让大卫一个人去干,但是最终还是告诉自己去哪里都会有这样那样的问题,不能逃避。当时公司有个小伙叫Ric,大数据方面的专家,他可以离线同步数据,啥意思,就是人家吃透了Cassandra数据文件的结构,只需要根据文件结构把物理文件生成好,放到Cassandra数据目录下面就行了,看看人家,再看看我们的处理方式,真的是不能比。后来Ric还研发了金丝雀,据说要比Aquiles快很多,后来由于种种原因,James也说我们不给力,后来把项目给了台湾。如今项目又回来了,我岂能又不给力?红灯不会永远是红灯,也许下一秒就是绿灯。
废话不多说,今天看一下CentOS上Cassandra集群的搭建。
第一步:准备WinSCP工具,MobaXterm工具,最好再有个文本编辑工具,比如VSCode之类的
第二步:下载tomcat 8.5.72,zookeeper 3.7.0,solr 7.3.1,jdk1.8以上版本
tomcat:https://tomcat.apache.org/download-80.cgi
solr:https://solr.apache.org/downloads.html
jdk:http://www.jdkdownload.com/index.html?download=jdk-8u181-linux-x64.tar.gz#download
zookeeper: https://downloads.apache.org/zookeeper/zookeeper-3.7.0/
第三步:linux环境变量配置,修改etc/profile,然后source /etc/profile使环境变量立即生效
第四步:先搭建zookeeper集群,关于zookeeper集群的搭建请参考我的上一篇文章:zookeeper集群搭建
第五步:将tomcat复制四份到/usr/local/solrcloud文件夹中,如下
命名为apache-tomcat01~04,复制好之后,我们需要修改端口号,以apache-tomcat01为例,我们修改server.xml配置文件中的端口号,xml文件路径/usr/local/solrcloud/apache-tomcat04/conf/server.xml
第一个端口
第二个端口改为8101
第三个端口改为8109
OK,最终四个tomcat全部改完后的端口号如下
tomcat01 | 8105 | 8101 | 8109 |
tomcat02 | 8205 | 8201 | 8209 |
tomcat03 | 8305 | 8301 | 8309 |
tomcat04 | 8405 | 8401 | 8409 |
ok,端口号至此就修改完了,这里我建议在WinSCP配置VSCode作为编辑工具直接修改,使用vi命令编辑有点痛苦。如下在文件上右键=>编辑=>配置,然后点击添加找到VSCode exe文件所在路径就行了,以后编辑的时候选项中就可以选择VSCode编辑文件。
第六步:将solr工程拷贝到tomcat目录的webapps目录下,如下从左边solr-webapp\webapp拷贝到右边apache tomcat webapps目录下的solr目录,
第七步:为这四个solr实例创建solr home,我们需要新建四个文件夹,solrhome1~4
solr home从哪里来呢,请看下面
把这几个文件copy过去就行了。然后我们需要对solr.xml进行修改,这里对于solrhome1对应tomcat01中的ip地址加端口
对于solrhome1它的host需要设置成tomcat01中的ip+端口,所以是8101端口,对于solrhome2就是8201以此类推。ok至此solr home就设置完成了。
第八步:既然solrhome已经创建完毕,那么tomcat中host的solr必须指向这些solrhome,以tomcat01为例,我们修改webapps/solr/WEB-INF下面的web.xml
把这里的solr home设置为solrhome1,同样的道理,tomcat02 webapps/solr/WEB-INF下面的web.xml中的solr home修改为solrhome2,以此类推,最后把四个都改完。
第九步:将配置文件上传至zookeeper集群,让zookeeper进行统一管理。因为我之前这里为这个技术站创建过一个solr的core,所以我就直接使用这个schema配置就行了。
<field name="ArticleId" type="delimited_payloads_string" indexed="true" required="true" stored="true"/> <field name="Content" type="text_general"/> <field name="Contents" type="string" indexed="true" required="true" stored="true"/> <field name="Tags" type="string" indexed="true" stored="true"/> <field name="Title" type="string" indexed="true" required="true" stored="true"/>
所以我们直接把这个conf文件夹下的配置上传至zookeeper,首先我们要切换到zkcli工具的目录下,这个目录在哪里呢,在你的solr解压缩以后的server/scripts/cloud-scripts下面。
ok,我们执行如下命令
./zkcli.sh -zkhost 172.26.233.95:2181,172.26.233.95:2182,172.26.233.95:2183 -cmd upconfig -confdir /root/bruce/solr-7.3.1/server/solr/new_core/conf -confname mysolr_zkconf
是否上传成功,我们只需要进入zookeeper集群看看就行了
[root@bruce solrcloud]# cd zookeeper01 [root@bruce zookeeper01]# cd bin [root@bruce bin]# ls README.txt zkCli.cmd zkEnv.cmd zkServer.cmd zkServer.sh zkSnapshotComparer.sh zkSnapShotToolkit.sh zkTxnLogToolkit.sh zkCleanup.sh zkCli.sh zkEnv.sh zkServer-initialize.sh zkSnapshotComparer.cmd zkSnapShotToolkit.cmd zkTxnLogToolkit.cmd [root@bruce bin]# ./zkCli.sh Connecting to localhost:2181 2021-11-18 01:11:02,916 [myid:] - INFO [main:Environment@98] - Client environment:zookeeper.version=3.7.0-e3704b390a6697bfdf4b0bef79e3da7a4f6bac4b, built on 2021-03-17 09:46 UTC
我们用zookeeper01的cli工具进到集群,然后使用命令ls /configs查看是否已经上传成功
看到没,已经上传成功了,名称就是我们执行上传命令中设定的名称mysolr_zkconf。
ok,至此已经大工告成80%了。
第十步:把solr和zookeeper的配置关联起来,怎么关联?修改tomcat01~04 bin目录下的catalina.sh文件,在如下位置加入JAVA_OPTS,是指zookeeper的集群ip
完成之后,启动四个tomcat,接下来就是见证奇迹的时刻,先搞两个节点,没有任何问题
/usr/local/solrcloud/apache-tomcat01/bin/startup.sh /usr/local/solrcloud/apache-tomcat02/bin/startup.sh
Schema没问题,读取的是zookeeper集群的配置
再看一下拓扑结构
再启动tomcat03,新建一个brucetest的collection,shared为2,replication为1,最终拓扑如下
注:如果中途出现solr地址请求404的错误,需要注意以下几点
关闭防火墙
修改tomcat目录下的conf/web.xml文件中的listings改为true,注释掉
<servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <init-param> <param-name>listings</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
注释掉solr/WEB_INF目录下web.xml文件中的如下配置
<!-- Get rid of error message <security-constraint> <web-resource-collection> <web-resource-name>Disable TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method>TRACE</http-method> </web-resource-collection> <auth-constraint/> </security-constraint> <security-constraint> <web-resource-collection> <web-resource-name>Enable everything but TRACE</web-resource-name> <url-pattern>/</url-pattern> <http-method-omission>TRACE</http-method-omission> </web-resource-collection> </security-constraint> -->
如果还是不行,那一定是缺少了jar包,需要copy一些jar包到solr\WEB-INF\lib文件夹中,具体操作流程如下
server/lib/ext目录下的所有jar包和dist下的solr-dataimporthandler、solr-dataimporthandler开头的jar包复制到tomcat下的solr项目的WEB-INF/lib目录下
server/lib下metrics开头的5个jar拷到tomcat\webapps\solr\WEB-INF\lib下
下一篇 CentOS kafka集群搭建