Hbase到Solr數據同步及Solr分離實戰


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM