SolrCloud 的搭建、使用

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


搜索引擎:Elasticsearch、Solr、Lucene

1.SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模、容错、分布式索引和检索能力时使用 SolrCloud。
  当一个系统的索引数据量少的时候是不需要使用 SolrCloud的,当索引量很大,搜索请求并发很高,这时需要使用 SolrCloud 来满足这些需求。
  SolrCloud 是基于 Solr 和Zookeeper的分布式搜索方案,它的主要思想是使用 Zookeeper作为集群的配置信息中心。
  它有几个特色功能:
	1.集中式的配置信息
	2.自动容错
	3.近实时搜索
	4.查询时自动负载均衡

2.SolrCloud系统架构

	1.物理结构:三个 Solr 实例( 每个实例包括两个 Core),组成一个 SolrCloud。
	2.逻辑结构
		索引集合包括两个 Shard(shard1 和 shard2),shard1 和 shard2 分别由三个 Core 组成,
		其中一个 Leader 两个 Replication,Leader 是由 zookeeper 选举产生,zookeeper 控制每个shard上三个 Core 的索引数据一致,解决高可用问题。
		用户发起索引请求分别从 shard1 和 shard2 上获取,解决高并发问题。

		1.Collection  
			Collection 在 SolrCloud 集群中是一个逻辑意义上的完整的索引结构。
			它常常被划分为一个或多个 Shard(分片),它们使用相同的配置信息。
			比如:针对商品信息搜索可以创建一个 collection。
			collection=shard1+shard2+....+shardX
		2.Core 
			每个 Core 是 Solr 中一个独立运行单位,提供 索引和搜索服务。
			一个 shard 需要由一个Core 或多个 Core 组成。由于 collection 由多个 shard 组成所以 collection 一般由多个 core 组成。
		3.Master 或 Slave
			Master 是 master-slave 结构中的主结点(通常说主服务器),Slave 是 master-slave 结构中的从结点(通常说从服务器或备服务器)。
			同一个 Shard 下 master 和 slave 存储的数据是一致的,这是为了达到高可用目的。
		4.Shard
			Collection 的逻辑分片。每个 Shard 被化成一个或者多个 replication,通过选举确定哪个是 Leader。

1.分片的目的:可以进行拓容。比如一个分片对应一个2个G的core,那么增加一个分片,可以对应多的一个2个G的core
2.core:一个core代表Solr中的一个数据库“collection1”
3.Master 是 master-slave 结构中的主节点(主服务器),Slave 是 master-slave 结构中的从节点(从服务器)。
  在同一个 分片(Shard) 下 master主节点 和 slave从节点 存储的数据是相同的,这是为了达到高可用性。

 


搭建SolrCloud

1.搭建要求:
	Zookeeper 作为集群的管理工具
	1.集群管理:容错、负载均衡。
	2.配置文件的集中管理
	3.集群的入口:
		需要实现 zookeeper 高可用,需要搭建zookeeper集群。建议是奇数节点。需要三个 zookeeper 服务器。
		搭建 solr 集群需要 7 台服务器(搭建伪分布式,建议虚拟机的内存 1G 以上):
		需要三个 zookeeper 节点
		需要四个 tomcat 节点 

2.环境准备
	CentOS-6.5-i386-bin-DVD1.iso
	jdk-7u72-linux-i586.tar.gz
	apache-tomcat-7.0.47.tar.gz
	zookeeper-3.4.6.tar.gz
	solr-4.10.3.tgz

3.步骤:
	1.搭建Zookeeper集群(我们在上一小节已经完成)
	2.将已经部署完solr 的tomcat的上传到linux
	3.在linux中创建文件夹 /usr/local/solr-cloud  创建4个tomcat实例

启动集群

1.启动每个 tomcat 实例。要保证 zookeeper 集群是启动状态。
  如果你想让某个文件夹下都可以执行,使用以下命令实现:chmod -R 777 solr-cloud
2.访问集群:地址栏输入 192.168.25.140:8180/solr 或 192.168.25.140:8280/solr
	    都可以看到Solr集群版的界面,下图表示的是,一个主节点 ,三个从节点。 


 SpringDataSolr连接SolrCloud

在SolrJ中提供一个叫做CloudSolrServer的类,它是SolrServer的子类,用于连接solrCloud。 
它的构造参数就是zookeeper的地址列表,另外它要求要指定defaultCollection属性(默认的 collection名称)。
我们现在修改springDataSolrDemo工程的配置文件 ,把原来的solr-server注销,替换为CloudSolrServer。
指定构造参数为地址列表,设置默认 collection名称。

	<!-- solr服务器地址
		<solr:solr-server id="solrServer" url="http://192.168.25.129:8080/solr" />
	 -->	
	<bean id="solrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
		<constructor-arg value="192.168.25.140:2181,192.168.25.140:2182,192.168.25.140:2183" />
		<property name="defaultCollection" value="collection1"></property>
	</bean>

 集群分片设置

创建新的 Collection 进行分片处理。
在浏览器输入以下地址,可以按照我们的要求  创建新的Collection: 
	http://192.168.25.140:8180/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
	参数:
		action=CREATE:表示创建新的 Collection集合
		name=collection2:表示创建新的 Collection集合的名字是collection2
		numShards=2:代表的是SolrCloud的逻辑结构。表示创建的shard逻辑分片数为2。 
		replicationFactor=2:代表的是SolrCloud的物理结构。表示创建的shard逻辑分片数的备份数为2,那么其中一个为主,另外一个为备。 


搭建Solr集群:SolrCloud

1.搭建 zookeeper 集群:建议是奇数节点,则至少需要三个 zookeeper 服务器。
2.搭建 solr 集群:此处搭建伪集群,都在同一台虚拟机上,首先开启四个 tomcat。
  环境准备:apache-tomcat-7.0.47.tar.gz 和 solr-4.10.3.tgz

3.mkdir /usr/local/solr-cloud
4./root/apache-tomcat-7.0.52/webapps/ 目录下 已部署好 solr-4.10.3工程,那么把tomcat拷贝4份:
	cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat-1
  	cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat-2
  	cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat-3
  	cp -r apache-tomcat-7.0.52 /usr/local/solr-cloud/tomcat-4

5.mkdir /usr/local/solrhomes
6./root 目录下 配置好 solrhome,然后把 solrhome文件夹 拷贝4份:
	cp -r solrhome /usr/local/solrhomes/solrhome-1
	cp -r solrhome /usr/local/solrhomes/solrhome-2
	cp -r solrhome /usr/local/solrhomes/solrhome-3
	cp -r solrhome /usr/local/solrhomes/solrhome-4

7.修改solrhome的绝对路径:
	1./usr/local/solr-cloud/tomcat-1/webapps/solr-4.10.3/WEB-INF/web.xml:
		 修改 <env-entry-value>/usr/local/solrhomes/solrhome-1</env-entry-value>
	2./usr/local/solr-cloud/tomcat-2/webapps/solr-4.10.3/WEB-INF/web.xml:
		 修改 <env-entry-value>/usr/local/solrhomes/solrhome-2</env-entry-value>
	3./usr/local/solr-cloud/tomcat-3/webapps/solr-4.10.3/WEB-INF/web.xml:
		 修改 <env-entry-value>/usr/local/solrhomes/solrhome-3</env-entry-value>
	4./usr/local/solr-cloud/tomcat-4/webapps/solr-4.10.3/WEB-INF/web.xml:
		 修改 <env-entry-value>/usr/local/solrhomes/solrhome-4</env-entry-value>

8.修改每个tomcat/conf/server.xml下的三个端口:
	1.<Server port="xxxx" shutdown="SHUTDOWN">:用来关闭TOMCAT服务的端口。  
	2.<Connector port="xxxx" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />:
		负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
	3.<Connector port="xxxx" protocol="AJP/1.3" redirectPort="8443" />:
		负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。

	4./usr/local/solr-cloud/tomcat-1/conf/server.xml:
		<Server port="8105" shutdown="SHUTDOWN">   
		<Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
		<Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
	5./usr/local/solr-cloud/tomcat-2/conf/server.xml:
		<Server port="8205" shutdown="SHUTDOWN">   
		<Connector port="8280" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
		<Connector port="8209" protocol="AJP/1.3" redirectPort="8443" />
	6./usr/local/solr-cloud/tomcat-3/conf/server.xml:
		<Server port="8305" shutdown="SHUTDOWN">   
		<Connector port="8380" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
		<Connector port="8309" protocol="AJP/1.3" redirectPort="8443" />
	7./usr/local/solr-cloud/tomcat-4/conf/server.xml:
		<Server port="8405" shutdown="SHUTDOWN">   
		<Connector port="8480" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
		<Connector port="8409" protocol="AJP/1.3" redirectPort="8443" />

9.修改每个tomcat/bin/catalina.sh:
	1.目的:让每个Tomcat找到zookeeper集群中的每个zookeeper
	2.catalina.sh中配置位置:把此配置修改到第234行
	3.catalina.sh中修改的配置内容的格式:JAVA_OPTS="-DzkHost=zookeeperIP:端口"
	4.catalina.sh中修改的配置内容:JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"
	5.JAVA_OPTS:用来设置JVM相关运行参数的变量,此配置用于在tomcat启动时找到 zookeeper集群中的任意一个zookeeper
	6.此处zookeeper集群所在的虚拟机:192.168.25.128
	7.此处每个Tomcat所在的虚拟机:192.168.25.133
	8./usr/local/solr-cloud/tomcat-1/bin/catalina.sh:
 		JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"
	9./usr/local/solr-cloud/tomcat-2/bin/catalina.sh:
 		JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"
	10./usr/local/solr-cloud/tomcat-3/bin/catalina.sh:
 		JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
	44./usr/local/solr-cloud/tomcat-4/bin/catalina.sh:
 		JAVA_OPTS="-DzkHost=192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183"

10.每个solrhome目录下的solr.xml文件中配置tomcat的IP和端口,用于solr和tomcat连接:
   目的:solr集群中的每个solr关联一个tomcat。
	1./usr/local/solrhomes/solrhome-1/solr.xml
    		<str name="host">192.168.25.133</str>
   		<int name="hostPort">8180</int>
	2./usr/local/solrhomes/solrhome-2/solr.xml
    		<str name="host">192.168.25.133</str>
   		<int name="hostPort">8280</int>
	3./usr/local/solrhomes/solrhome-3/solr.xml
    		<str name="host">192.168.25.133</str>
   		<int name="hostPort">8380</int>
	4./usr/local/solrhomes/solrhome-4/solr.xml
    		<str name="host">192.168.25.133</str>
   		<int name="hostPort">8480</int>

   注意:每个solrhome目录下的solr.xml文件中还配置有<str name="hostContext">${hostContext:solr}</str>,
         表示访问的主机上下文的名称是solr,那么便要求tomcat/webapps目录下的solr项目名(文件夹名)必须是solr。	
	那么项目访问的solr服务器的地址便实际是192.168.25.133:8180/solr/collection1,默认访问的是collection1数据库。
 

11.使用 solr 中的 zkcli.sh工具 把 solrhome/collection1/conf配置目录 上传到 zookeeper集群中的每个zookeeper:
   目的:让 zookeeper 统一管理配置文件。 
	1.tar -zxvf solr-4.10.3.tgz.tgz
	2.cd solr-4.10.3/example/scripts/cloud-scripts 
	3.所执行命令的格式:./zkcli.sh -zkhost zookeeper的IP:端口 -cmd upconfig -confdir 任意某个solrhome下的collection1/conf配置目录 -confname myconf
   	  参数解释:
		-zkhost:指定zookeeper地址列表(IP:端口)
		-cmd:指定命令。upconfig 为上传配置的命令
		-confdir:solrhome下的collection1/conf配置目录
		-confname:配置名称
	4.执行命令之前保证zookeeper启动了
	5.所执行的命令:./zkcli.sh -zkhost 192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183 -cmd upconfig -confdir /usr/local/solrhomes/solrhome-1/collection1/conf -confname myconf
 
12.启动solr集群:
	1.首先启动每个 tomcat,要保证 zookeeper 集群是启动状态。
	2.启动每个tomcat,每个tomcat下的webapps都带有solr工程。
	3.cd /usr/local/solr-cloud/tomcat-1/bin
	  ./startup.sh
	4.cd /usr/local/solr-cloud/tomcat-2/bin
	  ./startup.sh
	5.cd /usr/local/solr-cloud/tomcat-3/bin
	  ./startup.sh
	6.cd /usr/local/solr-cloud/tomcat-4/bin
	  ./startup.sh
	7.必须重启zookeeper集群中的每个zookeeper 

13.输入格式 192.168.25.133:8180/solr工程名
   测试是否搭建成功:
	1.成功访问4个solr:192.168.25.133:8180/solr、192.168.25.133:8280/solr、192.168.25.133:8380/solr、192.168.25.133:8480/solr 查看是否打开成功
	2.查看4个solr中的“Cloud”,注意全部solr显示绿色:

	3.对4个solr中的 collection1数据库进行查询solr数据


 Spring Data Solr 连接 SolrCloud

在SolrJ中提供一个叫做CloudSolrServer的类,它是SolrServer的子类,用于连接solrCloud。 
它的构造参数就是zookeeper的地址列表,另外它要求要指定defaultCollection属性(默认的 collection名称)。
我们现在修改springDataSolrDemo工程的配置文件 ,把原来的solr-server注销,替换为CloudSolrServer。
指定构造参数为地址列表,设置默认 collection名称。

	<!-- solr服务器地址:192.168.25.133:8080/solr
		<solr:solr-server id="solrServer" url="http://192.168.25.133:8080/solr" />
	 -->	
	<bean id="solrServer" class="org.apache.solr.client.solrj.impl.CloudSolrServer">
		<!-- zookeeper集群中的每个zookeeper的IP地址:端口 -->
		<constructor-arg value="192.168.25.128:2181,192.168.25.128:2182,192.168.25.128:2183" />
		<property name="defaultCollection" value="collection1"></property>
	</bean>

1.只有当前war工程自身的pom.xml中配置有<profiles>的话,那么针对war工程不仅需要install -P“id标签值”,
  同样也需要使用tomcat7:run -P“id标签值”。
2.如果当前war工程自身的pom.xml中没有配置<profiles>的话,而war工程所依赖的jar工程中的pom.xml中配置有<profiles>的话,
  那么针对war工程只需要install 和 tomcat7:run 即可,无需加上 -P“id标签值”。


solr集群分片设置

1.创建新的 Collection 进行 新的分片处理:
	在浏览器输入以下地址,可以按照我们的要求创建新的Collection: 
  	执行语句:http://192.168.25.133:8180/solr/admin/collections?action=CREATE&name=collection1&numShards=2&replicationFactor=2
  	参数:
		action=CREATE:表示创建新的 Collection集合
		name=collection1:表示创建新的 Collection集合的名字是collection1
		numShards=2:代表的是SolrCloud的逻辑结构。表示创建的shard逻辑分片数为2。 
		replicationFactor=2:代表的是SolrCloud的物理结构。表示创建的shard逻辑分片数的备份数为2,那么其中一个为主,另外一个为备。

2.删除不用的 Collection:
	浏览器执行语句:http://192.168.25.133:8180/solr/admin/collections?action=DELETE&name=collection1
  	参数:
		action=CREATE:表示删除 Collection集合
		name=collection2:表示删除的 Collection集合的名字是collection1

3.此处我们先删除原来的collection1数据库,然后重新创建一个新的collection1数据库,并且同时进行新的分片设置。
	1.删除原来的collection1数据库:浏览器执行http://192.168.25.133:8180/solr/admin/collections?action=DELETE&name=collection1

	2.重新创建一个新的collection1数据库,并且同时进行新的分片设置:
		浏览器执行http://192.168.25.133:8180/solr/admin/collections?action=CREATE&name=collection1&numShards=2&replicationFactor=2

	3.给新的collection数据库重新存入solr数据,需要执行pinyougou-solr-util项目中的SolrUtil.java才能把mysql数据存入到solr中,
	  同时还需要修改applicationContext-solr.xml中的连接solr服务器的配置:
			1.给第一个solr的collection数据库重新存入solr数据:
				applicationContext-solr.xml:url="http://192.168.25.133:8180/solr/collection1_shard1_replica1"
			2.给第二个solr的collection数据库重新存入solr数据:
				applicationContext-solr.xml:url="http://192.168.25.133:8180/solr/collection1_shard1_replica2"
			3.给第三个solr的collection数据库重新存入solr数据:
				applicationContext-solr.xml:url="http://192.168.25.133:8180/solr/collection1_shard2_replica1"
			4.给第四个solr的collection数据库重新存入solr数据:
				applicationContext-solr.xml:url="http://192.168.25.133:8180/solr/collection1_shard2_replica2"

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

あずにゃん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值