设为首页 收藏本站
查看: 1549|回复: 0

[经验分享] (转)淘淘商城系列

[复制链接]

尚未签到

发表于 2017-12-19 12:36:25 | 显示全部楼层 |阅读模式
  http://blog.csdn.net/yerenyuan_pku/article/details/72957201
  我们之前做的搜索使用的是Solr的单机版来实现的,正是由于我们现在商品数据量不多,才几千条而已。如果商品数据量变得非常庞大,比如说淘宝,淘宝上面的商品数量特别多,我们用一个单机版的Solr能实现吗?这里面就可能有问题了,一个是数据量特别庞大,每一个服务器存储容量是有上限的,一旦磁盘存不下了怎么办呢?这是不是有问题啊?还有就是由于淘宝的用户访问量很多,搜索的人也有很多,并发量很高,这种情况使用一个Solr服务,极有可能撑不住,这种时候怎么办呢?这种时候我们就需要使用Solr集群了。
  下面我们来搭建Solr集群,先来看下我们要搭建的集群架构图,如下图所示。
DSC0000.png

  zookeeper作为集群的管理工具,有以下几个作用:


  • 集群管理:容错、负载均衡。
  • 配置文件的集中管理。
  • 集群的入口。
  因为我们需要实现zookeeper的高可用,所以需要搭建zookeeper集群。zookeeper集群节点数量建议是奇数,因此至少需要三个zookeeper服务器。从上图可以看到Solr集群由三台注册中心(zookeeper集群)和四台部署有Solr的设备组成,这样看来搭建Solr集群需要7台服务器,我们要模拟一个7台服务器的话,需要7台虚拟机,7台虚拟机跑起来也很有一定难度,由于我们只是练习Solr集群搭建,使用一台虚拟机就可以了,一台虚拟机上面需要搭建3个zookeeper实例,4个Solr实例,每一个Solr实例就是一个tomcat,所以我们需要4个tomcat,3个zookeeper就行了。这里建议虚拟机的内存得给大一点,至少得给1个G。
  下面我们一步一步来搭建Solr集群。在搭建Solr集群之前,我们还得搭建zookeeper集群。

zookeeper集群搭建

新建一台虚拟机
  我们在安装单机版的Solr的时候就已经新建了一台虚拟机,因此这儿不必再新建一台虚拟机了,就使用原有的虚拟机就可以了。

安装JDK环境
  我们在安装单机版的Solr时就已经安装过JDK了,这儿我不想再多费口舌。而且关于如何在Linux系统上安装JDK,我的Linux系统上安装JDK这篇文章已经说的很清楚了。

搭建zookeeper集群
  首先,将zookeeper的压缩包上传到服务器上,我下载的zookeeper的压缩包如下图所示。
DSC0001.jpg

  关于怎样将文件上传到Linux系统上,我想我已经说的要吐了,所以这儿不再浪费口舌。与以往一样,我把zookeeper-3.4.6.tar.gz上传到了用户主目录(即root)下,如下图所示。
DSC0002.png

  接着,我们使用tar zxf zookeeper-3.4.6.tar.gz命令将zookeeper的压缩包解压缩到用户主目录(即root)下,解压完之后,可以看到解压后的zookeeper-3.4.6目录。
DSC0003.png

  紧接着先在/usr/local目录下面创建一个solr-cloud目录,然后我们把zookeeper-3.4.6往/usr/local/solr-cloud目录下面复制三份。
DSC0004.png

  进入/usr/local/solr-cloud目录中,可以看到有三个zookeeper实例。
DSC0005.png

  下面我们进入到zookeeper01目录中,使用mkdir data命令在该目录中创建一个data目录,创建成功之后使用ll命令查看一下zookeeper01目录,效果如下:
DSC0006.png

  然后使用echo 1 >> myid命令在data目录下创建一个myid文件,文件名就叫做“myid”,其内容就是每个实例的id,例如1、2、3。创建完myid文件之后,即可使用cat myid命令查看文件的内容。
DSC0007.png

  接着我们就要修改配置文件了。进入到zookeeper01/conf目录下,可以看到该目录下有个zoo_sample.cfg文件。
DSC0008.png

  紧接着我们需要使用mv zoo_sample.cfg zoo.cfg命令将zoo_sample.cfg文件改下名字,改为zoo.cfg,修改成功之后使用ll命令查看一下conf目录,效果如下:
DSC0009.png

  接下来我们就要修改zoo.cfg文件了,我们使用的命令是vim zoo.cfg,在打开的文件中修改”dataDir”的路径为我们上面创建的data的绝对路径,即/usr/local/solr-cloud/zookeeper01/data/,除此之外还要修改一下clientPort所指定的端口号,clientPort是客户端要连接zookeeper的端口号,现在我们要启动三个zookeeper实例,这个端口号不能冲突,所以需要改一下端口号。最后还得在文件的最后添加上三行配置,如下图所示。
DSC00010.png

  修改完zoo.cfg之后,按esc退出编辑模式,然后再输入:wq命令来保存并退出zoo.cfg,这样我们便配置好了。
  我们配置好zookeeper01这个实例之后,可以仿照zookeeper01实例的配置来配置好zookeeper02和zookeeper03这两个实例,这样三个zookeeper实例就配置好了。
  下面我们需要启动每个zookeeper实例。如果想启动每个zookeeper实例的话,不必每个实例一个个启动,这样太麻烦了,我们可以写个批处理程序来把它们一下子启动起来。在solr-cloud目录下使用vim start-zookeeper-all.sh命令来创建一个批处理文件,文件内容为:
  

cd /usr/local/solr-cloud/zookeeper01/bin  
./zkServer.sh start
  
cd /usr/local/solr-cloud/zookeeper02/bin
  
./zkServer.sh start
  
cd /usr/local/solr-cloud/zookeeper03/bin
  
./zkServer.sh start
  

  保存完该文件之后,使用ll命令查看一下solr-cloud目录,可以发现start-zookeeper-all.sh文件,如下图所示。
DSC00011.png

  但是这个批处理程序是不能运行的,所以你需要使用chmod u+x start-zookeeper-all.sh命令改一下它的权限,这样我们就可以使用./start-zookeeper-all.sh命令来启动每个zookeeper实例了。
DSC00012.png

  启动完每个zookeeper实例之后,我们先查看一下zookeeper01的状态,发现该节点的zookeeper的角色是follower,如下图所示。
DSC00013.png

  接着看下zookeeper02的状态,发现该节点的zookeeper角色是follower,如下图所示。
DSC00014.png

  最后看下zookeeper03的状态,发现该节点的zookeeper的角色是leader(领导者),这说明我们的zookeeper集群搭建成功了!
DSC00015.png


Solr集群搭建
  我们说过Solr要运行在tomcat中,所以这4个Solr节点也就是4个tomcat,要保证4个tomcat都能启动,它们的启动端口就不能冲突,所以我们需要将这4个tomcat的端口号给改一下。由于我们之前已经搭了一个Solr单机版,Solr本身就是一个web工程,我们就可以直接把单机版配好的那个Solr直接复制到我们这个集群里面,这样就可以用了。还有一个Solr单机版的那个solrhome我们也可以直接用,所以我们就不再直接配置了。
  下面我讲一下我本人是如何搭建Solr集群的。
  首先,将用户主目录(即root)下的apache-tomcat-7.0.47复制4份到/usr/local/solr-cloud/目录下,这样就能创建4个tomcat实例了,如下图所示。
DSC00016.png

  然后将这4个tomcat的端口号给改一下,使每个tomcat运行在不同的端口。我们先到tomcat01的conf目录下(/usr/local/solr-cloud/tomcat01/conf)修改server.xml文件,依次修改下面这三段配置的port的值,如下所示。


  • 将port的值由8005改为8105
    DSC00017.png


  • 将port的值由8080改为8180
    DSC00018.png


  • 将port的值由8009改为8109
    DSC00019.png


  按照上面步骤依次修改tomcat02、tomcat03和tomcat04这3个tomcat的端口号。改完之后,在solr-cloud目录下使用ll命令查看一下该目录,可以看到4个tomcat实例,如下图所示。
DSC00020.png

  接下来就要部署Solr的war包了,之前我们弄了一个Solr单机版,现在只须把单机版的Solr工程复制到集群中的tomcat中即可。具体做法是将/usr/local/solr/tomcat/webapps目录下的Solr工程分别复制4份到我们刚才那4个tomcat下面,如下图所示。
DSC00021.png

  接着为每个Solr实例创建一个对应的solrhome,使用单机版的solrhome即可。具体做法是将/usr/local/solr目录下的solrhome分别复制4份到/usr/local/solr-cloud目录下,如下图所示。
DSC00022.png

  我们可在solr-cloud目录下使用ll命令查看一下该目录,可以看到4个solrhome,如下图所示。
DSC00023.png

  solrhome有了之后,我们还须对solrhome里面的solr.xml配置文件进行修改。每个solrhome下都有一个solr.xml文件,修改该文件时我们修改的只有<solrcloud>里面的前两项——host和hostPort,host的值修改为我们solr的IP地址,hostPort修改为我们刚才为tomcat修改的端口号,其它不用动。
DSC00024.png

  以上是solrhome01里面的solr.xml文件的修改。同理我们还需要对solrhome02、solrhome03、solrhome04里面的solr.xml文件进行相关配置,下面是solrhome02里面的solr.xml文件的配置。
DSC00025.png

  下面是solrhome03里面的solr.xml文件的配置。
DSC00026.png

  下面是solrhome04里面的solr.xml文件的配置。
DSC00027.png

  solrhome配置好了之后,接下来需要关联每一个solrhome和Solr,即需要修改每一个Solr工程的web.xml文件。
DSC00028.png

  以上是tomcat01里面的web.xml文件的修改。同理我们还需要对tomcat02、tomcat03、tomcat04里面的web.xml文件进行相关配置。下面是tomcat02里面的web.xml文件的配置。
DSC00029.png

  下面是tomcat03里面的web.xml文件的配置。
DSC00030.png

  下面是tomcat04里面的web.xml文件的配置。
DSC00031.png

  这样,Solr服务就和自己的solrhome关联起来了。现在每一个Solr都对应一个solrhome,都有其自己的配置文件,如果我们要想保证每一个Solr实例的配置文件都一样的话,那么这个配置文件就应该集中管理,要集中管理我们应该使用谁来管理呢?这时候就需要用到zookeeper了,zookeeper集中管理配置文件,所以我们应该把配置文件上传到zookeeper。那好了,接下来考虑上传哪些配置文件?我们只须把solrhome/collection1/conf目录上传到zookeeper即可,上传任意solrhome中的conf目录都可以哟!其中conf目录下面最重要的两个配置文件是schema.xml和solrconfig.xml。我们只要上传一份就行了,这样的话,每个Solr要连接zookeeper,它就从zookeeper上读取这一份配置文件,每一个Solr实例都共用这一份就可以了。我们已经确定下来上传什么东西了,接下来就是怎么上传的问题了?我们可使用工具上传配置文件,先找到该工具所在的位置,如下图所示。
DSC00032.png

  下面我们使用该zkcli.sh脚本文件来执行上传操作,我们要上传的文件目录是/usr/local/solr-cloud/solrhome01/collection1/conf,执行上传操作的命令如下:
  

./zkcli.sh -zkhost 192.168.25.129:2181,192.168.25.129:2182,192.168.25.129:2183 -cmd upconfig -confdir /usr/local/solr-cloud/solrhome01/collection1/conf -confname myconf  

DSC00033.png

  上传成功后,我们到任何一台zookeeper上检验一下配置文件是否已经被上传上来了,我们到zookeeper01的bin目录下,如下图所示。
DSC00034.png

  接着使用命令./zkCli.sh来登录服务端,如下图所示。
DSC00035.png

  登录成功之后,使用命令ls /来查看下根目录下是否有configs目录,如下所示,发现已经有了。
DSC00036.png

  再看configs目录下是否有myconf目录,如下图所示,发现是有的。
DSC00037.png

  我们还可以看看myconf目录下的所有文件,这些都是我们刚才上传的配置文件,如下图所示。
DSC00038.png

  如果我们想退出,可使用quit命令。
  下面我们需要修改每一个tomcat下面的bin目录下的catalina.sh文件,关联Solr和zookeeper。
  首先,我们来到tomcat01的bin目录下,如下图所示,可以看到catalina.sh文件。
DSC00039.png

  修改catalina.sh文件,添加JAVA_OPTS=”-DzkHost=192.168.25.129:2181,192.168.25.129:2182,192.168.25.129:2183”,如下图所示。
DSC00040.png

  修改完tomcat01之后,我们再修改其它三个tomcat,添加的内容完全一样,我就不啰嗦了。
  现在我们的Solr知道zookeeper的地址了,Solr会主动连接zookeeper,把自己的一些状态信息汇报给zookeeper,比如说自己的ip地址和端口号等,zookeeper
  就能连接到tomcat了,它们之间就建立了一个通信关系。
  下面我们要启动每个tomcat实例,启动之前要确保zookeeper集群是启动状态。如果想启动每个tomcat实例的话,不必每个实例一个个启动,这样太麻烦了,我们可以写个批处理程序来把它们一下子启动起来。在solr-cloud目录下使用vim start-tomcat-all.sh命令来创建一个批处理文件,文件内容为:
  

/usr/local/solr-cloud/tomcat01/bin/startup.sh  
/usr/local/solr-cloud/tomcat02/bin/startup.sh
  
/usr/local/solr-cloud/tomcat03/bin/startup.sh
  
/usr/local/solr-cloud/tomcat04/bin/startup.sh
  

  保存完该文件之后,使用ll命令查看一下solr-cloud目录,可以发现start-tomcat-all.sh文件,如下图所示。
DSC00041.png

  但是这个批处理程序是不能运行的,所以你需要使用chmod u+x start-tomcat-all.sh命令改一下它的权限,这样我们就可以使用./start-tomcat-all.sh命令来启动每个tomcat实例了。
DSC00042.png

  我们可以使用tail -f /usr/local/solr-cloud/tomcat01/logs/catalina.out命令查看第一个tomcat的启动日志。
  为了防止防火墙给集群搭建带来不必要的麻烦,建议关掉防火墙,关闭防火墙的命令是service iptables stop,禁止防火墙重启的命令是chkconfig iptables off。如下图所示。
DSC00043.png

  下面我们就来访问Solr集群,我们访问任何一台Solr的首页,点击”Cloud”,可以看到如下图所示的效果,可知当前还没有进行分片处理。
DSC00044.png

  接下来我们创建新的Collection进行分片处理,使用的命令是http://192.168.25.129:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2,执行结果如下图所示。
DSC00045.png

  我们再看看Solr首页的云图,发现多了一个collection2的库,如下图所示。
DSC00046.png

  我们把没有分片的collection1删除掉,使用的命令是http://192.168.25.129:8180/solr/admin/collections?action=DELETE&name=collection1,如下图所示。
DSC00047.png

  我们再来查看Solr首页云图,发现现在只剩下有分片的collection2了,我们的SolrCloud集群搭建成功了!!!
DSC00048.png

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425696-1-1.html 上篇帖子: solr facet查询及solrj 读取facet数据[转] 下篇帖子: Windows系统环境下Solr之Java实战(一)搭建solr服务器并配置IK分词
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表