solrcloud 高可用集群搭建

本文详细介绍了在CentOS6.4环境下,如何搭建SolrCloud集群,包括CentOS的用户和IP配置、JDK的安装、Zookeeper集群的配置以及Solr与Tomcat的部署,强调了集群配置、端口修改和关联Zookeeper的重要性,并提供了Java操作SolrCloud的示例。
摘要由CSDN通过智能技术生成

一、环境准备

    CentOS-6.4-x86_64-minimal.iso

    jdk-6u45-linux-i586-rpm.bin

    zookeeper-3.4.5.tar

    solr-4.6.0.zip

    服务器6台: 192.168.56.11- SolrCloud.Shard1.Leader

             192.168.56.12-SolrCloud.Shard2.Leader

      192.168.56.13-SolrCloud.Shard3.Leader

             192.168.56.14-SolrCloud.Shard1.Replica

             192.168.56.15-SolrCloud.Shard2.Replica

             192.168.56.16-SolrCloud.Shard3.Replica

二、环境安装

1、CentOs 6.4安装

1)配制用户

安装完后配制用户solrcloud  密码: solrcloud  

[root@localhost ~]#   useradd solrcloud

[root@ localhost ~]#   passwd solrcloud

2)修改当前机器名称

      vi etc/sysconfig/network

         HOSTNAME=SolrCloud.Shard1.Leader

3)修改当前机器ip

vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

HWADDR=08:00:27:5C:8C:BD

TYPE=Ethernet

UUID=4fc0a398-f82b-49e5-8657-27bf5b260444

ONBOOT=yes

NM_CONTROLLED=yes

IPADDR=192.168.56.11

NETMASK=255.255.255.0

重启服务 service network restart

4)上传安装包(工具上传WinSCP)

   创建文件夹 mkdir /solrcloud

   赋写权限 chmod 777 /solrcloud    

   上传所需安装软件包到/solrcloud

     

2、jdk安装

   默认jdk安装会报错,64位系统安装32位jdk报的错

 

需要安装glic , yum install glibc.i686

安装完后再安装jdk 进入/solrcloud目录

./jdk-6u45-linux-i586-rpm.bin

3、zookeeper集群安装

(集群安装测试时以ip为例说明,正式上线后可以配主机名称)

1)解压zookeeper 安装包

 tar -zxvf zookeeper-3.4.5.tar.gz

2)进入zookeeper-3.4.5文件夹,创建data 和log 

   创建目录并赋于写权限

   指定zookeeper的数据存放目录和日志目录

3)拷贝zookeeper配制文件zoo_sample.cfg

拷贝zookeeper配制文件zoo_sample.cfg并重命名zoo.cfg 

cp /solrcloud/zookeeper-3.4.5/conf/zoo_sample.cfg  /solrcloud/zookerper-3.4.5/conf/zoo.cfg

4)修改zoo.cfg

  加入 dataDir=/solrcloud/zookeeper-3.4.5/data

        dataLogDir=/solrcloud/zookeeper-3.4.5/log

 server.1=192.168.56.11:2888:3888

 server.2=192.168.56.12:2888:3888

    server.3=192.168.56.13:2888:3888

 server.4=192.168.56.14:2888:3888

 server.5=192.168.56.15:2888:3888

    server.6=192.168.56.16:2888:3888

zoo.cfg配制完后如下:

# The number of milliseconds of each tick

tickTime=2000

# The number of ticks that the initial

# synchronization phase can take

initLimit=10

# The number of ticks that can pass between

# sending a request and getting an acknowledgement

syncLimit=5

# the directory where the snapshot is stored.

# do not use /tmp for storage, /tmp here is just

# example sakes.

dataDir=/solrcloud/zookeeper-3.4.5/data

dataLogDir=/solrcloud/zookeeper-3.4.5/log

# the port at which the clients will connect

clientPort=2181

#

# Be sure to read the maintenance section of the

# administrator guide before turning on autopurge.

#

# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance

#

# The number of snapshots to retain in dataDir

#autopurge.snapRetainCount=3

# Purge task interval in hours

# Set to "0" to disable auto purge feature

#autopurge.purgeInterval=1

server.1=192.168.56.11:2888:3888

server.2=192.168.56.12:2888:3888

server.3=192.168.56.13:2888:3888

server.1=192.168.56.11:2888:3888

server.2=192.168.56.12:2888:3888

server.3=192.168.56.13:2888:3888

server.4=192.168.56.14:2888:3888

server.5=192.168.56.15:2888:3888

server.6=192.168.56.16:2888:3888

5)进入data文件夹 建立对应的myid文件

 例如server.1=192.168.56.11 data文件夹下的myid文件内容为1

6)zookeeper-3.4.5文件夹到其他机器

7)开启zookeeper的端口

/sbin/iptables -I INPUT -p tcp --dport 2181 -j ACCEPT

/sbin/iptables -I INPUT -p tcp --dport 2888 -j ACCEPT

/sbin/iptables -I INPUT -p tcp --dport 3888 -j ACCEPT

/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT   --顺便启用tomcat 8080端口

/etc/rc.d/init.d/iptables save #将更改进行保存

/etc/init.d/iptables restart #重启防火墙以便改动生效

8)启zookeeper 

进入bin

./zkServer.sh start

查看集群状态

./zkServer.sh status   刚启动可能会有错误,集群中其他节点一并起来后就正常了

4、solr集群安装

1)在solrcloud下新建solrhome,并赋于读写权限

2)将上传的solr.4.6.0压缩包解压缩,

       tar -zxvf solr-4.6.0.tgz

3)将solr.4.6.0/dist/solr-4.6.0.war 复制到/solrcloud/solrhome 并重命为solr.war

       cp /solrcloud/solr-4.6.0/dist/solr-4.6.0.war /solrcloud/solrhome/solr.war

4)将上传的tomcat解压缩

  tar -zxvf apache-tomcat-6.0.29.tar.gz

5)进入tomcat bin目录,启动tomcat

      cd /solrcloud/apache-tomcat-6.0.29/bin  进入bin目录

      ./startup.sh  启动tomcat  此时会在tomcat下的conf文件夹下多出一个目录Catalina

      cd /solrcloud/apache-tomcat-6.0.29/conf/Catalina/localhost

      新建solr.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8" ?>

<Context docBase="/solrcloud/solrhome/solr.war" debug="0" crossContext="false" >  

   <Environment name="solr/home"

    type="java.lang.String"

    value="/solrcloud/solrhome"

    override="true" />

</Context>

    docBase="/solrcloud/solrhome/solr.war" 指定为solrcloud/solrhome下复制出来solr的war包

6)停tomcat 再次启动tomcat, webapps 下边多了解压出来的solr文件夹

进入solr/WEB-INF/ 下修改web.xml

  <!--

    <env-entry>

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

       <env-entry-value>/put/your/solr/home/here</env-entry-value>

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

    </env-entry>

   -->

 改为 :

<env-entry>

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

       <env-entry-value>/solrcloud/solrhome</env-entry-value>

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

    </env-entry>

7)将/solrcloud/solr-4.6.0/example/solr 文件夹下所有东西复制到 /solrcloud/solrhome

  cp  -r /solrcloud/solr-4.6.0/example/solr/*  /solrcloud/solrhome

8)复制solr-4.6.0/example/lib/ext下所有jar包到tomcat 的lib下

  cp /solrcloud/solr-4.6.0/example/lib/ext/*  /solrcloud/apache-tomcat-6.0.29/lib/

  复制 solr-4.6.0/example/resources/log4j.properties  到solr/WEB-INF/class

   如果没有class先创建class文件夹,并赋于写权限

  cp  /solrcloud/solr-4.6.0/example/resources/log4j.properties /solrcloud/apache-tomcat-6.0.29/webapps/solr/WEB-INF/class/

 

9)启动tomcat 访问 http://localhost:8080/solr 如图,至此单机版solr配制完成

   

10)配制集群

将zookeeper和tomcat关联

192.168.56.11台机修改tomcat 的 bin目录下catalina.sh文件在第二行加入

JAVA_OPTS="-Dbootstrap_confdir=/solrcloud/solrhome/collection1/conf -Dcollection.configName=myconf -DzkHost=192.168.56.11:2181,192.168.56.12:2181,192.168.56.13:2181,192.168.56.14:2181,192.168.56.15:2181,192.168.56.16:2181 -DnumShards=3"

192.168.56.12-16 , 5台机都修改tomcat 的 bin目录下catalina.sh文件在第二行加入

JAVA_OPTS="-DzkHost=192.168.56.11:2181,192.168.56.12:2181,192.168.56.13:2181,192.168.56.14:2181,192.168.56.15:2181,192.168.56.16:2181"

至此集群配制完毕

创建集合

http://192.168.56.11:8080/solr/admin/collections?action=CREATE&name=guangzhou&numShards=3&replicationFactor=3

任何一个ip均可访问

http://192.168.56.11:8080/solr/#/~cloud 

 

Solr5.5.4+Zookeeper3.4.6+Tomcat8搭建SolrCloud集群

SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。SolrCloud 是基于Solr和Zookeeper的分布式搜索方案,具体拥有以下几个特色功能:

      1)集中式的配置信息
      2)自动容错
      3)近实时搜索
      4)查询时自动负载均衡

SolrCloud在搭建时,通过先搭建完一个Solr实例后,可以很容易地使用Zookeeper来做一个集群。我演示的安装步骤基于一台机器,所以采用伪集群的方式进行安装,如果是真正的生成环境,将伪集群的ip改下就可以了,步骤是一样的。

安装准备

  • JDK1.7以上
  • Solr5.5.4部署包(solr-5.5.4.tgz 大约130M)
  • Tomcat8部署包 (apache-tomcat-8.5.16.tar.gz)
  • zookeeper-3.4.6部署包(zookeeper-3.4.6.tar.gz)

Solr5.5.4单机部署与Tomcat8

你可以在Solr5.5.4单机部署找到如何将Solr5.5.4部署在Tomcat8环境下.

Solr5.5.4+Zookeeper3.4.6+Tomcat8集群部署

如果已经成功部署了一个Solr,那么接下来的工作也不会太难。下面的集群部署基于已经成功部署过单个Solr。如果你还没有部署过Solr或者还没有部署过单机版的,讲义看一下Solr5.5.4单机部署里面第二部分,通过tomcat部署Solr,然后再来部署集群。

具体zookeeper集群部署我在这里就不讲啦,如果不会部署zookeeper集群的可以看一下看一下zookeeper集群部署。本次部署详情信息如下:

机器

192.168.219.11(node11),192.168.219.12(node12),192.168.219.13(node13),192.168.219.14(node14)

系统

Red Hat Enterprise Linux Server release 6.5 (Santiago)  

系统内核

2.6.32-358.el6.x86_64

solr版本

Solr-5.5.4

zookeeper版本

3.4.6

zookeeper地址(ip:port)

node11:2282,node12:2282,node13:2282

tomcat版本

8.5.16

solr+tomcat地址

/home/anu/tomcat8

solr_home(core)地址

/home/anu/tomcat8/solr_home,   node11:8888(leader),node12:8888(follower),node13:8888(follower),node14:8888(follower)

1、我早之前已经在一台机器上那装过单机的Solr(鄙人是在node11机器上安装的,通过tomcat+Solr实现,放在tomcat8中),所以直接来改动它里面的配置就可以啦。

2、为了保证端口不冲突,我们来改一下tomcat端口还有Solr端口

  修改./tomcat8/conf/server.xml,将下面几个地方的端口尽量改动一下不要和别的地方冲突

 

 

 这些地方本人已经改过啦,注意上面那个8888端口是tomcat发布端口,这个后面要用到,需要设置成Solr端口

 

3、配置tomcat8的启动项,配置zookeeper和各个tomcat进行关联:首先确定leader节点,本人使用node11作为leader,其余的作为follower,现在先配置leader的tomcat目录下(我的是tomcat8)的bin/catalina.sh中的最上面添加一行 

JAVA_OPTS="-Djetty.port=8888 -Dbootstrap_confdir=/home/anu/tomcat8/solr_home/ustcinfo/conf -Dcollection.configName=solr_home -DzkHost=node11:2282,node12:2282,node13:2282 -DnumShards=2"

8888:必须要和我们上面配置的tomcat端口一致,

/home/anu/tomcat8/solr_home/ustcinfo/conf:这个是我的Solr_home 的路径,这个下面我们单机安装的时候已经说了这个的由来,下面马上我再说一下

solr_home:是我的solr_home名字,可以随便取,但是尽量和你的solr_home文件名一样,便于查看

node11:2282,node12:2282,node13:2282:这是我的zookeeper集群,前面已经安装并且已经启动

2:表示有两个shard节点

下面大致解释一下这些参数含义:

  • -Djetty.port Solr的发布端口,需要和tomcat端口一致,使用jetty.port是响应Solr内部jetty关联
  • -Dbootstrap_confdir ZooKeeper需要准备一份集群配置的副本,这个参数是告诉SolrCloud这些配置是放在哪里,同时作为整个集群共用的配置文件。
  • -Dcollection.configName 指定你的配置文件上传到zookeeper后的名字,建议和你所上传的核心名字一致,这样容易识别。
  • -DzkRun 在Solr中启动一个内嵌的zooKeeper服务器,该服务会管理集群的相关配置。
  • -DzkHost 跟上面参数的含义一样,允许配置一个ip和端口来指定用哪个Zookeeper服务器进行协调。
  • -DnumShards=2 配置需要把你的数据分开到多少个shard中
  • -Dbootstrap_conf=true 将会上传solr/home里面的所有数据到zookeeper的home/data目录,也就是所有的core将被集群管理,本次我未使用这个参数。

这里面配好之后,我们再说说我配置的Solr_home路径由来。

  首先,我们在单机中已经将./solr-5.5.4/server/solr 下面所有的东西都拷贝到./tomcat8/solr_home目录下。我们进入到./tomcat/sole_home 目录下

  其次,在这个路径下新建一个作为core使用的文件夹,名字可以随意起,我创建名字为ustcinfo的文件夹

  然后将./tomcat8/solr_home/configsets/basic_configs 目录下的所有文件都拷贝到我们刚刚新建的ustcinfo 下面

mkdir ustcinfo

cp -r configsets/basic_configs/* ustcinfo/
cd ustcinfo/
ls
cd conf
pwd

 

  

  在这就可以看到我们配置的Solr_home地址,用于后面同一创建Solr集合识别core使用。

 

特别需要注意:上面添加JAVA_OPTS时针对leader节点的,其余三台机器的JAVA_OPTS如下:

JAVA_OPTS="-Djetty.port=8888 -Dcollection.configName=solr_home -DzkHost=node11:2282,node12:2282,node13:2282 -DnumShards=2"

这个配置后面会提到

 

4、修改solr.xml的jetty.port参数值为tomcat的端口

  打开./tomcat8/solr_home/solr.xml 文件,修改jetty.port参数值为tomcat的端口(即我们前面配置的8888

 

 

5、将配置好的tomcat+solr拷贝到其他三台机器node12、node13、node14,

scp -r tomcat8 anu@node12:/home/anu/

scp -r tomcat8 anu@node13:/home/anu/

scp -r tomcat8 anu@node14:/home/anu/

6、修改其他三台follower的tomcat8启动项,

  分别进入node12、node13、node14机器,通过vim tomcat8/bin/catalina.sh 打开catalina.sh文件,将tomcat启动项的 -Dbootstrap_confdir=/home/anu/tomcat8/solr_home/ustcinfo/conf 删掉,最终JAVA_OPTS参数如下

JAVA_OPTS="-Djetty.port=8888 -Dcollection.configName=solr_home -DzkHost=node11:2282,node12:2282,node13:2282 -DnumShards=2"

 

  7、分别启动4台机器的tomcat8+Solr

  使用命令tomcat8/bin/catalina.sh start 或者tomcat8/bin/startup.sh 启动四台tomcat8

8、通过访问页面查看Sole配置

  在浏览器中打开http://192.168.219.11:8888/solr/index.html#/,进入后点击左边导航栏的cloud查看

 

 

 

Java操作solrCloud

在java中操作solrCloud和操作solr一样,都是通过solrJ,只不过初始化solrServer对象时有点不同:

简单示例:

@Test

public void testAddDocument() throws Exception {

// zkHost:zookeeper的地址列表

String zkHost = "192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183";

// 创建一个集群的连接,应该使用CloudSolrServer创建

CloudSolrServer solrServer = new CloudSolrServer(zkHost);

// 设置一个defaultCollection属性

solrServer.setDefaultCollection("collection2");

// 创建一个文档对象

SolrInputDocument document = new SolrInputDocument();

// 向文档中添加域

document.setField("id", "solrCloud01");

document.setField("item_title", "测试商品01");

document.setField("item_price", 123);

// 把文件内容写入索引库

solrServer.add(document);

// 提交

solrServer.commit();

}

测试结果:

如果要在Spring中使用集群版本solr,配置如下:

该配置和单机版的配置同时只能存在一份,不然会报不唯一异常!

<!-- 集群版solrJ,参数为zookeeper的地址列表 -->

<bean id="cloudSolrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">

<constructor-arg index="0" value="192.168.25.130:2181,192.168.25.130:2182,192.168.25.130:2183"/>

<property name="defaultCollection" value="collection2"/>

</bean>

然后在代码中通过:

@Autowired

private SolrServer solrServer;

自动注入即可使用,注入后的使用方法和单机版的是一样的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值