標籤:com mysq 複製 intro int hub 部署 官方 支援中文
我們產品中需要全文檢索索引的功能,後端資料存放區主要使用了 MySQL + MongoDB,而其中需要檢索的內容是在 MongoDB 中的。
MongoDB 本身是內建文本索引功能的,但是,不支援中文。術業有專攻,MongoDB 是資料存放區應用,那麼全文檢索索引就使用專業的全文檢索搜尋引擎吧。
預選的幾個選手有:Solr、Elasticsearch、Xapian、Sphinx、XunSearch。由於我們的資料量比較大,覺得現在單機已經有些力不從心了,MongoDB 也開始計劃做分區,那麼全文檢索搜尋如果內建分布式技能那就最合適不過了。經過一系列的考量,最後,我們就決定用 Elasticsearch 了。
現在後端程式是直接將資料寫到 MongoDB 中,我不想修改程式碼,不想在增刪改 MongoDB 中資料的同時去增刪改 Elasticsearch 中的資料。希望 MongoDB 中資料發送變化時自動同步到 Elasticsearch 中,這樣就可以最快地用上 Elasticsearch 了。
剛開始我找到的方案是利用 Elasticsearch 的 River 來同步資料,並在 GitHub 上到了 MongoDB River 外掛程式:elasticsearch-river-mongodb。但是,隨後我又在 Elasticsearch 官網上看了這篇部落格:《Deprecating Rivers》,官方已經在 1.5 以後的版本棄用 River,為了使用者的遷移,會一直保留到 2.0 版本。
於是,我得另尋方案了。然後我又在網上找到了另外一個方案:mongo-connector。這個是 MongoDB 官方的開發人員用 Python 寫的一個工具,目前支援將 MongoDB 的資料同步到 Solr、Elasticsearch、MongoDB 中,並且支援使用者自己擴充。看到 README 中的免責聲明,我有點覺得這是玩票性質的工具,但是還是抱著試試看的心態決定試試看了。
下面是部署過程:
MongoDB 必須開啟複製集,如果已經開啟請忽略這一步:
配置複製集的名稱:mongod --replSet myDevReplSet
在 mongo shell 中初始化複製集:rs.initiate()
安裝 Elasticsearch,如果已經安裝請忽略這一步。
安裝 mongo-connector:
先安裝 pip:
yum install python-setuptools && easy_install pip
通過 pip 安裝 mongo-connector:
pip install mongo-connector
運行 mongo-connector:
mongo-connector -m 127.0.0.1:27017 -t 127.0.0.1:9200 -d elastic_doc_manager
OK,現在,在 MongoDB 中增刪改資料,都能立刻同步到 Elasticsearch 中了。在試用過程中,mongo-connector 退出過兩次,其中一次斷開太久沒有發覺,害我不得不重新同步。還是有點不靠譜的感覺,可能還得專門寫個精靈,讓 mongo-connector 一直能在後台好好乾活。
拓展閱讀:
MongoDB 資料自動同步到 Elasticsearch