1.安装docker(凑数得)monstache同步数据需要MongoDB开启复制集,原理是mongodb复制集会把所有写操作记录在oplog日志文件中,monstache读取日志,把所有的操作同步到ES中。
mongodb复制集节点建议单数,本次我是在一台服务器上创建,一主二从三个节点。双数节点需要配置选举节点,一个复制集最多五十个节点,选举节点最多7个(好像是)
#安装 yum install docker -y #启动docker服务 systemctl start docker.service2.配置MongoDB复制集
1)创建mongo目录mongodb版本为5.05 复制集共三节点在同一个服务器上
#先创建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
结构如图:
节点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.keyfile3)启动容器
#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 (测试服务器马上就到期了)
从github上拉取Monstache项目,需要安装git
yum install -y git #安装后查看版本 yum安装的git版本较低,但是够用,新版本下载压缩包安装 git --version2)安装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 -v3)配置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



