1. 起因

  • 由于历史原因,公司的数据是持久化在HBase中,查询是通过Solr来实现,这这样的设计必然涉及到要把Hbase中的数据实时同步到Solr,但所有的服务都在一个同一个集群及每台机子都安装了很多不同的服务,导致数据经常丢失,Solr分片也经常在Recovering、Down 状态中游离,因此决定把Solr剥离出来,形成单独的集群,给其它服务减压。

2. 要求

  • 保证数据不能丢失
  • 切换期间业务能正常使用
  • 切换失败,可以回归到旧的集群

3. 整体流程设计

  • HBase Indexer 要同时往新旧集群同步数据,保证Hbase中的新加数据及时更新

4. 实施步骤

  • 新集群操作
  1. 在新Solr集群配置Host如下:
vim /etc/hosts
172.16.213.8 solrmaster s27
172.16.213.12 solrslave1 ss1
172.16.213.13 solrslave2 ss2
172.16.213.9 solrslave3 ss3
172.16.213.10 solrslave4 ss4
172.16.213.14 solrslave5 ss5
172.16.213.11 solrslave6 ss6
  1. 新建 Collection
./solr create_collection -c collection_coupon -n collection_coupon -shards 6 -replicationFactor 3 
-d /opt/lucidworks-hdpsearch/solr/server/solr/configsets/coupon_schema_configs/conf

可以通过scp把旧的配置的配置文件拷贝到新集群,保证配置一致,以免出现莫名的错误。

  • 旧集群操作
  1. 把新的集群配置到Host文件,千万记住集群中的每台服务器都需要配置,不然在同步的过程中,会出现不能解析的情况。
  2. 在Hbase Index 的安装服务器上添加新的Index任务,用来同步数据到旧的集群
./hbase-indexer add-indexer -n indexer_coupon_solr -c /opt/lucidworks-hdpsearch/hbase-indexer/demo/coupon_indexer_mapper.xml 
-cp solr.zk=solrslave1:2181,solrslave2:2181,solrslave3:2181,solrslave4:2181,solrslave5:2181,solrslave6:2181/solr -cp solr.collection=collection_coupon

这里要注意solr.zk 的设置,一定要设置为新加入solr集群的zk

  1. 检查新加入的任务是否为启动状态
./hbase-indexer list-indexers

remote_indexer_coupon
+ Lifecycle state: ACTIVE
+ Incremental indexing state: SUBSCRIBE_AND_CONSUME
+ Batch indexing state: INACTIVE
+ SEP subscription ID: Indexer_remote_indexer_coupon
+ SEP subscription timestamp: 2018-05-07T18:04:28.434+08:00
+ Connection type: solr
+ Connection params:
+ solr.zk = solrslave1:2181,solrslave2:2181,solrslave3:2181,solrslave4:2181,solrslave5:2181,solrslave6:2181/solr
+ solr.collection = collection_coupon
+ Indexer config:
940 bytes, use -dump to see content
+ Indexer component factory: com.ngdata.hbaseindexer.conf.DefaultIndexerComponentFactory
+ Additional batch index CLI arguments:
(none)
+ Default additional batch index CLI arguments:
(none)
+ Processes
+ 1 running processes
+ 0 failed processes

在Processes中,关键是否有1个任务是否正在运行,如果没有或者失败,检查修复

  1. 全量同步,由于是新加入的集群,需要第一次做全量同步,然后任务会自动增量同步,执行这个命令需要切换到hdfs用户下。
 su hdfs
hadoop jar /opt/lucidworks-hdpsearch/hbase-indexer/tools/hbase-indexer-mr-1.6-SNAPSHOT-job.jar
--conf /opt/lucidworks-hdpsearch/hbase-indexer/conf/hbase-site.xml --hbase-indexer-zk localhost:2181
--hbase-indexer-name indexer_coupon_solr --reducers 0

注意观察日志信息,如果没有错误,继续下面的操作

  1. 观察增量同步,这个需要测试人员或者实施配合下,看是否新旧集群都能正常同步

5. 在整个测试及实施过程遇到的注意事项

  1. Hbase Index 只能跟Hbase安装在同一个zk集群下,才能全量、增量同时正常工作
  2. 新加入的集群主机名要在旧的集群中的每台服务器上添加
  3. 添加新的任务,只需要-cp solr.zk 命令参数修改成新的zk集群即可,其它配置不需要修改
  4. 在执行全量同步时--hbase-indexer-zk 只需要设置本机

6. 参考文档

在操作过程中也可以参考我以前的文章

  1. Hbase常用操作
  2. Solr常用操作
  3. hbase-index常用操作

目前采用这样组合并不多,在整个剥离过程中遇到的问题能查到的资料并不多,所以决定记录下来,目前新的集群已经正式替换旧的集群,给其它业务减压,同时新的集群功能更单纯,更好扩展。欢迎有这方面的问题的同行一起交流。

我的QQ群(码农之家):53135235

Hbase到Solr数据同步及Solr分离实战的更多相关文章

  1. 5.hbase表新增数据同步之add_peer

    一.前提主从集群之间能互相通讯: 二.在cluster1上(源集群):  1.查看集群已开启的peers hbase(main):011:0> list_peers PEER_ID CLUSTE ...

  2. 【Canal】互联网背景下有哪些数据同步需求和解决方案?看完我知道了!!

    写在前面 在当今互联网行业,尤其是现在分布式.微服务开发环境下,为了提高搜索效率,以及搜索的精准度,会大量使用Redis.Memcached等NoSQL数据库,也会使用大量的Solr.Elastics ...

  3. 【Canal】数据同步的终极解决方案,阿里巴巴开源的Canal框架当之无愧!!

    写在前面 在当今互联网行业,尤其是现在分布式.微服务开发环境下,为了提高搜索效率,以及搜索的精准度,会大量使用Redis.Memcached等NoSQL数据库,也会使用大量的Solr.Elastics ...

  4. solr 简单搭建 数据库数据同步(待续)

    原来在别的公司负责过文档检索模块的维护(意思就是不是俺开发的啦). 所以就略微接触和研究了下文档检索. 文档检索事实上是全文检索.是通过一种技术把N多文档进行一定规律的分割归类,然后创建易于搜索的索引 ...

  5. Solr数据不同步

    Solr配置了集群,本地有253和254,2个独立的Solr服务.  同一个页面的图片,刷新2次,图片地址不一样,最后查明,后台数据源Solr1和Solr2的数据不一致.    第1步推测:本地缓存, ...

  6. 用solr DIH 实现mysql 数据定时,增量同步到solr

    基础环境: (二)设置增量导入为定时执行的任务: 很多人利用Windows计划任务,或者Linux的Cron来定期访问增量导入的连接来完成定时增量导入的功能,这其实也是可以的,而且应该没什么问题. 但 ...

  7. HBase数据同步ElasticSearch该程序

    ElasticSearch的River机械 ElasticSearch本身就提供了River机械,对于同步数据. 在这里,现在能找到的官方推荐River: http://www.elasticsear ...

  8. HBase数据同步到ElasticSearch的方案

    ElasticSearch的River机制 ElasticSearch自身提供了一个River机制,用于同步数据. 这里能够找到官方眼下推荐的River: http://www.elasticsear ...

  9. Solr系列四:Solr(solrj 、索引API 、 结构化数据导入)

    一.SolrJ介绍 1. SolrJ是什么? Solr提供的用于JAVA应用中访问solr服务API的客户端jar.在我们的应用中引入solrj: <dependency> <gro ...

随机推荐

  1. 使用webpack和react搭建项目

    看了N多博客,日志,一边迷茫一边摸索.本文记录流程.我怕自己忘了...并且修复了博客园首页推荐那个日志中遇到的bug 1.webstorm新建一个空白项目,比如webpack_demo 2.因为要用r ...

  2. How To Scan QRCode For UWP (3)

    这一节主要介绍如何去设置MediaCapture拍照的分辨率. MediaCapture 包含一个 VideoDeviceController对象,凭借它可以控制摄像头的很多设置,其中包括设置拍照的分 ...

  3. Centos 7 开启BBR

    # 升级内核 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh http://www.elrepo.org/elr ...

  4. Excel的合并解析

    相关文件我放到如下链接: http://files.cnblogs.com/files/DreamDrive/Excel%E5%90%88%E5%B9%B6%E8%A7%A3%E6%9E%90.rar ...

  5. Word在转PDF的过程中如何创建标签快速方便阅读(图文详解)

    不多说,直接上干货! 选择如下 成功! 欢迎大家,加入我的微信公众号:大数据躺过的坑        人工智能躺过的坑       同时,大家可以关注我的个人博客:    http://www.cnbl ...

  6. JavaScript -- Document-ElementsByName

    -----047-Document-ElementsByName.html----- <!DOCTYPE html> <html> <head> <meta ...

  7. salesforce 零基础学习(六十三)Comparable实现Object列表数据的自定义排序

    项目中通常有些需求为需要将某个sObject的数据列表按照某种规则排序显示到前台页面上,但是list上面的sort远远满足不了复杂的功能,此种情况需要自定义比较两个object大小的方法,所以需要创建 ...

  8. mysql-定时对表分区

    1, 分区 具体可见: http://blog.csdn.net/open_data/article/details/46893331 1, 分区类型: RANGE分区:基于属于一个给定连续区间的列值 ...

  9. Conditional特性用法

    说明:根据预处理标识符执行方法.Conditional 特性是 ConditionalAttribute 的别名,可应用于方法或属性类.相对于#if和#endif,更灵活更简洁和不易出错. 例如: # ...

  10. QT 手式编译步骤

    1: qmake -project 2: qmake 3: make 4: ./执行