栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 云计算 > 云平台

使用monstache同步MongoDB数据到ElasticSearch

云平台 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用monstache同步MongoDB数据到ElasticSearch

monstache同步数据需要MongoDB开启复制集,原理是mongodb复制集会把所有写操作记录在oplog日志文件中,monstache读取日志,把所有的操作同步到ES中。
mongodb复制集节点建议单数,本次我是在一台服务器上创建,一主二从三个节点。双数节点需要配置选举节点,一个复制集最多五十个节点,选举节点最多7个(好像是)

1.安装docker(凑数得)
#安装
yum install docker -y
#启动docker服务
systemctl start docker.service
2.配置MongoDB复制集

mongodb版本为5.05 复制集共三节点在同一个服务器上

1)创建mongo目录
#先创建mongodb文件目录(客户端创建更方便)
# 进入opt目录
cd /opt
# 在opt目录下创建文件夹mongo
mkdir /mongo
# 进入mongo目录
cd /opt/mongo
#  在mongo目录下创建文件夹m1,m2,m3
mkdir m1
# 进入m1文件夹(m2,m3同)
cd /opt/mongo/m1 
# 在m1目录下创建文件夹log,conf,db
mkdir log conf db 
# 给log文件夹授权,log 文件夹需要提权 因为mongodb会创建日志文件
chmod 777 log

结构如图:

2)配置mongod.conf文件

节点m2,m3配置与下面m1相同

cd /opt/mongo/m1/conf 
# 创建配置文件
vim mongod.conf
#将下面内容复制到mongod.conf中,注意粘贴要在插入模式下,否则会丢几个字母不好排查。

storage:
  dbPath: /data/db
  journal:
    enabled: true
#  engine:
#  mmapv1:
#  wiredTiger:
systemLog:
  destination: file
  logAppend: true
  path: /data/log/mlogs
# where to write logging data.
# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0
# how the process runs
security:
  #开启认证
  authorization: enabled
  # 指定keyfile认证
  clusterAuthMode: keyFile 
  keyFile: /data/conf/mongodb.keyfile
  
#operationProfiling:
replication:
  oplogSizeMB: 10240
#复制集名称:可修改,三个节点要一致
  replSetName: rs1

创建keyFile认证秘钥

# 进入mongo下的conf文件夹
cd /opt/mongo/conf
# 生成keyfile文件,keyfile文件只生成一次  拷贝到每个节点上使用
openssl rand -base64 736 > /opt/mongo/m1/conf/mongodb.keyfile
# mongodb.keyfile必须授权600和999,否则后续启动不了MongoDB容器
# 给m1的mongodb.keyfile文件授权
chmod 600 mongodb.keyfile
# 给m1的mongodb.keyfile文件授权
chown 999 mongodb.keyfile

# 将mongodb.keyfile文件复制到从节点的conf文件夹下,并授权
# 给从节点的mongodb.keyfile文件授权
chmod 600 mongodb.keyfile
# 给从节点的mongodb.keyfile文件授权
chown 999 mongodb.keyfile
3)启动容器
#m1
docker run  -p 27027:27017 --restart always 
--name="m1" 
-v /opt/mongo/m1:/data 
-v /opt/mongo/m1/db:/data/db 
-v /etc/localtime:/etc/localtime 
-d mongo:5.0.5 
--config /data/conf/mongod.conf
#m2
docker run  -p 27028:27017  
--name="m2" 
-v /opt/mongo/m2:/data 
-v /opt/mongo/m2/db:/data/db 
-v /etc/localtime:/etc/localtime 
-d mongo:5.0.5 
--config /data/conf/mongod.conf
#m3
docker run  -p 27029:27017 
--name="m3" 
-v /opt/mongo/m3:/data 
-v /opt/mongo/m3/db:/data/db 
-v /etc/localtime:/etc/localtime 
-d mongo:5.0.5 
--config /data/conf/mongod.conf

#docker ps 查看已启动容器
docker ps

# 进入容器
docker exec -it m1 bash
#进入mongo命令行
mongo 
#配置复制集
myconf = {"_id":"rs1","members":[{"_id":0,"host":"39.106.216.86:27027"},{"_id":1,"host":"39.106.216.86:27028"},{"_id":2,"host":"39.106.216.86:27029"}]}
# 初始化配置文件
rs.initiate(myconf)  
# 查看集群状态
rs.status()
# 在从节点上想查询需要执行
# MongoDB server version: 5.0.1 已经弃用rs.slaveOk()
#注意: WARNING: slaveOk() is deprecated and may be removed in the next major release. Please use secondaryOk() instead.
# 意思是rs.slaveOk()已经弃用,使用rs.secondaryOk()
rs.secondaryOk()

# 先创建 admin用户 可以操作admin库并且继续创建其他用户
use admin
db.createUser( {user: "admin",pwd: "skxk1320",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]})
db.auth("admin", "skxk1320")
# 登录admin用户后继续创建用户root权限
db.createUser({user:"root",pwd:"skxk1320",roles:["root"]})
db.auth("root", "skxk1320")
#创建个集合试下
db.createCollection("test")

注意: 远程连接需要在云服务器安全组中开放27027,27028,27029三个端口

容器启动报错查看日志 docker logs m1

3.安装ElasticSearch
  • 拉取镜像
docker pull elasticsearch:7.8.0
  • 创建目录

config配置目录 data数据目录 plugins插件目录(ik)

如图

#注意:data文件夹给上777权限
chmod 777 /opt/elasticsearch/data
  • 启动容器
#注意: -e ES_JAVA_OPTS="-Xms84m -Xmx512m" 为es启动内存 生产环境下要多配置
docker run --name es -p 9200:9200  -p 9300:9300 
 -e "discovery.type=single-node" 
 -e ES_JAVA_OPTS="-Xms2048m -Xmx4096m" 
 -v /opt/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 
 -v /opt/elasticsearch/data:/usr/share/elasticsearch/data 
 -v /opt/elasticsearch/plugins:/usr/share/elasticsearch/plugins 
 -d elasticsearch:7.8.0
  • 云服务器安全组开放9200端口

  • 验证是否成功

浏览器访问Ip:9200 (测试服务器马上就到期了)

4.搭建Monstache环境 1)安装Git

从github上拉取Monstache项目,需要安装git

yum install -y git
#安装后查看版本 yum安装的git版本较低,但是够用,新版本下载压缩包安装
git --version
2)安装go环境

monstache是go语言开发,编译需要go环境

  • 下载Go语言包并安装
wget https://dl.google.com/go/go1.14.4.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.14.4.linux-amd64.tar.gz
  • 配置环境变量
export GOROOT=/usr/local/go
export GOPATH=/home/go/
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
export GOPROXY=https://mirrors.aliyun.com/goproxy/
  • 使环境变量生效
source /etc/profile
  • 安装monstache
#进入安装目录
cd /usr/local/
#切换到rel6版本(默认是6) es7.x对应的是rel6
git checkout rel6
#安装
go install
#查看版本 (执行成功会返回版本 6.7.7)
monstache -v
3)配置monstache配置文件
  • 创建目录和配置文件
cd /usr/local/monstache/
vim config.toml
  • 把下面的内容复制到config.toml里面,注意如果不是插入模式,第一行容易丢字符
#这一行要放在上面
verbose = true  

#mongodb的链接地址 monstache与mongodb和es在同一服务器,所以写的localhost
mongo-url = "mongodb://root:skxk1320@localhost:27027"

#es的链接地址
elasticsearch-urls = ["http://localhost:9200"]

#要监听的mongodb的集合格式是 库名.集合名,可以写多个,也可以使用正则来匹配多个,相应配置项为 namespace-regex
#这个好像没啥用,但是别人是这样写的 随便一个库名.集合名
direct-read-namespaces = ["test.hello"]

enable-oplog = true
#es用户(没有可不填)
elasticsearch-user = ""

#es密码(没有可不填)
elasticsearch-password = ""

#monstache最多开几个线程同步到es,默认为4
elasticsearch-max-conns = 4

#mongodb删除集合或库时是否同步删除es中的索引
dropped-collections = true
dropped-databases = true

#记录同步位点,便于下次从该位置同步
resume = true

#指定恢复策略。仅当resume为true时生效,默认为0-基于时间戳的变更流恢复
resume-strategy = 0

#生产环境记录日志必不可少,monstache默认是输出到标准输出的,这里指定它输出到指定的日志文件(这个也是踩坑踩出来的哦!)
[logs]
info = "/home/admin/logs/monstore-center/info.log"
warn = "/home/admin/logs/monstore-center/wran.log"
error = "/home/admin/logs/monstore-center/error.log"
trace = "/home/admin/logs/monstore-center/trace.log"

#设置日志切割参数,下面的配置意思是:每个日志文件超过500M会被切割,最大保存最近60个日志文件,会压缩历史日志
[log-rotate]
max-size = 500
max-age = 60
compress = true

#高可用模式下需要配置集群名称,集群名称一样的进程会自动加入一个集群内,要注意这是个集群是高可用的,而不是负载均衡的。(看到其他文档里说这个参数是es集群的名称,其实并不是,自定义值)
#cluster-name = 'HA-im'

#此项目用的默认配置,自动同步所有库所有集合,省事,就不用配置mapping了
#mapping定义mongodb数据到es的索引名称和type,namespace是库名.集合名
#这里需要注意一件事:最好是在es中创建好你要的索引结构,关闭es的自动创建索引功能,不然monstace会给mongodb中所有的集合都创建一个索引。我这里就对应了两个索引
#[[mapping]]
#namespace = "test.hello"
#index = "li_index"
#
#[[mapping]]
#namespace = "ec-imcenter.im_ch"
#index = "im_ch"
#type = "im_ch"
4)启动monstache

nohup &可以让程序后台运行,否则断开连接就关闭了,-f是监控模式,显式的打印日志,加了没啥用,可以先不加nohup查看下效果

nohup monstache -f config.toml &
5)安装kibana看一下效果
  • 拉取镜像
docker pull elasticsearch:7.8.0
  • 创建kibana配置文件
#创建目录
mkdir -p /opt/elasticsearch/kibana
#创建配置文件
vim kibana.yml
  • 把下面内容复制进去
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://云服务器ip:9200"]
i18n.locale: "zh-CN"
xpack.monitoring.enabled : true
xpack.reporting.capture.browser.chromium.disableSandbox: true
  • 启动容器
docker run -d  --name kibana  -p 5601:5601 -v /opt/elasticsearch/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml kibana:7.8.0

访问浏览器 ip:9200查询一下就行了
至此,结束。

参考:https://blog.csdn.net/qq_38066812/article/details/122475897
https://help.aliyun.com/document_detail/171650.html?spm=5176.22414175.sslink.10.2b8f676319F1BU

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/897805.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号