“ 上一篇介绍了MongoDB的基础操作。本文主要介绍MongoDB的主从同步Master和Slave的配置方法以及双主机的配置方法”
1 Master和Slave的配置方法
1.1 预览
# 主机器(master)
master: 192.168.189.131
mongodb home: /opt/mongodb-2.4.9
data file: /opt/mongodbdata/mongodb_db
log file: /opt/mongodbdata/mongodb_logs
# 从机器(slave)
slave: 192.168.189.132
mongodb home: /opt/mongodb-2.4.9
data file: /opt/mongodbdata/mongodb_db
log file: /opt/mongodbdata/mongodb_logs
rm -rf /opt/mongodbdata/*
mkdir /opt/mongodbdata/mongodb_db
mkdir /opt/mongodbdata/mongodb_logs
# 注意:这里,最好是用scp命令把主机器的mongodb的所有目录和文件远程拷贝
# 到从机器上去, 之前不要去启动,主机器,否则启动从的时候会报错(在
# 日志文件中可以看到错误:mongodb ERROR: Client::~Client _context should be null but is not;client:replslave)
# 这样的话, 只需要把数据文件data目录下的所有文件删除,重新启动即可
# 复制:两边目录尽可能是一致的文件夹
scp -r -P22 mongodb-2.4.9/
mongodbdata/ root@192.168.189.132:/opt/
1.2 建立conf文件
mkdir /opt/mongodb-2.4.9/conf
# 红色为主从需要的配置文件
[root@localhost conf]# more mongod.conf
port=27017 # 端口号
fork=true # 以守护进程的方式运行,创建服务器进程
logpath=/opt/mongodbdata/mongodb_logs/mongodb.log # 日志输出文件路径
logappend=true # 日志输出方式
dbpath=/opt/mongodbdata/mongodb_db # 数据库路径
shardsvr=true # 设置是否分片
maxConns=600 # 数据库的最大连接数
master=true
oplogSize=2048 # 类似于mysql的日志滚动,单位m
[root@localhost conf]# more mongod.conf
port=27017 # 端口号
fork=true # 以守护进程的方式运行,创建服务器进程
logpath=/opt/mongodbdata/mongodb_logs/mongodb.log # 日志输出文件路径
logappend=true #日志输出方式
dbpath=/opt/mongodbdata/mongodb_db # 数据库路径
shardsvr=true # 设置是否分片
maxConns=600 # 数据库的最大连接数
slave=true
source=192.168.189.131:27017 # 指定主mongodb server
slavedelay=10 # 延迟复制,单位为秒
autoresync=true # 当发现从服务器的数据不是最新时,向主服务器请求同步数据
1.3 启动
cd mongodb-2.4.9/bin/
./mongod -f
/opt/mongodb-2.4.9/conf/mongod.conf
1.4 测试
# Master:
MongoDB shell version: 2.0.7
connecting to: test
> show dbs
local 4.201171875GB
> use xin
switched to db xin
> db.test.save({title:"just
test"})
> db.test.find()
{ "_id" :ObjectId("502d3643c5664ca66103a7cf"), "title" : "just
test" }
> show dbs
local 4.201171875GB
xin 0.203125GB
# slave:
> show dbs
local 0.078125GB
xin 0.203125GB
# 再查看复制状态
> db.printReplicationInfo()
this is a slave, printing slave replication info.
source: 10.48.255.244:27017
syncedTo:
Thu Aug 16 2012 18:33:27 GMT+0000 (UTC)
=
18 secs ago (0.01hrs)
>
> db.printSlaveReplicationInfo()
source: 10.48.255.244:27017
syncedTo:
Thu Aug 16 2012 18:34:37 GMT+0000 (UTC)
=
20 secs ago (0.01hrs)
2 双主机
2.1 建立conf文件
# 红色的为后添加,master slave 配置文件基本一致source 为对方的主机
[root@localhost conf]# more mongod.conf
port=27017 # 端口号
fork=true # 以守护进程的方式运行,创建服务器进程
logpath=/opt/mongodbdata/mongodb_logs/mongodb.log # 日志输出文件路径
logappend=true #日志输出方式
dbpath=/opt/mongodbdata/mongodb_db # 数据库路径
shardsvr=true # 设置是否分片
maxConns=600 # 数据库的最大连接数
master=true
oplogSize=2048 # 类似于mysql的日志滚动,单位m
slave=true
source=192.168.189.132:27017 # 指定主mongodb server
slavedelay=10 # 延迟复制,单位为秒
autoresync=true # 当发现从服务器的数据不是最新时,向主服务器请求同步数据
slave:
[root@localhost conf]# more mongod.conf
port=27017 # 端口号
fork=true # 以守护进程的方式运行,创建服务器进程
logpath=/opt/mongodbdata/mongodb_logs/mongodb.log # 日志输出文件路径
logappend=true # 日志输出方式
dbpath=/opt/mongodbdata/mongodb_db # 数据库路径
shardsvr=true # 设置是否分片
maxConns=600 # 数据库的最大连接数
master=true
oplogSize=2048 #类 似于mysql的日志滚动,单位m
slave=true
source=192.168.189.131:27017 # 指定主mongodb server
slavedelay=10 # 延迟复制,单位为秒
autoresync=true # 当发现从服务器的数据不是最新时,向主服务器请求同步数据
# slave
[root@localhost conf]# more mongod.conf
port=27017 # 端口号
fork=true # 以守护进程的方式运行,创建服务器进程
logpath=/opt/mongodbdata/mongodb_logs/mongodb.log # 日志输出文件路径
logappend=true # 日志输出方式
dbpath=/opt/mongodbdata/mongodb_db # 数据库路径
shardsvr=true # 设置是否分片
maxConns=600 # 数据库的最大连接数
master=true
oplogSize=2048 # 类似于mysql的日志滚动,单位m
slave=true
source=192.168.189.131:27017 #指定主mongodb server
slavedelay=10 #延迟复制,单位为秒
autoresync=true #当发现从服务器的数据不是最新时,向主服务器请求同步数
2.2 启动
cd mongodb-2.4.9/bin/
./mongod -f
/opt/mongodb-2.4.9/conf/mongod.conf
2.3 测试
# Master
> show dbs
local 2.0771484375GB
> use xin
switched to db xin
> db.test.find()
{ "_id" :
ObjectId("547ddf806e04e32bbe9abf93"), "title" : "just
test" }
> show dbs
local 2.0771484375GB
xin 0.203125GB
# slave
> show dbs
local 2.0771484375GB
xin 0.203125GB
> use frank
switched to db frank
> db.ftest.save({f1:"f1
test"})
> db.ftest.find()
{ "_id" : ObjectId("890ddfe66123ddf877ea62a2"),
"f1" : "f1 test" }
>
# Master:
> show dbs
local 2.0771484375GB
frank 0.203125GB
xin 0.203125GB
> db.ftest.find()
{ "_id" :
ObjectId("890ddfe66123ddf877ea62a2"), "f1" : "f1
test" }
3 结束语
由于MongoDB灵活的数据模型、易于扩展、高性能、高可用等一系列突出的优点,广泛应用在物联网、游戏、物流、直播、社交等各个领域。
如果您喜欢这篇文章,可扫描下方二维码,关注公众号(SRE技术栈)查看更多文章!