solr-cloud介绍&基于Zookeeper部署搭建&使用
1. solrCloud基本概念
1.1 什么是solrCloud
SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud。当一个系统的索引数据量少的时候是不需要使用SolrCloud,当索引量很大,搜索请求并发很高,这时需要使用SolrCloud来满足这些需求。
1.2 solrCloud的结构
SolrCloud为了降低单机的处理压力,需要由多台服务器共同来完成索引和搜索任务。实现的思路是将索引数据进行Shard(分片)拆分,每个分片由多台的服务器共同完成,当一个索引或搜索请求过来时会分别从不同的Shard的服务器中操作索引。
SolrCloud需要Solr基于Zookeeper部署,Zookeeper是一个集群管理软件,由于SolrCloud需要由多台服务器组成,由zookeeper来进行协调管理。
下图是一个SolrCloud应用的例子:
- 物理结构: 指定就是三台solr服务器(直白一点就是三个部署了solr的tomcat) 每个tomcat中都有两个core(索引库)
-
我们把整个集群看做了一个整体(一个大的索引库), 在这个索引库下有两个分片(也就是把索引库分成两部分), 每一个分片都有三个节点(对应就是物理结果中各个tomcat的索引库),其中一个为主节点,两个备份节点
整体部署的结构图:
1.3 solr集群中数据的读取及分裂流程(了解)
- 写数据的流程
- 读数据
- 副本分裂
2. zookeeper
ZooKeeper是一个分布式的,开放源码(apache)的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase、dubbox、kafka的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
- zookeeper在solrCloud中的作用 主要用来管理solr集群中的相关配置信息和集群的运行状态, 协助solr进行主节点的选举
准备工作
三台虚拟机: 安装好 jdk1.8 64位即可
vi /etc/hosts 添加如下内容: 192.168.72.141 node01 192.168.72.142 node02 192.168.72.143 node03 注意: 添加时, 前面ip地址一定是自己的三台linux的ip地址 切记不要搞错了 如果虚拟机设置过SSH,用以前的就可以
3. zookeeper集群搭建
准备工作:
三台虚拟机: 安装好 jdk1.8 64位即可
修改三台虚拟机的hosts文件: vi /etc/hosts 添加如下内容: 192.168.72.141 node01 192.168.72.142 node02 192.168.72.143 node03 注意: 添加时, 前面ip地址一定是自己的三台linux的ip地址 切记不要搞错了
3.1 上传zookeeper的压缩包(上传其中一台即可)
cd /export/software/ rz //此时选择zookeeper的压缩包进行上传
3.2 解压zookeeper到指定的目录
tar -zxf zookeeper-3.4.9.tar.gz -C /export/servers/ cd /export/servers/
3.3 修改zookeeper的配置文件
cd /export/servers/zookeeper-3.4.9/conf mv zoo_sample.cfg zoo.cfg vi zoo.cfg
修改后, 在配置文件的底部, 添加如下内容 server.1=node01:2887:3887 server.2=node02:2887:3887 server.3=node03:2887:3887 服务器相互通信的端口,投票选举的端口 更改后配置文件整体内容如下:(如果担心修改错误, 可以直接将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=/export/data/zk # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # 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 #zookeeper集群配置 server.1=node01:2887:3887 server.2=node02:2887:3887 server.3=node03:2887:3887
**** 处理完成后保存退出即可
3.4 将配置好的zookeeper发送到其他两台主机上
cd /export/servers/ scp -r zookeeper-3.4.9/ root@node02:$PWD //将zookeeper复制到node02的同级目录下 scp -r zookeeper-3.4.9/ root@node03:$PWD //将zookeeper复制到node03的同级目录下 执行scp指令之前,要确定node02 和node03是否有/export/servers目录 之前设置过ssh的话,在执行scp时不用输密码就可连接node02 node03
发送完成后,在其他两台主机查看, 是否已经成功接收到 cd /export/servers ll
3.5 分别在三台主机输入如下命令
node1:执行的命令 mkdir -p /export/data/zk echo "1" > /export/data/zk/myid cat /export/data/zk/myid //此命令用于查看此文件有没有正确写入 1 node2:执行的命令 mkdir -p /export/data/zk echo "2" > /export/data/zk/myid cat /export/data/zk/myid //此命令用于查看此文件有没有正确写入 2 node3:执行的命令 mkdir -p /export/data/zk echo "3" > /export/data/zk/myid cat /export/data/zk/myid //此命令用于查看此文件有没有正确写入 3
3.6 分别启动三台zookeeper(建议启动顺序 node1>>node2>>node3 依次启动)
cd /export/servers/zookeeper-3.4.9/bin/ ./zkServer.sh start
- node1: follower
- node2: 为leader
- node3: follower
3.7 zookeeper的选举机制(了解)
- 初始化集群: 采取投票机制, 选举过半即为leader
1. 当第一台(id=1),启动后, 由于目前自有自己,故会把票投给自己 2. 当第二台(id=2),启动后, 由于目前已经又二台启动, 这时候会将票投给id最大的机器, 此时三台中已经有二台启动, 数量过半, 第二台理所应当的成为了leader 3. 当第三台(id=3),启动后, 虽然id=3为最大, 但是由于leader已经产生, 故只能担任follower
- 当下一次在重新启动时, 又会恢复选举,此时谁的数据多, 谁为leader, 如果数据都一样, 那么看id谁最大,同时一般选举过半,就会产生leader
4. solrCloud搭建
4.1 将在window中部署的单机版solr上传到node01中
cd /export/software/ rz //选择资料中的solr.zip进行上传(此zip就是solr当天部署后的内容,包含solr-home和tomcat)
4.2 将zip进行解压到指定目录中
yum -y install unzip unzip solr.zip mv solr /export/servers/
4.3 修改tomcat的Catalina.sh的配置文件
cd /export/servers/solr/apache-tomcat-7.0.77/bin vi catalina.sh //注意此时修改的.sh的文件 为非.bat 添加如下内容:(此处后期还会进行修改, 目前只是为了测试单机版本能否在linux中运行) export "JAVA_OPTS=-Dsolr.solr.home=/export/servers/solr/solr-home"
***** 添加后保存退出即可
4.4 启动tomcat测试单机版本能否在linux中运行
注意: 由于是解压的是zip文件, tomcat中的.sh文件都没有任何的执行缺陷, 需要进行赋权限: chmod 777 /export/servers/solr/apache-tomcat-7.0.77/bin/* 启动tomcat: cd /export/servers/solr/apache-tomcat-7.0.77/bin/ ./startup.sh
**** 看到此页面,说明单机版本配置成功
成功后:将tomcat务必关机操作 ./shutdown.sh
**** 务必执行以上命令, 关闭tomcat
4.5 将solr-home中的data目录全部清空, 只保留一个索引库即可
cd /export/servers/solr/solr-home/ rm -rf collection2/ //删除多余的索引库, 只保留一个collection1即可 rm -rf collection1/data/
4.6 将solr的配置文件交给zookeeper进行管理
1. 需要先上传solr的安装包 cd /export/software/ rz 2. 解压solr的安装包 unzip solr-4.10.2.zip 3. 将solr安装包复制到/export/servers下 mv solr-4.10.2 /export/servers/ 4. 开始执行上传 cd /export/servers/solr-4.10.2/example/scripts/cloud-scripts/ //注意: 以下命令是一行 ./zkcli.sh -zkhost node01:2181,node02:2181,node03:2181 -cmd upconfig -confdir /export/servers/solr/solr-home/collection1/conf/ -confname solrconf
以下命令主要用于查看zookeeper中是否存在solr的配置文件: 可以不执行跳过 cd /export/servers/zookeeper-3.4.9/bin ./zkCli.sh ls /configs/solrconf
4.7 修改solr.xml配置文件
solr.xml是solr集群管理文件
cd /export/servers/solr/solr-home/ vi solr.xml
4.8 修改tomcat的Catalina.sh配置文件
cd /export/servers/solr/apache-tomcat-7.0.77/bin/ vi catalina.sh *** 修改如下内容 export "JAVA_OPTS=-Dsolr.solr.home=/export/servers/solr/solr-home //原来的内容 //以下为替换后的内容 注意: 这是一行内容, 复制时一起复制即可 export "JAVA_OPTS=-Dsolr.solr.home=/export/servers/solr/solr-home -DzkHost=node01:2181,node02:2181,node03:2181"
4.9 将solr目录发送到其他两台linux上(node02,node03)
cd /export/servers/ scp -r solr root@node02:$PWD scp -r solr root@node03:$PWD
在其他两台主机上查看, 是否接收成功:
4.10 依次启动三台solr即可
cd /export/servers/solr/apache-tomcat-7.0.77/bin/ ./startup.sh
5. solrCloud相关的管理命令
5.1 创建新集群(创建一个索引库)
http://192.168.72.141:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=3&maxShardsPerNode=8&property.schema=schema.xml&property.config=solrconfig.xml 接口参数说明: action: 表示执行的操作 CREATE 创建 name: 新集群的名称 numShards: 分片数 replicationFactor: 每个分片的节点数 maxShardsPerNode: 设置每个分片的最大节点数, 默认为1 property.schema: 指定使用的schema文件 (注意, 此文件必须在zookeeper上存在) property.config: 指定使用的solrConfig文件 (注意, 此文件必须在zookeeper上存在)
5.2 删除core命令
http://192.168.72.141:8080/solr/admin/collections?action=DELETE&name=collection1
5.3 查询所有的Core
http://192.168.72.141:8080/solr/admin/collections?action=LIST
5.4 显示core的状态
http://192.168.72.141:8080/solr/admin/collections?action=DELETE&name=collection1
5.5 分裂shard(扩展容量)
分裂: 就是将某个分片分成两个分片
注意: 一旦分裂后, 虽然原来的分片还可以提供服务, 但是已经不再保存数据, 会将数据保存到新的分裂后的分片
http://192.168.72.141:8080/solr/admin/collections?action=SPLITSHARD&collection=collection1&shard=shard1 参数说明: shard: 指定要分裂的分片
5.6 删除某个分片
注意: 删除的分片必须是已经被分裂的, 或者是已经无法提供服务的
http://192.168.72.141:8080/solr/admin/collections?action=DELETESHARD&shard=shard2&collection=collection2
6. 使用java连接集群, 完成基本的索引库操作
6.1 导入相关的pom依赖
<dependencies> <dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>4.10.2</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging-api</artifactId> <version>1.1</version> </dependency> </dependencies>
6.2 编写代码,完成CURD
//创建索引 @Test public void createIndexToSolrCloud() throws IOException, SolrServerException { //1. 创建连接solrCloud的服务对象 //String zkHost: 需要传递zookeeper集群的地址 String zkHost="192.168.72.141:2181,192.168.72.142:2181,192.168.72.143:2181"; CloudSolrServer cloudSolrServer = new CloudSolrServer(zkHost); //1.1 设置连接那个solr的索引库 cloudSolrServer.setDefaultCollection("collection2"); //1.2 可选的参数 //设置连接zookeeper的时间 cloudSolrServer.setZkClientTimeout(5000); //设置获取和solr的连接的时间 cloudSolrServer.setZkConnectTimeout(5000); //3. 执行获取连接 cloudSolrServer.connect(); //4. 添加索引操作 SolrInputDocument doc = new SolrInputDocument(); doc.addField("id","1"); doc.addField("title","你好,solrCloud"); cloudSolrServer.add(doc); //5. 执行提交 cloudSolrServer.commit(); }[/code]
//删除索引 @Test public void deleteIndexToSolrCloud() throws IOException, SolrServerException { //1. 创建连接solrCloud的服务对象 //String zkHost: 需要传递zookeeper集群的地址 String zkHost="192.168.72.141:2181,192.168.72.142:2181,192.168.72.143:2181"; CloudSolrServer cloudSolrServer = new CloudSolrServer(zkHost); //1.1 设置连接那个solr的索引库 cloudSolrServer.setDefaultCollection("collection2"); //1.2 可选的参数 //设置连接zookeeper的时间 cloudSolrServer.setZkClientTimeout(5000); //设置获取和solr的连接的时间 cloudSolrServer.setZkConnectTimeout(5000); //3. 执行获取连接 cloudSolrServer.connect(); //4. 添加索引操作 cloudSolrServer.deleteById("1"); //5. 执行提交 cloudSolrServer.commit(); }[/code]
//查询索引 @Test public void queryIndexToSolrCloud() throws IOException, SolrServerException { //1. 创建连接solrCloud的服务对象 //String zkHost: 需要传递zookeeper集群的地址 String zkHost="192.168.72.141:2181,192.168.72.142:2181,192.168.72.143:2181"; CloudSolrServer cloudSolrServer = new CloudSolrServer(zkHost); //1.1 设置连接那个solr的索引库 cloudSolrServer.setDefaultCollection("collection2"); //1.2 可选的参数 //设置连接zookeeper的时间 cloudSolrServer.setZkClientTimeout(5000); //设置获取和solr的连接的时间 cloudSolrServer.setZkConnectTimeout(5000); //3. 执行获取连接 cloudSolrServer.connect(); //4. 添加索引操作 SolrQuery query = new SolrQuery("*:*"); QueryResponse response = cloudSolrServer.query(query); SolrDocumentList documentList = response.getResults(); for (SolrDocument doc : documentList) { Object id = doc.get("id"); Object title = doc.get("title"); System.out.println(id+" "+title); } }[/code] 阅读更多
- [置顶] 基于zookeeper的solrCloud集群搭建
- 基于centos用zookeeper+solr搭建solrcloud
- solrcloud和zookeeper的搭建、使用、心得、教训
- solrcloud和zookeeper的搭建、使用、心得、教训
- Window环境下基于Tomcat & Zookeeper搭建Solr Cloud 5.1
- CentOS下用Tomcat+Zookeeper+Nginx+Solr完美搭建SolrCloud平台(四)
- windows下单机版的伪分布式solrCloud环境搭建Tomcat+solr+zookeeper
- windows下单机版的伪分布式solrCloud环境搭建Tomcat+solr+zookeeper
- windows下单机版的伪分布式solrCloud环境搭建Tomcat+solr+zookeeper
- Zookeeper-solrCloud-tomcat整合部署
- SolrCloud部署和使用手册
- Spark集群基于Zookeeper的HA搭建部署笔记
- SolrCloud使用教程、原理介绍
- solr与zookeeper搭建solrcloud分布式索引服务实例
- Spark集群基于Zookeeper的HA搭建部署
- Spark集群基于Zookeeper的HA搭建部署笔记
- CentOS下用Tomcat+Zookeeper+Nginx+Solr完美搭建SolrCloud平台(三)
- SolrCloud使用教程、原理介绍
- CentOS下用Tomcat+Zookeeper+Nginx+Solr完美搭建SolrCloud平台(二)
- 使用ZooKeeper管理solrCloud配置文件