在网上找了很多资料,还是得自己动手做一次,才知道什么是对的。整理使用的安装命令如下:
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 安装参见我另一文档。如果有疑问可以留言。