使用mongo-connector,實時同步mongoDB數據至elasticsearch

python :3.6.0

ELasticsearch:5.5.0

MongoDB:3.0.6

mongo連接工具:NOSQLBooster

使用自帶的pip 安裝mongo-connector

注意:mongo-connector原理是使用Mongo的操作日誌oplog,所以必須配置Mongodb爲副本模式

mongo-connector replicates operations from the MongoDB oplog, so areplica set must be running before startup. For development purposes, you may find it convenient to run a one-node replica set
 

1、安裝mongodb---忽略

2、關閉運行的mongodb服務,以下多種方式

  • 使用net stop MongoDB
  • 登陸mongo  -->use admin  --> db.shutdownServer()
  • mongod --shutdown -dbpath /mongodb/data
  • 使用kill命令

      ①查看mongo相關進程

       ps -ef |grep mongo

       ②kill mongo進程

       備註:可以使用看kill命令,給mongod進程發送SIGINT或者SIGTERM信號,

即使用“kill -2 PID”或者“kill -15 PID”

建議不要使用“kill -9 pid”,因爲如果MongoDB運行在沒開啓日誌(--journal)的情況下,可能會造成數據損失

3、創建mongodb(如下創建一個名爲rs0,端口爲27017的實例)

mongod --port 27017 --dbpath "D:\mongo\data" --replSet rs0

4、連接mongo,啓動一個副本集

$mongo

>rs.initiate()   ---必須

>rs.status()    -----可查看狀態(不必須)

>rs.conf()        -----可查看配置(不必須)

>rs.add(HOST_NAME:PORT) --可添加副本集成員(不必須)

5、mongo-connector安裝

python -m pip install  elastic2_doc_manager(for ES2.X)

python -m pip install mongo-connector

6、開始同步

由於採用的單機使用127.0.0.1,執行下面命令:

mongo-connector  --auto-commit-interval=0 -m 127.0.0.1:27017 -t  127.0.0.1:9200 -d elastic2_doc_manager

命令解釋如下: 

    -m  Mongod實例的訪問路徑
 -t  Solr的BASE_URL
 -o  記錄oplog處理時間戳的文件
 -n  mongo命名空間,是監聽哪個database哪個collection的設置,以逗號分隔多個命名空間,這裏是監聽test庫中的test集合
 -d  就是處理doc的py文件
 

7、新開一個窗口,連接mongo,插入數據做測試

>use runoob

>db.col_02.insert({name:"renzhengfei", birth:"1954-03-21", sex:"man", company:"huawei"});

> db.col_03.insert({name:"renzhengfei", birth:"1954-03-21", sex:"man", company:"huawei"});

得到如下結果:

報錯:

urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='127.0.0.1', port=9200): Read timed out. (read timeout

解決辦法:找到文件:elastic2_doc_manager.py

$vim /usr/python36/lib/python3.6/site-packages/mongo_connector/doc_managers/elastic2_doc_manager.py

將文件中的self.elastic = Elasticsearch(hosts=url, **client_options)

修改爲self.elastic = Elasticsearch(hosts=url,timeout=200, **client_options)

重新執行mongo-connector同步代碼,測試成功:

 

以上測試中,在單機mongo添加數據後,需要約2分鐘作用才能在elasticsearch中刷新看到同步的數據,具體問題還待研究

參考鏈接:

https://blog.csdn.net/shiyaru1314/article/details/52468436

https://blog.csdn.net/laoyang360/article/details/51842822

http://www.bankaiyuan.com/t/209

https://blog.csdn.net/zhujq_icode/article/details/81318687

https://es.xiaoleilu.com/010_Intro/25_Tutorial_Indexing.html(Elasticsearch權威指南(中文版))

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章