1. 起因
- 由於歷史原因,公司的數據是持久化在HBase中,查詢是通過Solr來實現,這這樣的設計必然涉及到要把Hbase中的數據實時同步到Solr,但所有的服務都在一個同一個集群及每台機子都安裝了很多不同的服務,導致數據經常丟失,Solr分片也經常在Recovering、Down 狀態中游離,因此決定把Solr剝離出來,形成單獨的集群,給其它服務減壓。
2. 要求
- 保證數據不能丟失
- 切換期間業務能正常使用
- 切換失敗,可以回歸到舊的集群
3. 整體流程設計
- HBase Indexer 要同時往新舊集群同步數據,保證Hbase中的新加數據及時更新
4. 實施步驟
-
新集群操作
- 在新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
- 新建 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把舊的配置的配置文件拷貝到新集群,保證配置一致,以免出現莫名的錯誤。
-
舊集群操作
- 把新的集群配置到Host文件,千萬記住集群中的每台服務器都需要配置,不然在同步的過程中,會出現不能解析的情況。
- 在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
- 檢查新加入的任務是否為啟動狀態
./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個任務是否正在運行,如果沒有或者失敗,檢查修復
- 全量同步,由於是新加入的集群,需要第一次做全量同步,然后任務會自動增量同步,執行這個命令需要切換到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
注意觀察日志信息,如果沒有錯誤,繼續下面的操作
- 觀察增量同步,這個需要測試人員或者實施配合下,看是否新舊集群都能正常同步
5. 在整個測試及實施過程遇到的注意事項
- Hbase Index 只能跟Hbase安裝在同一個zk集群下,才能全量、增量同時正常工作
- 新加入的集群主機名要在舊的集群中的每台服務器上添加
- 添加新的任務,只需要-cp solr.zk 命令參數修改成新的zk集群即可,其它配置不需要修改
- 在執行全量同步時--hbase-indexer-zk 只需要設置本機
6. 參考文檔
在操作過程中也可以參考我以前的文章