Mongodb 开启auth 异地主从同步

mongodb  

一、环境说明

  • 刚好接到使用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
方式二
  • 备份从库

  • 重建主库,导入新数据