一、环境说明
- 刚好接到使用Mongodb作为数据存储的项目,数据为保证可靠性,部署异地主从,由于考虑成本原因未采用三节点副本集的架构。
开启Auth需要用到keyFile的验证
主:
10.10.0.100- 从:
10.10.0.200
二、YUM安装
- 主、从分别安装好mongodb
touch /etc/yum.repos.d/mongodb-org-3.2.repo
echo -e "[mongodb-org-3.2]\nname=MongoDB Repository\nbaseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/3.2/x86_64/\ngpgcheck=0\nenabled=1\n" > /etc/yum.repos.d/mongodb-org-3.2.repo
yum install -y mongodb-org-3.2.0 mongodb-org-server-3.2.0 mongodb-org-shell-3.2.0 mongodb-org-mongos-3.2.0 mongodb-org-tools-3.2.0
rm -f /etc/mongod.conf
cat >> /etc/mongod.conf <<EOF
systemLog:
destination: file
logAppend: true
path: /data/mongodb/log/mongod.log
storage:
dbPath: /data/mongodb/data
journal:
enabled: true
processManagement:
fork: true # fork and run in background
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile
net:
port: 27017
bindIp: 127.0.0.1 # Listen to local interface only, comment to listen on all interfaces.
security:
authorization: enabled
EOF
mkdir -p /data/mongodb/data
mkdir -p /data/mongodb/log
三、分别配置好keyfile文件
- 生成keyfile
openssl rand -base64 2048 >> mongo.key
- 修改key权限为 600
chmod 600 mongo.key
四、启动
- 主
mongod --master -f /etc/mongod.conf --keyFile /data/mongodb/keyfile/mongo.key
- 从
mongod --slave --source 10.10.0.100:27017 -f /etc/slave.conf --keyFile /data/slave/keyfile/mongo.key
五、测试
- 主库创建全局账号
#!/bin/bash
mongo_connect="mongo 127.0.0.1/admin"
cmd_use_admin="db = db.getSiblingDB('admin');"
cmd_create_user="db.createUser({\"user\":\"sa\", \"pwd\":\"123456\", \"roles\":[\"root\"]});"
echo $cmd_use_admin > dbcmd.js
echo $cmd_create_user >> dbcmd.js
execute="$mongo_connect dbcmd.js"
echo "#!/bin/sh" > createDBUser.sh
echo $execute >> createDBUser.sh
sh createDBUser.sh && rm -f createDBUser.sh
- 插入测试数据
use test
db.hahaha.save({wawa:"hahahhaha"})
- 在从库中查看是否同步
use test
db.hahaha.find()
- 如果有数据则表示同步成功
六、主库宕机如何将从库切为主库
方式一
- 停止从库
kill -2 PID
- 删除从数据目录中的 local.*
rm -rf /data/mongodb/data/db/local.*
- 以 --master 模式启动从库 (注意修改原有端口)
mongod --master -f /etc/mongod.master.conf
方式二
备份从库
重建主库,导入新数据