Appearance
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 集合用来存储操作日志。