- 复制简介
配置一个单节点的mongo服务器适用与学习和测试环境,在线上真正的生产环境中我们需要使用复制将数据副本保存在多台服务器上,一台或者多台服务器挂掉之后可以顺利得通过选举算法选举出新的主节点。
这样的多台服务器组成了mongo的副本集,副本集中有一个主节点和多个从节点,主节点用于读和写,从节点用于读(需要设置slaveOk为true,并且是在客户端设置),当主节点挂掉之后或者出现一些问题(如网络不通等情况),会通过选举算法选择出新的主节点。从节点的数据总是和主节点的数据保持一致,但是会稍稍晚于主节点的数据(有时候延迟时间较大,看集群情况)。 - 配置副本集
本文将使用3台服务器作为一个副本集,下面讲述如何配置副本集
下载最新的mongodb-linux-x86_64-ubuntu1204-3.2.0.tgz,去官网下载即可
解压之后
cd bin
新建一个文件mongod.conf,写入以下内容
dbpath=/home/xxx/xxx/mongodb/db # 指定mongo的db存放位置,默认是/data/db
logpath=/home/xxx/xxx/xxx/mongodb/log.log # 指定mongo的输出日志文件
logappend=true # 日志文件采用append的方式追加到logpath中(重启mongo同样是追加)
port=27017 # mongo使用的端口
fork=true # 以后台运行的方式启动,该项为true就必须配置logpath - 复制
将该mongo目录scp到其他两台机器上
- 启动
cd bin
./mongod --replSet mondeo -f mongod.conf # replSet指定以副本集方式启动,mondeo就是这个副本集的名字,启动项配置在mongod.conf中
以上命令需要在3台服务器上都执行
- 配置副本集
打开其中一个节点的mongo
./mongo
config = {
"_id": "mondeo",
"members": [
{"_id": 0, "host": "xxx01:27017"},
{"_id": 1, "host": "xxx02:27017"},
{"_id": 2, "host": "xxx03:27017"},
]
}
其中_id就是刚刚的副本集名称
db = (new Mongo("xxx01:27017")).getDB("test")
rs.initiate(config)
过一段时间打开3台节点的mongo,会发现其中一个是primary节点,其他2个都是secondary节点,至此mongo副本集配置完毕。 - 关闭
进行mongo,use admin 然后db.shutdownServer() # 3台节点都需要
其他相关的理论本文不涉及,包括但不仅限于:仲裁者、副本集动态添加和删除、如何备份和同步、节点选举机制、rollback等