MongoDB實時同步數據到Elasticsearch及服務器部署(windows)


環境

  • windows7,64位(win10也可以),其他未做測試
  • mongo4.2
  • elasticsearch7.6.1
  • ik分詞器(7.6.1)
  • monstache

mong遠程服務器開啟replica set及配置

MongoDB 開啟復制集

MongoDB復制是將數據同步在多個服務器的過程。
復制提供了數據的冗余備份,並在多個服務器上存儲數據副本,提高了數據的可用性, 並可以保證數據的安全性。
復制還允許您從硬件故障和服務中斷中恢復數據。

關閉正在運行的MongoDB服務器,開啟復制集。

  • 通過指定 –replSet 選項來啟動mongoDB。–replSet 基本語法格式如下:
./mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
  • 實例
  • 在‘data\’下創建rs0和log文件夾(用於存放repilica set的數據)
./mongod --port 27018 --dbpath "/data/rs0" --replSet rs0
# 或者

# mongo.config內容
port=27018
bind_ip=0.0.0.0 # 這個一定要寫,不然內網無法訪問
dbpath=D:\data\rs0
logpath=D:\data\log\mongodb.log
logappend=true
repliSet=rs0

mongod -f mongo.config
  • 注意:這里需要在/目錄下創建好/data/rs0這個文件。
  • 以上實例會啟動一個名為rs0的MongoDB實例,其端口號為27018。

將mongo客戶端與副本集成員連接。

  • 進入mongodb/bin下

  • 啟動Mongo客戶端並連接上mongoDB服務
    ./mongo

初始化副本集

  • 在Mongo客戶端輸入rs.initiate(),初始化副本集。

rs.initiate()
{
"info2" : "no configuration specified. Using a default configuration for the set",
"me" : "b48eafd69929:27017",
"ok" : 1
}

  • 可以使用rs.conf()來查看副本集的配置。

rs0:SECONDARY> rs.conf()
{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "test:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("577b74bd0ba41a313110ad62")
}
}

  • 看副本集狀態使用 rs.status() 命令。

rs0:PRIMARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2016-07-05T08:50:55.272Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"members" : [
{
"_id" : 0,
"name" : "test:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 115,
"optime" : {
"ts" : Timestamp(1467708606, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2016-07-05T08:50:06Z"),
"infoMessage" : "could not find member to sync from",
"electionTime" : Timestamp(1467708605, 2),
"electionDate" : ISODate("2016-07-05T08:50:05Z"),
"configVersion" : 1,
"self" : true
}
],
"ok" : 1
}

ES遠程服務器安裝部署及配置

安裝

指定elasticsearch7.6.1使用自帶的jdk13

  • 切到目錄C:\elasticsearch-7.6.1-windows-x86_64\elasticsearch-7.6.1\bin
  • 修改 elasticsearch-env.bat
  • 找到這個地方改成這樣即可
if defined JAVA_HOME (
  set JAVA="%ES_HOME%\jdk\bin\java.exe"
  set JAVA_HOME="%ES_HOME%\jdk"
  set JAVA_TYPE=bundled jdk
) else (
  set JAVA="%ES_HOME%\jdk\bin\java.exe"
  set JAVA_HOME="%ES_HOME%\jdk"
  set JAVA_TYPE=bundled jdk
)
  • 切到目錄C:\elasticsearch-7.6.1-windows-x86_64\elasticsearch-7.6.1\config
  • 修改jvm.options像這樣
## GC configuration
8-13:-XX:+UseG1GC
8-13:-XX:CMSInitiatingOccupancyFraction=75
8-13:-XX:+UseCMSInitiatingOccupancyOnly

配置elasticsearch.yml

network.host: 192.168.1.171
network.publish_host: 192.168.1.171
http.port: 9201
transport.tcp.port: 9301

monstache遠程服務器的安裝及配置

安裝

配置文件的編寫

  • 按照這樣配置即可
mongo-url = "mongodb://127.0.0.1:27018"
elasticsearch-urls = ["http://111.231.92.176:29043"]
elasticsearch-max-conns = 10
namespace-regex = '^app\.app_kankanxinwen*'      #aaa表示mongodb的數據庫,bbb表示集合,表示要匹配的名字空間
# direct-read-namespaces = [“common.parent_info”,”common.child_info”]
dropped-collections = true

# propogate dropped databases in MongoDB as index deletes in Elasticsearch
dropped-databases = true

resume = true #從上次同步的時間開始同步

# cluster-name = 'tzg'  #es集群名

# 更新es而不是覆蓋
index-as-update = true
verbose = true

  • 啟動monstache
monstache -f config.toml

填坑指南

  1. 服務器端執行toml文件報錯
(last key parsed '')bear keys cannot contain '\ufeff'

這是由於某些系統默認文本編碼為BOM,改為utf-8即可

  1. mongo無法遠程連接
    檢查內網是否調通
    一般設置為0.0.0.0即可
  2. monstache無法連接遠程mongo數據庫,只能連接本地的
    把monstache服務放在mongo本地服務器運行


免責聲明!

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



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