阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

solrCloud+Tomcat+Zookeeper集群配置

138次阅读
没有评论

共计 12961 个字符,预计需要花费 33 分钟才能阅读完成。

概述:

SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,它的主要思想是使用 Zookeeper 作为集群的配置信息中心。

它有几个特色功能:

1)集中式的配置信息

2)自动容错

3)近实时搜索

4)查询时自动负载均衡

安装 zookeeper

上面也说了 SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,所有要部署 solrCloud+tomcat+zookeeper 的集群,必须先安装 zookeeper

安装环境:

Liux: CentOS release 6.4

JDK:1.7.0_55

因为我研究的是 solr 最新的版本,所以研究的是 solr4.8.0 然后 solr4.8.0 必须跑在 jdk1.7 以上的版本

1、zookeeper 是个什么玩意?

答:顾名思义 zookeeper 就是动物园管理员,他是用来管 Hadoop(大象)、Hive(蜜蜂)、pig(小猪) 的管理员,Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper: 是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目;

2、zookeeper 伪集群安装

因为我演示的这套安装是单机版的安装,所以采用伪集群的方式进行安装,如果是真正的生成环境,将伪集群的 ip 改下就可以了,步骤是一样的,学会了伪集群安装,真正生产的多环境安装不会,那是不可能的一件事情。

第一步:下载最新的 zooper 软件:http://www.apache.org/dyn/closer.cgi/zookeeper/

solrCloud+Tomcat+Zookeeper 集群配置

Ubuntu 14.04 安装分布式存储 Sheepdog+ZooKeeper  http://www.linuxidc.com/Linux/2014-12/110352.htm

CentOS 6 安装 sheepdog 虚拟机分布式储存  http://www.linuxidc.com/Linux/2013-08/89109.htm

ZooKeeper 集群配置 http://www.linuxidc.com/Linux/2013-06/86348.htm

使用 ZooKeeper 实现分布式共享锁 http://www.linuxidc.com/Linux/2013-06/85550.htm

分布式服务框架 ZooKeeper — 管理分布式环境中的数据 http://www.linuxidc.com/Linux/2013-06/85549.htm

ZooKeeper 集群环境搭建实践 http://www.linuxidc.com/Linux/2013-04/83562.htm

ZooKeeper 服务器集群环境配置实测 http://www.linuxidc.com/Linux/2013-04/83559.htm

ZooKeeper 集群安装 http://www.linuxidc.com/Linux/2012-10/72906.htm

Zookeeper3.4.6 的安装 http://www.linuxidc.com/Linux/2015-05/117697.htm

第二步:为了测试真实我在我 linux 上面部署三个 zookeeper 服务

1. 创建 zookeeper 的安装目录 

2.[root@localhost solrCloud]# mkdir /usr/solrcould

将下载的 zookeeper-3.3.6.tar.gz 复制到该目录下,同时在 /usr/solrcould 目录下新建三个文件夹:如下所示:

1.[root@localhost solrcoulud]# ls 

2.service1  service2  servive3  zookeeper-3.3.6.tar.gz

然后在每个文件夹里面解压一个 zookeeper 的下载包,并且还建了几个文件夹,总体结构如下:

1.[root@localhost service1]# ls 

2.data  datalog  logs  zookeeper-3.3.6

首先进入 data 目录,创建一个 myid 的文件,里面写入一个数字,比如我这个是 server1, 那么就写一个 1,server2 对应 myid 文件就写入 2,server3 对应 myid 文件就写个 3 然后进入 zookeeper/conf 目录,如果是刚下过来,会有 3 个文件,configuration.xml, log4j.properties,zoo_sample.cfg, 我们首先要做的就是在这个目录下创建一个 zoo.cfg 的配置文件,当然你可以把 zoo_sample.cfg 文件改成 zoo.cfg,配置的内容如下所示:

service1 的 zoo.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service1/data
dataLogDir=/usr/solrcould/service1/datalog
# the port at which the clients will connect
clientPort=2181
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890

service2 的 zoo.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service2/data
dataLogDir=/usr/solrcould/service2/datalog
# the port at which the clients will connect
clientPort=2182
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890

service3 的 zoo.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service3/data
dataLogDir=/usr/solrcould/service3/datalog
# the port at which the clients will connect
clientPort=2183
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890

参数说明:

tickTime:zookeeper 中使用的基本时间单位, 毫秒值.

initLimit: zookeeper 集群中的包含多台 server, 其中一台为 leader, 集群中其余的 server 为 follower。initLimit 参数配置初始化连接时, follower 和 leader 之间的最长心跳时间. 此时该参数设置为 5, 说明时间限制为 5 倍 tickTime, 即 5 *2000=10000ms=10s.

syncLimit: 该参数配置 leader 和 follower 之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为 2, 说明时间限制为 2 倍 tickTime, 即 4000ms.

dataDir: 数据存放目录. 可以是任意目录. 但是我喜欢这么干

dataLogDir: log 目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和 dataDir 相同的设置

clientPort: 监听 client 连接的端口号.

server.X=A:B:C 其中 X 是一个数字, 表示这是第几号 server. A 是该 server 所在的 IP 地址. B 配置该 server 和集群中的 leader 交换消息所使用的端口. C 配置选举 leader 时所使用的端口. 由于配置的是伪集群模式, 所以各个 server 的 B, C 参数必须不同.

配置说明:

需要注意的是 clientPort 这个端口如果你是在 1 台机器上部署多个 server, 那么每台机器都要不同的 clientPort,比如我 server1 是 2181,server2 是 2182,server3 是 2183,dataDir 和 dataLogDir 也需要区分下。

最后几行唯一需要注意的地方就是 server.X 这个数字就是对应 data/myid 中的数字。你在 3 个 server 的 myid 文件中分别写入了 1,2,3,那么每个 server 中的 zoo.cfg 都配 server.1,server.2,server.3 就 OK 了。因为在同一台机器上,后面连着的 2 个端口 3 个 server 都不要一样,否则端口冲突,其中第一个端口用来集群成员的信息交换,第二个端口是在 leader 挂掉时专门用来进行选举 leader 所用。

到这里 zookeeper 的配置就这么配玩了,你没有看错,就是这么简单!

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-03/128915p2.htm

第四步:当然是启动 zookeeper

进入 zookeeper-3.3.2/bin 目录中,./zkServer.sh start 启动一个 server, 这时会报大量错误?其实没什么关系,因为现在集群只起了 1 台 server,zookeeper 服务器端起来会根据 zoo.cfg 的服务器列表发起选举 leader 的请求,因为连不上其他机器而报错,那么当我们起第二个 zookeeper 实例后,leader 将会被选出,从而一致性服务开始可以使用,这是因为 3 台机器只要有 2 台可用就可以选出 leader 并且对外提供服务 (2n+ 1 台机器,可以容 n 台机器挂掉)。

[root@bogon bin]# sh zkServer.sh start  #启动
JMX enabled by default
Using config: /usr/solrcould/service3/zookeeper-3.3.6/bin/../conf/zoo.cfg
Starting zookeeper … STARTED
[root@bogon bin]# sh zkServer.sh status #查看当前状态,他会报异常,不要紧,因为是集群,其他两台没有起来,无法进行相互连接,当然报错,启动另外两台就不会报错了!
JMX enabled by default
Using config: /usr/solrcould/service3/zookeeper-3.3.6/bin/../conf/zoo.cfg
Error contacting service. It is probably not running

进入不同的 zookeeper 的 bin,分别启动, 常用命令如下

 启动 ZK 服务:      sh zkServer.sh start
 查看 ZK 服务状态:  sh zkServer.sh status
 停止 ZK 服务:      sh zkServer.sh stop
 重启 ZK 服务:      sh zkServer.sh restart

3、补充单机配置,和实际集群配置

单机部署: 进入 zookeeper/conf 目录,如果是刚下过来,会有 3 个文件,configuration.xml, log4j.properties,zoo_sample.cfg, 这 3 个文件我们首先要做的就是在这个目录下创建一个 zoo.cfg 的配置文件,当然你可以把 zoo_sample.cfg 文件改成 zoo.cfg,配置的内容如下所示:

tickTime=2000 
dataDir=/Users/apple/zookeeper/data 
dataLogDir=/Users/apple/zookeeper/logs 
clientPort=4180

进入 zookeeper-3.3.2/bin 目录中,./zkServer.sh start 启动,单机便完成安装

实际集群部署:集群模式的配置和伪集群基本一致, 由于集群模式下, 各 server 部署在不同的机器上, 因此各 server 的 conf/zoo.cfg 文件可以完全一样.

下面是一个示例:

tickTime=2000 
initLimit=5 
syncLimit=2 
dataDir=/home/zookeeper/data 
dataLogDir=/home/zookeeper/datalog 
clientPort=4180
server.43=10.1.39.43:2888:3888
server.47=10.1.39.47:2888:3888 
server.48=10.1.39.48:2888:3888
需要注意的是, 各 server 的 dataDir 目录下的 myid 文件中的数字必须不同.

solr 集群部署

我的理解,其实安装 solrCloud 非常的简单,就是先安装 zookeeper 然后安装 solr 最后将 zookeeper 和 tomcat 进行关联就 ok 了,如此的简单。

第一步:准备软件

Jdk、tomcat 这些安装在我的文档里面是省略的,如果这两个东西都不会安装,你来安装 solr 集群,那就是非常扯淡的一件事情

再次提醒,如果是 solr4.8 或者以上的版本,记得把 jdk 升级到 1.7 以上,否则 tomcat 起不来。

第二步:在 tomcat 部署 solr, 可以参考:http://www.linuxidc.com/Linux/2016-03/128916.htm,参考上面的企业级安装

你可以参考下我的目录结构

[root@bogon solrcould]# ls
service1  service2  service3  tomcat1  tomcat2  tomcat3  tomcat4

这一步就是简单的在 4 个 tomcat 上面部署 solr,没有做其他任何操作,因为是在同一台机子上面的部署,请记得修改 tomcat 的端口号。

第三步:配置 zookeeper 和各个 tomcat 进行关联

修改 solr 的所在 tomcat 所在服务器, 在 ${tomcat_home}/bin/ 目录下修改 catalina.sh

在第一行添加:

这是我的实例:

tomcat1: 配置如下:

Java_OPTS=”$JAVA_OPTS -DzkHost=192.168.238.133:2181,192.168.238.133:2182,192.168.238.133:2183 -Dbootstrap_confdir=/usr/solrcould/tomcat1/display/solrhome/collection1/conf -Dcollection.configName=myconf  -DnumShards=3″

其他 tomcat: 配置如下:

JAVA_OPTS=”$JAVA_OPTS -DzkHost=192.168.238.133:2181,192.168.238.133:2182,192.168.238.133:2183 -DnumShards=3″

参数说明:

-DzkRun  在 Solr 中启动一个内嵌的 zooKeeper 服务器,该服务会管理集群的相关配置。单机版(测试)使用,如果是集群,用下面的 -DzkHost 来替换,含义一样

例如:

JAVA_OPTS=”$JAVA_OPTS -DzkRun  -Dbootstrap_conf=true -DnumShards=2″

-DzkHost 跟上面参数的含义一样,允许配置一个 ip 和端口来指定用那个 zookeeper 服务器进行协调

例如:

JAVA_OPTS = “$JAVA_OPTS
-DzkHost=192.168.56.11:2181,192.168.56.12:2181,192.168.56.13:2181
-Dbootstrap_conf=true
-DnumShards=2″

 -Dbootstrap_confdir:zooKeeper 需要准备一份集群配置的副本,所以这个参数是告诉 SolrCloud 这些    配置是放在哪里。同时作为整个集群共用的配置文件

-Dcollection.configName 是在指定你的配置文件上传到 zookeeper 后的名字,建议和你所上传的核心名字一致,这样容易识别,当然你也可以在满足规范的情况下自己起名。

-bootstrap_conf=true 将会上传 solr/home 里面的所有数据到 zookeeper 的 home/data 目录, 也就是所有的 core 将被集群管理

-DnumShards=2 配置你要把你的数据分开到多少个 shard 中 

-Djetty.port =8080 这个端口跟你所在端口保持一致,这个就是 jetty 的监听端口,实现集群之间进行通信的,如果这个端口不这样配置,那么就是搜索不到数据

当然这个参数也可以再 solr/home/solr.xml 下面配置:如下所示

<solrcloud>
    <str name=”host”>${host:}</str>
    <int name=”hostPort”>${jetty.port:8080}</int>
    <str name=”hostContext”>${hostContext:solr}</str>
    <int name=”zkClientTimeout”>${zkClientTimeout:30000}</int>
    <bool name=”genericCoreNodeNames”>${genericCoreNodeNames:true}</bool>
  </solrcloud>

默认是 8983,如果在 catalina.sh 中指定了,会覆盖上图 solr.xml 中配置的

注意:

-DnumShards, -Dbootstrap_confdir 和 -Dcollection.configName 参数只需要在第一次将 Solr 运行在 SolrCloud 模式的时候声明一次。它们可以把你的配置加载到    zooKeeper 中;如果你在日后重新声明了这些参数重新运行了一次,将会重新加载你的配置,这样你在原来配置上所做的一些修改操作可能会被覆盖。所以官方推荐只在第一个 tomcat 里面加入这几个参数,其他集群的 tomcat 里面不加,启动的第一个 Solr 的端口号,它是你的 SolrCloud 集群的 overseer 节点

第四步:修改 jetty 的监听端口

修改 solr.xml, 该文件在你部署 solr 时自己定的工作目录,例如我的配置在如下地址:

<env-entry>
      <env-entry-name>solr/home</env-entry-name>
      <env-entry-value>usr/solrcould/tomcat4/display/solrhome</env-entry-value>
      <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>

改动如下:

<int name=”hostPort”>${jetty.port:8983}</int> 
        改为跟你所在 tomcat 的端口改成一样
<int name=”hostPort”>${jetty.port:8080}</int>

这个端口的作用:-Djetty.port =8080 这个端口跟你所在端口保持一致,这个就是 jetty 的监听端口,实现集群之间进行通信的,如果这个端口不这样配置,那么就是搜索不到数据

然后依次启动 tomcat

solrCloud+Tomcat+Zookeeper 集群配置

看到了没有,这就是启动了,一个有三个节点的集群

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-03/128915.htm

概述:

SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,它的主要思想是使用 Zookeeper 作为集群的配置信息中心。

它有几个特色功能:

1)集中式的配置信息

2)自动容错

3)近实时搜索

4)查询时自动负载均衡

安装 zookeeper

上面也说了 SolrCloud 是基于 Solr 和 Zookeeper 的分布式搜索方案,所有要部署 solrCloud+tomcat+zookeeper 的集群,必须先安装 zookeeper

安装环境:

Liux: CentOS release 6.4

JDK:1.7.0_55

因为我研究的是 solr 最新的版本,所以研究的是 solr4.8.0 然后 solr4.8.0 必须跑在 jdk1.7 以上的版本

1、zookeeper 是个什么玩意?

答:顾名思义 zookeeper 就是动物园管理员,他是用来管 Hadoop(大象)、Hive(蜜蜂)、pig(小猪) 的管理员,Apache Hbase 和 Apache Solr 的分布式集群都用到了 zookeeper;Zookeeper: 是一个分布式的、开源的程序协调服务,是 hadoop 项目下的一个子项目;

2、zookeeper 伪集群安装

因为我演示的这套安装是单机版的安装,所以采用伪集群的方式进行安装,如果是真正的生成环境,将伪集群的 ip 改下就可以了,步骤是一样的,学会了伪集群安装,真正生产的多环境安装不会,那是不可能的一件事情。

第一步:下载最新的 zooper 软件:http://www.apache.org/dyn/closer.cgi/zookeeper/

solrCloud+Tomcat+Zookeeper 集群配置

Ubuntu 14.04 安装分布式存储 Sheepdog+ZooKeeper  http://www.linuxidc.com/Linux/2014-12/110352.htm

CentOS 6 安装 sheepdog 虚拟机分布式储存  http://www.linuxidc.com/Linux/2013-08/89109.htm

ZooKeeper 集群配置 http://www.linuxidc.com/Linux/2013-06/86348.htm

使用 ZooKeeper 实现分布式共享锁 http://www.linuxidc.com/Linux/2013-06/85550.htm

分布式服务框架 ZooKeeper — 管理分布式环境中的数据 http://www.linuxidc.com/Linux/2013-06/85549.htm

ZooKeeper 集群环境搭建实践 http://www.linuxidc.com/Linux/2013-04/83562.htm

ZooKeeper 服务器集群环境配置实测 http://www.linuxidc.com/Linux/2013-04/83559.htm

ZooKeeper 集群安装 http://www.linuxidc.com/Linux/2012-10/72906.htm

Zookeeper3.4.6 的安装 http://www.linuxidc.com/Linux/2015-05/117697.htm

第二步:为了测试真实我在我 linux 上面部署三个 zookeeper 服务

1. 创建 zookeeper 的安装目录 

2.[root@localhost solrCloud]# mkdir /usr/solrcould

将下载的 zookeeper-3.3.6.tar.gz 复制到该目录下,同时在 /usr/solrcould 目录下新建三个文件夹:如下所示:

1.[root@localhost solrcoulud]# ls 

2.service1  service2  servive3  zookeeper-3.3.6.tar.gz

然后在每个文件夹里面解压一个 zookeeper 的下载包,并且还建了几个文件夹,总体结构如下:

1.[root@localhost service1]# ls 

2.data  datalog  logs  zookeeper-3.3.6

首先进入 data 目录,创建一个 myid 的文件,里面写入一个数字,比如我这个是 server1, 那么就写一个 1,server2 对应 myid 文件就写入 2,server3 对应 myid 文件就写个 3 然后进入 zookeeper/conf 目录,如果是刚下过来,会有 3 个文件,configuration.xml, log4j.properties,zoo_sample.cfg, 我们首先要做的就是在这个目录下创建一个 zoo.cfg 的配置文件,当然你可以把 zoo_sample.cfg 文件改成 zoo.cfg,配置的内容如下所示:

service1 的 zoo.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service1/data
dataLogDir=/usr/solrcould/service1/datalog
# the port at which the clients will connect
clientPort=2181
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890

service2 的 zoo.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service2/data
dataLogDir=/usr/solrcould/service2/datalog
# the port at which the clients will connect
clientPort=2182
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890

service3 的 zoo.cfg:

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=/usr/solrcould/service3/data
dataLogDir=/usr/solrcould/service3/datalog
# the port at which the clients will connect
clientPort=2183
server.1=192.168.238.133:2888:3888
server.2=192.168.238.133:2889:3889
server.3=192.168.238.133:2890:3890

参数说明:

tickTime:zookeeper 中使用的基本时间单位, 毫秒值.

initLimit: zookeeper 集群中的包含多台 server, 其中一台为 leader, 集群中其余的 server 为 follower。initLimit 参数配置初始化连接时, follower 和 leader 之间的最长心跳时间. 此时该参数设置为 5, 说明时间限制为 5 倍 tickTime, 即 5 *2000=10000ms=10s.

syncLimit: 该参数配置 leader 和 follower 之间发送消息, 请求和应答的最大时间长度. 此时该参数设置为 2, 说明时间限制为 2 倍 tickTime, 即 4000ms.

dataDir: 数据存放目录. 可以是任意目录. 但是我喜欢这么干

dataLogDir: log 目录, 同样可以是任意目录. 如果没有设置该参数, 将使用和 dataDir 相同的设置

clientPort: 监听 client 连接的端口号.

server.X=A:B:C 其中 X 是一个数字, 表示这是第几号 server. A 是该 server 所在的 IP 地址. B 配置该 server 和集群中的 leader 交换消息所使用的端口. C 配置选举 leader 时所使用的端口. 由于配置的是伪集群模式, 所以各个 server 的 B, C 参数必须不同.

配置说明:

需要注意的是 clientPort 这个端口如果你是在 1 台机器上部署多个 server, 那么每台机器都要不同的 clientPort,比如我 server1 是 2181,server2 是 2182,server3 是 2183,dataDir 和 dataLogDir 也需要区分下。

最后几行唯一需要注意的地方就是 server.X 这个数字就是对应 data/myid 中的数字。你在 3 个 server 的 myid 文件中分别写入了 1,2,3,那么每个 server 中的 zoo.cfg 都配 server.1,server.2,server.3 就 OK 了。因为在同一台机器上,后面连着的 2 个端口 3 个 server 都不要一样,否则端口冲突,其中第一个端口用来集群成员的信息交换,第二个端口是在 leader 挂掉时专门用来进行选举 leader 所用。

到这里 zookeeper 的配置就这么配玩了,你没有看错,就是这么简单!

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2016-03/128915p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计12961字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中