mongodb 同步数据到 elasticsearch

在网上找了很多资料,还是得自己动手做一次,才知道什么是对的。整理使用的安装命令如下:

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.3.tgz

tar -zxvf mongodb-linux-x86_64-4.0.3.tgz
mv mongodb-linux-x86_64-4.0.3 /usr/local
mv /usr/local/mongodb-linux-x86_64-4.0.3/ /usr/local/mongodb

mkdir /mydata/mongodb
mkdir /mydata/mongodb/data
touch /mydata/mongodb/logs
mkdir /mydata/mongodb/data2
touch /mydata/mongodb/logs2

 

/usr/local/mongodb/bin/mongod --dbpath=/mydata/mongodb/data --logpath=/mydata/mongodb/logs --logappend  --port=27017 --fork --replSet rs3
/usr/local/mongodb/bin/mongod --dbpath=/mydata/mongodb/data2 --logpath=/mydata/mongodb/logs2 --logappend  --port=27018 --fork --replSet rs3

cd /usr/local/mongodb/bin
./mongo
var rsconf = {
  _id: 'rs3',
  members: [
  {
    _id:0,
    host: '127.0.0.1:27017'
  },
  {
    _id: 1,
    host: '127.0.0.1:27018'
  } ]
}
rs.initiate(rsconf);

这里需要设置一个优先级,为什么呢,因为副本集的主集是自动选举产生的,每当重启机器有可能会有变化,这样就会有问题了。///

在设置mongodb副本集时,Primary节点,second节点,仲裁节点,有可能资源配置(CPU或者内存)不均衡,所以要求某些节点不能成为Primary
我们知道mongodb的设置:
  除了仲裁节点,其他每个节点都有个优先权,可以手动设置优先权来决定谁的成为primay的权重最大。
  副本集中通过设置priority的值来决定优先权的大小,这个值的范围是0--100,值越大,优先权越高。
默认的值是1,rs.conf是不显示的;
如果值是0,那么不能成为primay。


1.规划时直接设置,这个就略过了
2.在线加入的节点配置:
配置过程:
通过修改priority的值来实现(默认的优先级是1(0-100),priority的值设的越大,就优先成为主)
1)PRIMARY> config=rs.conf()
2)PRIMARY>config.members[0].priority = 3
3)PRIMARY> rs.reconfig(config)
注意:第2步members大括号里面的成员和_id是没有关系的,而是rs.conf查出来节点的数值的顺序;
这些操作必须在Primary上进程。

参考文档:http://docs.mongodb.org/manual/tutorial/force-member-to-be-primary/

------------------------------------------------

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip -V  #查看pip版本
pip安装好之后安装插件
pip install mongo-connector
pip install elastic2-doc-manager[elastic5]

如果出现 python 版本过低的提示,那就升级一下python

yum install gcc gcc-c++ -y
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz
tar -zxvf Python-3.6.5.tgz
cd Python-3.6.5
./configure
make
make install

这一步可能遇到的问题:
zipimport.ZipImportError: can't decompress data; zlib not available
解决方法:
yum install zlib zlib-devel -y

验证当前系统下安装的python版本号
python -V
python3 -V

使用下面命令安装就不会出错:
pip3 install mongo-connector

设置3.6.5为默认版本
  查看 Python 的路径,在 /usr/bin 下面。可以看到 python 链接的是 python 2.7,所以,执行 python 就相当于执行 python 2.7。

[root@ansible ~]# ls -al /usr/bin | grep python
-rwxr-xr-x.   1 root root       11232 Dec  2  2016 abrt-action-analyze-python
lrwxrwxrwx.   1 root root           7 May 26  2017 python -> python2
lrwxrwxrwx.   1 root root           9 May 26  2017 python2 -> python2.7
-rwxr-xr-x.   1 root root        7136 Nov  6  2016 python2.7
将原来 python 的软链接重命名:

# mv /usr/bin/python /usr/bin/python.bak
将 python 链接至 python3:

# ln -s /usr/local/bin/python3 /usr/bin/python
五、配置yum
   升级 Python 之后,由于将默认的 python 指向了 python3,yum 不能正常使用,需要编辑 yum 的配置文件,此时:

[root@ansible-admin Python-3.6.5]# yum list
  File "/usr/bin/yum", line 30
    except KeyboardInterrupt, e:

SyntaxError: invalid syntax
  修改/usr/bin/yum和/usr/libexec/urlgrabber-ext-down,将 #!/usr/bin/python 改为 #!/usr/bin/python2.7,保存退出即可。

另外升级 python3 后使用firewall-cmd 命令是,提示错误:Traceback (most recent call last):  File "/usr/bin/firewall-cmd", line 24, in <module>
    from gi.repository import GObject
ImportError: No module named repository


解决方法: 首先,修改/usr/bin/firewall-cmd文件头部, 默认是 “#!/usr/bin/python” ,需要修改为: “#!/usr/bin/python/python2.7”

如果按照第一步修改完以后,还是提示该错误,说明python2.7中缺少模块,需要执行以下命令进行安装模块

"pip install gi"

启动同步进程:

mongo-connector -m 127.0.0.1:27017 -t 127.0.0.1:9200 -d elastic2_doc_manager &

命令参数:
-m mongodb_host:port —— 数据源地址,mongodb数据库地址。
-t target_host:port —— 数据目的地地址,elasticsearch/solr/mongodb集群地址。建议为集群中的协调节点的地址。
-d xxx_doc_manager —— 数据目的地的document类型。例如:
将mongodb中的数据同步到elasticsearch,使用elastic_doc_manager或elastic2_doc_manager。 
将mongodb中的数据同步到solr,使用solr_doc_manager。
将mongodb中数据同步到其他mongodb,使用mongo_doc_manager。
-n db.collection ... —— 待同步的数据库及其collection。默认同步所有数据库。
-i filed_name ... —— 待同步的字段。默认同步所有字段。
-o mongodb_oplog_position.oplog —— mongo-connector的oplog。默认在mongo-connector命令执行目录下创建oplog.timestamp文件。
建议重新分配存储位置(也可重新分配存储文件名),例如 /opt/mongo-connector.oplog。
--auto-commit-interval —— 数据同步间隔。默认在不同系统上有不同的值。设置为0表示mongodb中的任何操作立即同步到数据目的地。
--continue-on-error —— 一条数据同步失败,日志记录该失败操作,继续后续同步操作。默认为中止后续同步操作。
同步注意实现:
1. mongodb必须开启副本集(Replica Set)。开启副本集才会产生oplog,副本拷贝主分片的oplog并通过oplog与主分片进行同步。
mongo-connector也是通过oplog进行数据同步,故必须开启副本集。

2. 使用mongo-connector命令同步数据时,-m参数中的mongodb地址应该是主/从分片的地址,
从该地址登录可以看见并操作local数据库(oplog存储在local.oplog.rs);不能使用mongoos地址。

3. 使用mongo-connector命令同步数据时 ,mongo-connector的oplog(参照-o参数)不能随便删除,
否则会引起重新同步所有数据的问题。该问题可以通过--no-dump选项关闭。

4. 生产环境下建议将mongo-connector配置为系统服务,运行mongo-connector时采用配置文件的方式

如果版本有更新,参考这个网址:

https://github.com/yougov/mongo-connector

----------------------------------------------

如果需要启动验证,创建一个用户用于远程管理:

cd /usr/local/mongodb/bin
./mongo

use admin;
db.createUser({user:"myname",pwd:"youpassword",roles:[{role:"root",db:"admin"}]});
db.getUsers();
db.auth("myname","youpassword") //验证登陆

MongoDB的oplogSize修改
use local
db.adminCommand({replSetResizeOplog:1, size: 16000});

查询oplog的大小及保存的操作记录持续的时长
db.printReplicationInfo()

查询从节点的数据源列表,其中有数据滞后的时间
db.printSlaveReplicationInfo()

 

db.changeUserPassword('myname','newpassword'); //后期需要改密码,可以用这个命令。

创建一个密钥文件,用于mongodb之间认证

echo "627607cd4a5aaadcf3bc1aa2d7ea93e9">/mydata/mongodb/keyfile
chmod 600 /mydata/mongodb/keyfile

MongoDB配置按天存储日志文件,crontab的配置如下:

05 00 * * * /usr/local/mongodb/bin/mongo 127.0.0.1:27017/admin --eval "db.auth('myname','youpassword');db.runCommand({logRotate:1});"
05 00 * * * /usr/local/mongodb/bin/mongo 127.0.0.1:27018/admin --eval "db.auth('myname','youpassword');db.runCommand({logRotate:1});"

可以把下面新的命令行加入到启动项中:

/usr/local/mongodb/bin/mongod --dbpath=/mydata/mongodb/data --logpath=/mydata/mongodb/logs --logappend --auth --port=27017 --fork --replSet rs3 --bind_ip=0.0.0.0 --keyFile=/mydata/mongodb/keyfile
/usr/local/mongodb/bin/mongod --dbpath=/mydata/mongodb/data2 --logpath=/mydata/mongodb/logs2 --logappend --auth --port=27018 --fork --replSet rs3 --bind_ip=0.0.0.0 --keyFile=/mydata/mongodb/keyfile
mongo-connector -m 127.0.0.1:27017 -t 127.0.0.1:9200 -d elastic2_doc_manager --admin-username myname --password youpassword >/tmp/mongo-connector.log 2>&1

另外还可以在mongo-connector命令参数中加入这两个参数 --continue-on-error --oplog-ts=/etc/oplog.timestamp

这样就完成了。elasticsearch 安装参见我另一文档。如果有疑问可以留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值