MongoDB 同步,关键在于要有复制集,由复制集同步到ES

ElasticSearch :版本6.3.2
Kibana:6.3.2(可以理解为ES的可视化管理工具)
MongoDB: 版本6.0.2

ElasticSearch,Kibana 下载:(中文社区)https://elasticsearch.cn/download/
MongoDB 下载:https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.2-signed.msi
MongoDB Compass 下载:https://downloads.mongodb.com/compass/mongodb-compass-1.33.1-win32-x64.exe

安装和配置 ES

安装启动ES

下载好的 ElasticSearch压缩包,解压缩之后,进入bin 目录,双击启动 elasticsearch.bat

访问地址:http://localhost:9200/
端口修改:config 目录下 elasticsearch.yml 文件,添加 http.port: port({port}(port({port} 是你具体的端口)

注意:如果改了这个端口,Kibana 也需要做相应的修改,参考下面Kibana 章节

安装启动Kibana

下载好的Kibana 压缩包,解压缩之后,进入bin 目录,双击启动 kibana.bat
访问地址:http://localhost:5601/
URL修改:config 目录下 kibana.yml,添加 elasticsearch.url: "url"({url}"(url"({url} 是你的ES的服务地址)
端口修改:config 目录下 kibana.yml,添加 server.port: port({port}(port({port} 是你需要设置的端口)

Kibana 下操作ES

查看所有信息

GET _all

查询?

GET _search
{"query": {"match_all": {}}
}

新增数据

PUT person
{"mappings": {"properties": {"username": {"type": "text", "analyzer": "ik_smart"},"password": {"type": "text", "analyzer": "ik_smart"},"first_name": {"type": "text", "analyzer": "ik_smart"},"last_name": {"type": "text", "analyzer": "ik_smart"},"intro": {"type": "text", "analyzer": "ik_smart"},"age": {"type": "double"}}}
}GET user/_doc/1
{"username": "Wolfe","password": "123","first_name": "Wolfe","last_name": "Yu","intro": "I am Wolfe. I like pingpong and badminton."
}


继续随便新增几个

GET user/_doc/2
{"username": "Daisy","password": "234","first_name": "Daisy","last_name": "Liu","intro": "An open girl, like pingping too."
}GET user/_doc/2
{"username": "Daisy","password": "234","first_name": "Daisy","last_name": "Liu","intro": "An open girl, like pingping too."
}
GET user/_doc/3
{"username": "Shirley","password": "456","first_name": "Shirley","last_name": "Zhang","intro": "A girl whoes hometown in north of China"
}

查询

安装和配置 MongoDB

因为要用到复制集,我在CentOS虚拟机里面搞了, 这章跳过

下载安装

下载:https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-6.0.2-signed.msi
安装 MongoDB
然后下载 Mongo Shell, 因为MongoDB6 不自带 mongo shell 命令
下载地址:https://www.mongodb.com/try/download/shell
我选择了 1.6 版本, win64位的zip包下载
下载之后直接解压缩就能用了, 可以配置 mongosh 到环境变量里面去

创建验证用户

# 进入控制台
mongosh
use admin
db.createUser({user: "root", pwd: "root", roles: ["root"]})

修改MongoDB的配置文件(win系统在 bin 目录下,mongod.cfg)
打开配置

security:authorization: enabled  #开启密码验证

重启mongodb服务

配置复制集

mongosh
。。。。。。

他大爷,必须要复制集,先整虚拟机

重新来,下面用的是CentOS了。

我的CentOS版本是7,其他版本操作可能不太一样
下面示例中,MongoDB 版本是:4.4.5、ES版本是 6.3.2
MongoDB 同步到 ES 需要用到 Monstache 这个工具, 这个工具运行 需要 Go 环境,所以在这个过程,还需要安装 Go、Monstache等。

安装MongoDB

先配置两台虚拟机

IP: 192.168.84.101(主节点) 和 192.168.84.102(从节点)

vim /etc/sysconfig/network-scripts/ifcfg-ens33BOOTPROTO="dhcp"
# 改为静态IP
BOOTPROTO="static"
# 添加
IPADDR=192.168.84.101
NETMASK=255.255.255.0
GATEWAY=192.168.84.2# 如果是复制的虚拟机,还需要把UUID改一下systemctl restart networkvim /etc/resolv.conf
# 追加内容
nameserver 8.8.8.8 #google域名服务器
nameserver 8.8.4.4 #google域名服务器

安装MongoDB(两台虚拟机)

# 创建文件夹
mkdir -p /data/software
cd /data/software
# 下载包
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.15.tgz
# 解压
tar zxvf mongodb-linux-x86_64-rhel70-4.4.15.tgz
# 更名
mv /data/software/mongodb-linux-x86_64-rhel70-4.4.15/ /data/software/mongodb
# 创建日志目录
mkdir -p /data/software/mongodb/log
# 创建数据库目录
mkdir -p /data/software/mongodb/db
# 创建日志文件
touch /data/software/mongodb/log/mongodb.log
# 更改读写权限
chmod 777 /data/software/mongodb/log
chmod 777 /data/software/mongodb/db

配置MongoDB的环境变量

# 编辑环境变量配置文件
vim /etc/profile
# 末尾追加内容
export PATH=/data/software/mongodb/bin:$PATH
# 退出配置编辑状态
# 使配置文件生效
source /etc/profile

添加MongoDB数据库配置文件

vim /data/software/mongodb/mongodb.conf
# 添加内容
port= 27017
bind_ip=0.0.0.0 # 允许远程连接
logpath=/data/software/mongodb/log/mongodb.log
dbpath=/data/software/mongodb/db
logappend=true
pidfilepath=/data/software/mongodb/mongodb.pid
fork=true

创建系统用户

# 启动
cd /data/software/mongodb
./bin/mongod --config mongodb.conf
# 进入mongo shell 控制台
mongo
# 进入 admin 库
use admin
# 创建账户密码
db.createUser({user:'root',pwd:'root',roles:['root']})

完善MongoDB数据库配置文件

vim /data/software/mongodb/mongodb.conf
# 追加内容
maxConns=100
noauth=true
journal=true
storageEngine=wiredTiger
oplogSize=1024
replSet=MyMongoRepl # 复制集名称

启动 和 停止 MongoDB

# 启动
mongod --config /data/software/mongodb/mongodb.conf
# 停止服务
mongod --config /data/software/mongodb/mongodb.conf --shutdown

创建复制集

先关闭防火墙

systemctl stop firewalld.service

创建复制集

以下操作在 192.168.84.101 上操作

# 进入Mongo Shell
mongo# 编写配置
config = {_id: "MyMongoRepl",members: [{_id: 0, host: "192.168.84.101:27017"},{_id: 1, host: "192.168.84.102:27017"}]
}# 初始化
rs.initiate(config)

测试看数据是否已同步

在 XXX.101 上操作

mongo
use testdb
db.user.insert({user: "Wolfe", pwd: "123456", age: 34})

在 XXX.102 上操作

mongo
rs.secondaryOk()
use testdb
db.user.find();

可以看到,101 上新曾的数据已经到 102 了。

安装 Go

因为后面的同步都是在复制集从节点上进行同步,所以下面的操作在 XXX.102 上进行

下载安装

cd /data/software
# 下载
wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
# 解压缩
tar -xzf go1.14.4.linux-amd64.tar.gz

配置环境变量

vim /etc/profile# 追加内容
export GOROOT=/data/software/go
export GOPATH=/home/go/
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY=https://mirrors.aliyun.com/goproxy/# 使环境变量生效
source /etc/profile

安装 Monstache

同上,在XXX.202 上安装就好了
在安装 Monstache 前,可以到网上(https://rwynn.github.io/monstache-site/start/)查看你的MongoDB版本和ES版本,选择合适的 Monstache 版本才能复制成功,根据我MongoDB的版本和我ES的版本,我将选择 rel5 这个分支。

# 安装 git, 主要是从 git 库里面进行编译
yum install -y git
cd /data/software
# 克隆
git clone https://github.com/rwynn/monstache.git
cd monstache
# 切出 rel5 分支
git checkout rel5
# 安装
go install
# 查看版本,检查是否已经安装成功
monstache -v

配置同步任务

修改 ES 配置

ES 还是沿用我原来的Windows 主机(IP:192.168.84.1)
E:\Wolfe\homework\elasticsearch-6.3.2\config\elasticsearch.yml(目录根据你自己的来哈)
追加内容

network.host: 0.0.0.0
discovery.type: single-node

添加 monstache 配置

在 XXX.102 上操作

cd /data/software/monstache
vim config.toml# 追加内容如下
# Mongo URL
mongo-url = "mongodb://root:root@192.168.84.102:27017"
# ES URL
elasticsearch-urls = ["http://192.168.84.1:9200"]
# 需要同步哪些集合
direct-read-namespaces = ["testdb.user","testdb.project"]
elasticsearch-max-conns = 4
dropped-collections = true
dropped-databases = true
resume = true
resume-strategy = 0
verbose = true
cluster-name = 'my-cluster'[[mapping]]
namespace = "testdb.user"
index = "user"
type = "user"[[mapping]]
namespace = "testdb.project"
index = "project"
type = "name"

启动测试

启动 ES

启动前把之前改的端口改回 9200,要与 monstache 的配置文件指定的端口匹配就行
还要把 Windows 主机上的 9200 端口放开
双击 E:\Wolfe\homework\elasticsearch-6.3.2\bin\elasticsearch.bat 启动

启动 monstache

指定配置文件运行 monstache

cd /data/software/monstache
monstache -f config.toml

启动 Kibana

记得改端口
双击 E:\Wolfe\homework\kibana-6.3.2-windows-x86_64\bin\kibana.bat 启动

测试

  1. 访问Kibana 发送请求查询 user 信息

    看到,已经同步到ES了
  2. 再测试刚才MongoDB中没有的 project 文档

以下操作在 XXX.101 上操作

mongo
use testdb
db.project.insert({name: "A MongoDB sync to ES", author: "Wolfe"})

然后在 Kibana 上访问请求 project 文档信息

可以看到 project 也同步过来了

MongoDB同步到ES相关推荐

  1. Elasticsearch和Hive整合,将hive数据同步到ES中

    1 Elasticsearch整合Hive 1.1 软件环境 Hadoop软件环境 Hive软件环境 ES软件环境 1.2 ES-Hadoop介绍 1.2.1 官网 https://www.elast ...

  2. es 全量同步mysql_使用canal将mysql同步到es中

    因为自己项目中需要用到mysql数据同步到es中,查找了相关资料最后决定用canal来做,所以便有了本文,下面一起来看如何使用canal吧 canal教程 根据 https://github.com/ ...

  3. 通过Logstash实现mysql数据定时增量同步到ES

    文章目录 前言 一.系统配置 二.同步步骤整体概览 三.logstash数据同步实战 1.新建mysql表 2.ES中新建索引 3.Logstash 管道配置 4.启动Logstash 5.测试 6. ...

  4. 基于Kafka Debezium Confluent实现MySql实时同步到ES

    实现目标 基于MySql的Binlog实现Mysql表实时同步到ES. 实现方案          1.总体技术方案基于Kafka的Connect技术.具体技术内容,不做介绍,网上有相关文章,本文章主 ...

  5. 使用canal监听binlog将数据发送到RocketMQ同步到es

    写在前面 今天不学习,明天变垃圾.最近在学习如何使用canal监听binlog并且将数据同步到es,俗话说好记性不如烂笔头,所以写一篇文章记录一下,一是为了健忘的自己,二是为了恰好有此需求的小可爱(程 ...

  6. 从MongoDB迁移到ES后,我们减少了80%的服务器

    来自:DBAplus社群 作者介绍 李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch,对Elastic-Stack开发.架构. ...

  7. 李猛:从MongoDB迁移到ES后,我们减少了80%的服务器

    李猛 DBAplus社群 读完需要 10 分钟 速读仅需 4 分钟 作者介绍 李猛(ynuosoft),Elastic-stack产品深度用户,ES认证工程师,2012年接触Elasticsearch ...

  8. 亿级别记录的mongodb批量导入Es的java代码完整实现

    针对mongodb亿级别或者十亿级别的模糊查询,效率不高,解决方式是使用Es查询,这样就需要把数据导入的ES中 完整的代码实现如下所示:(仅供参考) import java.io.IOExceptio ...

  9. Canal Mysql同步至ES/Hbase只有新增时生效,修改删除不生效

    问题描述 新增Mysql数据时,ES.Hbase数据会同步成功:当删除Mysql数据,或者修改Mysql数据时同步ES.Hbase数据无变化(PS:修改和删除加上LIMIT xxx 就可以成功.) 问 ...

最新文章

  1. php不报错怎么回事,解决PHP 7等web编程语言不报错一例
  2. 局部类的引用成员函数或虚函数必须进行定义
  3. 【转】使用C#发送Http 请求实现模拟登陆(以博客园为例)
  4. python async_python async with和async for的使用
  5. Matlab线性/非线性规划优化算法(6)
  6. 奇怪,Python有的函数调用需要两对括号?(2)
  7. 阿里云虚拟主机的使用,附幸运券领取
  8. 推荐一款强大的国产开源监控系统!
  9. Markdown 使用感受
  10. vmware linux top si高以及网卡队列、软负载相关优化
  11. 流媒体直播协议与比较
  12. 5G的落地现状与未来变局
  13. 20210218CTF伪协议绕过file_get_contents(bugkuctf的web21御结冰城感想)
  14. android中Zing二维码扫描,二维码生成
  15. QT构建编译出现错误error: undefined reference to 的解决办法
  16. 计算机一级wps office考试题库,2017计算机一级WPSOffice复习题(含答案)
  17. Arduino ESP32将数据保存到NVS中
  18. 谷歌小恐龙-有网也能玩儿
  19. ArcGIS API for Python
  20. RISC-V 实现整数运算指令(Part 1)

热门文章

  1. 谷歌阻止苹果,谁来阻止谷歌
  2. java8日期加减_java时间加减
  3. LTE -UL_grant中RIV的编码和解码
  4. spark TF-IDF特征提取生成文章关键词
  5. 详谈 UNIX 环境进程异常退出
  6. maven的wagon-maven-plugin插件详解
  7. win10禁用快速启动装linux,win10如何关闭快速启动
  8. el-table表格操作列合并行
  9. Beam failure Recovery
  10. 射频衰减器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告