目录
说明: 本篇所有curl操作是在终端中进行的, 可以省去curl和url中的引号, 在浏览器中访问, 效果更明显.
1 创建操作
1.1 创建collection
直接在浏览器的URL地址栏进行操作, 命令如下:
//localhost:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=3&replicationFactor=4
或者: 直接在终端的命令行中操作(注意curl之后的内容需要加单引号或双引号):
curl '//172.16.11.96:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=3&replicationFactor=4'
上述方式创建的Collection中, Shard和Replica由Solr自动分配, 不能手动选择具体的数据存放路径、实例存放路径.
1.2 创建core
手动指定实例存放路径和数据存放路径:
curl '//localhost:8080/solr/admin/cores?action=CREATE&name=my_collection-shard1-replica1&instanceDir=/usr/solr/my_collection-shard1-replica1&dataDir=/data_solr/my_collection-shard1-replica1&collection=my_collection&shard=shard1'
curl '//localhost:8080/solr/admin/cores?action=CREATE&name=my_collection-shard1-replica2&instanceDir=/usr/solr/my_collection-shard1-replica2&dataDir=/data_solr/my_collection-shard1-replica2&collection=my_collection&shard=shard1'
这样可以创建出一个collection, 并自己指定该collection的shard和replica的所有配置项.
1.3 创建操作中的参数
(1) action: 要操作动作的名称;
(2) name: 要创建的集合名称;
(3) numShards: 集合分片的个数;
(4) replicationFactor(副本因子): 每个分片配备的副本数, 包括Leader和Replica;
(5) collection.configName: 创建新集合时所使用的配置文件的名称, 如果不指定, 就会默认使用name作为配置文件的名称.
(6) createNodeSet: 如果不提供该参数, 创建操作会将Replica分布到所有活跃的Solr节点上. 这个参数用于创建分片和副本的节点集合, 格式为: createNodeSet=node1:8081_solr,node2:8082_solr,node3:8083_solr
(7) maxShardsPerNode: 指定每个Node可以创建的Shard数, 默认为1.
a) 创建操作将生成
numShards * replicationFactor
个副本, 并尽可能均匀地分布在所有活跃的Node上;b) 为了保证高可用, 同一个Solr节点上不能存在同一Shard的多个副本;
c) 如果
maxShardsPerNode * nodeNum < numShards * replicationFactor
, CREATE操作将失败, 报错信息如下:
org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Cannot create collection mycollection. Value of maxShardsPerNode is 3, and the number of live nodes is 3. This allows a maximum of 9 to be created. Value of numShards is 3 and value of replicationFactor is 4. This requires 12 shards to be created (higher than the allowed number)
2 删除操作
(1) 删除collection:
collections的API不支持UNLOAD操作;
删除操作将直接删除指定的collection, 包括其目录文件.
curl '//localhost:8080/solr/admin/collections?action=DELETE&name=collection1&indent=true'
name: 将被删除的集合的名称;
indent=true: 格式化(有缩进)显示响应结果.
(2) 卸载core:
cores的API不支持DELETE操作;
卸载操作将卸载指定的collection_shard_replica, 并不会删除目录文件.
curl '//localhost:8080/solr/admin/cores?action=UNLOAD&core=collection1_shard1_replica2&deleteIndex=true&indent=true'
(3) 删除shard:
curl '//localhost:8080/solr/admin/collections?action=DELETESHARD&shard=shard1&collection=collection1'
3 加载操作
(1) 重新加载collection:
collections的API不支持LOAD操作;
被卸载了的core并不会被RELOAD进来.
curl '//localhost:8080/solr/admin/collections?action=RELOAD&name=collection1&indent=true'
name: 将被重新加载的集合的名称.
(2) 加载core:
cores的API不支持RELOAD操作;
可以LOAD某一个collection, 但被卸载了的core不能被LOAD进来;
可以LOAD某一个指定的core, 但被卸载了的core也不能被LOAD进来.
curl '//localhost:8080/solr/admin/cores?action=LOAD&core=collection1_shard1_replica2&indent=true'
4 查看操作
(1) 查看集群的Cloud data:
此操作亦可通过浏览器的URL查看, 格式化响应结果, 更加清晰:
curl '//localhost:8080/solr/zookeeper?wt=json&detail=true&path=/clusterstate.json'
(2) 查看集群中的所有core:
curl '//localhost:8080/solr/admin/collections?action=LIST'
(3) 查看集群的健康状况:
curl '//localhost:8080/solr/admin/collections?action=CLUSTERSTATUS'
可以查看到Shard的路由、活跃状态、副本状态等信息.
5 操作集合别名(操作成功, 但未查出区别)
Solr允许用户创建独立的指向一个或多个真实集合的虚拟集合, 可以在运行时修改别名.
(1) 创建或修改别名:
curl '//localhost:8080/solr/admin/collections?action=CREATEALIAS&name=alias&collections=collection1&indent=true'
用来修改的别名应该只映射一个独立的集合, 读取的别名能映射一个或多个集合.
(2) 移除存在的别名:
curl '//localhost:8080/solr/admin/collections?action=DELETEALIAS&name=alias&indent=true'
6 切割分片
curl '//localhost:8080/solr/admin/collections?action=SPLITSHARD&collection=mycollection&shard=shard2&indent=true'
collection: 集合的名称;
shard: 将被切割的分片ID, 必须存在, 且当前Collection的shard个数必须大于1个(已验证).
(1) 该特性发布于Solr4.3, 测试结果如图:
①
SPLITSHARD
命令不能用于使用了自定义哈希的集群, 因为这样的集群没有一个明确的哈希范围. 它只用于具有plain或compositeid路由的集群;② 该命令将指定的shard的切割成 两个新的具有相同数据的分片, 并根据新分片的路由范围切割父分片 (被切割的shard) 中的文档. 新分片将被命名为
xxx_0
和xxx_1
;③ 一旦新分片被成功创建, 它们就会被立即激活, 同时父分片也将被暂停 —— 新的读写请求就不会被发送到父分片中了, 而是直接路由到新的切割生成的新分片中;
④ 该特征能够保证无缝切割和无故障时间: 父分片数据不会被删除, 在切割操作完成之前, 父分片将继续提供读写请求, 直到切割完成.
切割分片后, 再使用DELETESHARD
命令删除被切割的原始Shard, 就能保证数据不冗余.
注意:
SolrCloud不支持对索引到其他Shard上的数据的动态迁移:
—— 通过切割分片实现SolrCloud的扩容, 只会对切割操作之后、路由的哈希范围仍然属于原分片的数据进行扩容.
7 更新集群的配置
集群会发生变化的就是collection的配置, 因此当配置文件发生变化后就应该使用命令更新ZooKeeper中的配置信息. 对此, Solr提供了很好的运维工具:
7.1 将配置文件上传到ZooKeeper中
需要的jar包:
$SOLR_HOME/example/lib/ext/*
以及 Solr项目的WEB-INF/lib/*
, 这里已经将ext下的jar包拷贝到了WEB-INF/lib
目录下, 便捷很多.
cd /data/solr-cloud/tomcat/display/solr/WEB-INF/lib
下述一长串是一条命令, 为了便于查看, 使用了反斜杠(\)来断句, 如果使用中出现问题, 可将反斜杠(\)删除, 并删除所有的换行, 然后回车执行.
# 注意本地路径, 以及../classes/log4j.properties文件的路径
java -classpath .:* \
-Dlog4j.configuration=file:../classes/log4j.properties \
org.apache.solr.cloud.ZkCLI -cmd upconfig \
-zkhost 10.0.20.50:2181,10.0.20.51:2181,10.0.20.52:2181 \
-confdir /data/solr-cloud/tomcat/solrhome/collection1/conf \
-confname myconf2
建议: 将配置文件单独存放, 比如: 我这里将整个example/solr/collection1/conf
存放至/data/solr-cloud/tomcat
下, 之后执行配置文件的更新:
java -classpath .:* \
-Dlog4j.configuration=file:../classes/log4j.properties \
org.apache.solr.cloud.ZkCLI -cmd upconfig \
-zkhost 10.0.20.50:2181,10.0.20.51:2181,10.0.20.52:2181 \
-confdir /data/solr-cloud/tomcat/conf \
-confname myconf
7.2 将ZooKeeper中的配置文件与Collection相关联
cd /data/solr-cloud/tomcat/display/solr/WEB-INF/lib
java -classpath .:* \
-Dlog4j.configuration=file:../classes/log4j.properties \
org.apache.solr.cloud.ZkCLI -cmd linkconfig \
-collection mycollection -confname myconf \
-zkhost 10.0.20.50:2181,10.0.20.51:2181,10.0.20.52:2181
注意: 配置文件若被删除, 将会导致ZooKeeper中的配置文件被同步删除, 从而在建立collection时将出现问题.
可关闭Tomcat服务与ZooKeeper服务, 删除ZooKeeper目录下的配置文件的版本信息, 然后再次启动ZooKeeper更新配置文件, 最后启动Tomcat服务继续测试.
参考资料
版权声明
作者: ma_shoufeng(马瘦风)
出处: 博客园 马瘦风的博客
您的支持是对博主的极大鼓励, 感谢您的阅读.
本文版权归博主所有, 欢迎转载, 但请保留此段声明, 并在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.
注:www2014.aspxhtml.com转载自cnblogs,若看不到图片,请移步来源网址查看。
via://www.cnblogs.com/shoufeng/p/10569644.html