MongoDB同步到ES

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: p o r t ( {port}( port{port} 是你具体的端口)

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

安装启动Kibana

下载好的Kibana 压缩包,解压缩之后,进入bin 目录,双击启动 kibana.bat
访问地址:http://localhost:5601/
URL修改:config 目录下 kibana.yml,添加 elasticsearch.url: " u r l " ( {url}"( url"{url} 是你的ES的服务地址)
端口修改:config 目录下 kibana.yml,添加 server.port: p o r t ( {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-ens33

BOOTPROTO="dhcp"
# 改为静态IP
BOOTPROTO="static"
# 添加
IPADDR=192.168.84.101
NETMASK=255.255.255.0
GATEWAY=192.168.84.2

# 如果是复制的虚拟机,还需要把UUID改一下

systemctl restart network

vim /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 也同步过来了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值