Skip to content
On this page

docker-compose单机部署 Mongodb 与 Elasticsearch 同步

前言

在公司中遇到了一个场景也是很常见的一个场景,就是需要把 Mongodb 中的数据同步到 Elasticsearch 中去,上网查了很多资料,但大多数是使用 mongo-connector,还有其他的一些比如 revier、logstash等,版本都比较老已经没人维护了且不支持高版本的 Elasticsearch,于是就找到了 Monstache。

准备

一台服务器(本地电脑也可以)、安装 Dokcer

过程简述

部署过程

部署mongodb

目录结构如下

mongodb # mongodb主文件夹  
├── data # 用来挂载数据的文件夹  
├── docker-compose.yaml # 使用docker-compose  
├── log # mongodb日志文件  
└── mongod.conf # mongodb配置文件  
└── keyfiles # 用于配置副本集存放key文件用的  

mongod.conf 文件

yaml
systemLog:  
destination: file  
path: /var/log/mongodb/mongod.log  
logAppend: true  
storage:  
dbPath: /etc/mongodb/data  
net:  
port: 27017  
bindIp: 0.0.0.0  
# 暂不开启认证  
#security:  
#authorization: enabled  
#keyFile: /etc/mongodb/keyfiles/keyfile  
# 后面配置副本集需要用到  
#replication:  
#replSetName: mongo2es  
#oplogSizeMB: 10240  

dokcer-compose.yaml 文件

yaml
version: '3.8'  
  
services:  
mongo:  
image: mongo:4.4.2  
restart: always  
container_name: mongodb  
environment:  
TZ: Asia/Shanghai  
volumes:  
- /Users/mankvis/Common/Docker/mongodb/data:/etc/mongodb/data  
- /Users/mankvis/Common/Docker/mongodb/mongod.conf:/etc/mongodb/mongod.conf  
- /Users/mankvis/Common/Docker/mongodb/log:/var/log/mongodb  
- /Users/mankvis/Common/Docker/mongodb/keyfiles:/etc/mongodb/keyfiles  
command: mongod --config /etc/mongodb/mongod.conf  
ports:  
- 27017:27017  

切换至 mongodb 目录 运行命令 docker-compose up -d,一顿输出后 运行 docker ps

以上证明 Mongdob 容器已经正常运行了,接下里使用 Navicate Premium 连接确认下

开启副本集,修改 mongod.conf 配置文件内容如下

yaml
systemLog:  
destination: file  
path: /var/log/mongodb/mongod.log  
logAppend: true  
storage:  
dbPath: /etc/mongodb/data  
net:  
port: 27017  
bindIp: 0.0.0.0  
# 暂不开启认证  
#security:  
#authorization: enabled  
#keyFile: /etc/mongodb/keyfiles/keyfile  
# 新增开启  
replication:  
replSetName: mongo2es  
oplogSizeMB: 10240  

运行命令 docker resatrt mongoldb 重启 mongo服务,使用命令 docker exec -it mongodb /bin/bash 进入容器,接着输入命令 **mongo **进入 shell 交互,输入命令 show dbs 会出现以下问题

大概的意思是说因为使用了 mongodb 集群, 但是没有进行初始化副本集,所以先进行初始化副本集

切换数据库 use admin

输入命令 rs.initiate({_id: "mongo2es", members: [{_id: 0, host: "127.0.0.1:27017"}]})

以上命令的 mongo2es 要对应配置文件中的副本集名称

可以看到输入以上命令后角色会从 SECONDARY 变为 PRIMARY,则表示成功。

创建超级管理员账号

db.createUser({user:"root",pwd:"123456",roles:["root"]})  

然后生成 keyfile 文件,exit 退出 mongo客户端

进入 mongodb 目录下的 keyfiles 目录属于命令

openssl rand -base64 756 > keyfile  
chmod 400 keyfile  

会在 keyfiles 目录里面生成 keyfile 文件,修改 mongod.conf 配置文件如下

yaml
systemLog:  
destination: file  
path: /var/log/mongodb/mongod.log  
logAppend: true  
storage:  
dbPath: /etc/mongodb/data  
net:  
port: 27017  
bindIp: 0.0.0.0  
security:  
authorization: enabled  
keyFile: /etc/mongodb/keyfiles/keyfile  
replication:  
replSetName: mongo2es  
oplogSizeMB: 10240  

重启 mongodb 容器,在自带的 local 数据库中生成了 oplog.rs 集合用来存储操作日志。

Released under the MIT License.