我是实践派之mongo的一主多从
mongo一主多从
为什么要做一主多从?
mongodb天生就是为了分布式而生的,为了保证数据读写分离和数据安全,把数据放在不同的机子上,可以减少主节点的读压力,而让从节点去承受读请求压力。
主节点用于写,然后同步到从节点去。同样当主节点挂掉之后,由于还有从节点,可以进行自动选举,重新生成一个主节点。我之前使用的单个主从,一旦主节点挂了,从节点无法自动根据选举机制成为主节点,这样会造成一直等待的结果。根据实验和经验,奇数个实例或者说节点利用率更高,也更有容灾性。
我在自己的项目中也开始决定这么做,不过由于我没有太多闲置的云服务器,所以我运行三个不同端口的实例来做这个一主二从。
分别写三个配置文件:
master:
port=27017
fork=true
logpath=/usr/local/mongodb/logs/mongodb.log
logappend=true
dbpath=/usr/local/mongodb/data
maxConns=1024
master=true
oplogSize=2048
slave1:
port=27018
fork=true
logpath=/usr/local/mongodb/logs/slave1.log
logappend=true
dbpath=/usr/local/mongodb/data/slave1
maxConns=1024
slave=true
oplogSize=2048
source=127.0.0.1:27017
autoresync=true
slave2:
port=27019
fork=true
logpath=/usr/local/mongodb/logs/slave2.log
logappend=true
dbpath=/usr/local/mongodb/data/slave2
maxConns=1024
slave=true
oplogSize=2048
source=127.0.0.1:27017
autoresync=true
然后连续起三个实例:
mongod -f /usr/local/mongodb/conf/mongod.conf & mongod -f /usr/local/mongodb/conf/slave1.conf & mongod -f /usr/local/mongodb/conf/slave2.conf
当然如果之前有数据,还需要导出历史数据,命令如下:
mongodump -h dbhost -d dataname [-c collectioName] -o /out/path
导出的bson的格式数据,非常的省内存。
导入数据命令如下:
mongorestore -h dbhost -d databaseName /out/path
引入单个collection:
mongorestore --collection people --db accounts dump/accounts/people.bson
感谢mongo,让主从架构变得如此简单。
更多关于mongorestore的命令参数和使用,见这个链接