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 启动
测试
- 访问Kibana 发送请求查询 user 信息
看到,已经同步到ES了 - 再测试刚才MongoDB中没有的 project 文档
以下操作在 XXX.101 上操作
mongo
use testdb
db.project.insert({name: "A MongoDB sync to ES", author: "Wolfe"})
然后在 Kibana 上访问请求 project 文档信息
可以看到 project 也同步过来了