Mongo 主从
来源:互联网 发布:vb 图片放大 编辑:程序博客网 时间:2024/06/14 14:49
一、Master-Slave 方式
1、主节点信息【主节点】
2、主节点配置【主节点】
bind_ip=192.168.206.158port=27017fork=truedbpath=/usr/local/mongodb/node01/data/dblogpath=/usr/local/mongodb/node01/logs/mongodb.loglogappend=true# master configmaster=truesource=192.168.206.159:27017
4、从节点增加配置【从节点】
bind_ip=192.168.206.159port=27017fork=truedbpath=/usr/local/mongodb/node01/data/dblogpath=/usr/local/mongodb/node01/logs/mongodb.loglogappend=true#slave configslave=truesource=192.168.206.158:27017
5、启动主节点服务【主节点】
命令:mongod --config mongodb.conf
6、启动从节点服务【从节点】
命令:mongod --config mongodb.conf
7、连接主节点客户端【主节点】
命令:mongo --host 192.168.206.158 --port 27017
8、查看当前节点是否是主节点及相关信息【主节点】
命令:rs.isMaster()
9、连接从节点客户端【从节点】
命令:mongo --host 192.168.206.159 --port 27017
10、查看当前节点是否是主节点及其相关信息【从节点】
命令:rs.isMaster()
11、从节点备份数据的来源【从节点】
命令:rs.printSlaveReplicationInfo()
12、从节点默认不可读写,需要执行命令允许【从节点】
命令:rs.slaveOk()
13、查看系统数据库,查看主节点信息【从节点】
14、主节点插入数据测试
15、从节点上查看备份情况
结果:成功
二、副本集【仲裁模式】
1、节点配置目录
|----根目录:mongodb
|------------主节点:node01
|--------------------数据目录:data
|----------------------------数据库目录:db
|--------------------日志目录:logs
|------------从节点:node02
|--------------------数据目录:data
|----------------------------数据库目录:db
|--------------------日志目录:logs
|------------仲裁节点:node03
|--------------------数据目录:data
|----------------------------数据库目录:db
|--------------------日志目录:logs
2、副本集工作原理
2.1、主节点的所有数据操作都会存在一个系统表中,即 local 数据库的 oplog.rs 集合中
2.2、从节点异步的定期轮询主节点上的 oplog.rs 集合,然后对自己的数据副本执行更新操作
2.3、第一次同步时采用全量,而后依次采用增将的方式,执行增量数据的命令达到同步的作用
3、配置文件
3.1、node01节点配置
# 访问地址bind_ip=192.168.206.158# 默认27017port=27001# 是否以守护进程方式运行fork=true# 日志文件位置logpath=/usr/local/mongodb/node01/logs/mongodb.log# 以追加方式写入日志logappend=true# 数据库文件位置dbpath=/usr/local/mongodb/node01/data/db# 副本集名称:名称相同的副本集表示在同一个副本中replSet=yfset13.2、node02节点配置
# 访问地址bind_ip=192.168.206.158# 默认27017port=27002# 是否以守护进程方式运行fork=true# 日志文件位置logpath=/usr/local/mongodb/node02/logs/mongodb.log# 以追加方式写入日志logappend=true# 数据库文件位置dbpath=/usr/local/mongodb/node02/data/db# 副本集名称:名称相同的副本集表示在同一个副本中replSet=yfset13.3、node03节点配置
# 访问地址bind_ip=192.168.206.158# 默认27017port=27003# 是否以守护进程方式运行fork=true# 日志文件位置logpath=/usr/local/mongodb/node03/logs/mongodb.log# 以追加方式写入日志logappend=true# 数据库文件位置dbpath=/usr/local/mongodb/node03/data/db# 副本集名称:名称相同的副本集表示在同一个副本中replSet=yfset1
4、启动服务
4.1、启动 node01 服务
命令:mongod --config node01/mongodb.conf
4.2、启动 node02 服务
命令:mongod --config node02/mongodb.conf
4.3、启动 node03 服务
命令:mongod --config node03/mongodb.conf
5、连接任意客户端
命令:mongo --host 192.168.206.158 --port 27002
6、初始化副本操作
命令:rs.initiate({"_id":"yfset1",members:[{"_id":1,host:"192.168.206.158:27001",priority:3},{"_id":2,host:"192.168.206.158:27002",priority:4},{"_id":3,host:"192.168.206.158:27003",arbiterOnly:true}]})
rs.initiate({"_id":"yfset1",members:[{"_id":1,host:"192.168.206.158:27001",priority:3},{"_id":2,host:"192.168.206.158:27002",priority:4},{"_id":3,host:"192.168.206.158:27003",arbiterOnly:true}]})
7、查看整个副本状态
命令:rs.status()
{ "set": "yfset1", "date": ISODate("2017-03-09T22:38:51.807Z"), "myState": 1, "term": NumberLong(1), "heartbeatIntervalMillis": NumberLong(2000), "optimes": { "lastCommittedOpTime": { "ts": Timestamp(1489099122, 1), "t": NumberLong(1) }, "appliedOpTime": { "ts": Timestamp(1489099122, 1), "t": NumberLong(1) }, "durableOpTime": { "ts": Timestamp(1489099122, 1), "t": NumberLong(1) } }, "members": [ { "_id": 1, "name": "192.168.206.158:27001", "health": 1, "state": 2, "stateStr": "SECONDARY", "uptime": 70, "optime": { "ts": Timestamp(1489099122, 1), "t": NumberLong(1) }, "optimeDurable": { "ts": Timestamp(1489099122, 1), "t": NumberLong(1) }, "optimeDate": ISODate("2017-03-09T22:38:42Z"), "optimeDurableDate": ISODate("2017-03-09T22:38:42Z"), "lastHeartbeat": ISODate("2017-03-09T22:38:50.164Z"), "lastHeartbeatRecv": ISODate("2017-03-09T22:38:49.924Z"), "pingMs": NumberLong(0), "syncingTo": "192.168.206.158:27002", "configVersion": 1 }, { "_id": 2, "name": "192.168.206.158:27002", "health": 1, "state": 1, "stateStr": "PRIMARY", "uptime": 122, "optime": { "ts": Timestamp(1489099122, 1), "t": NumberLong(1) }, "optimeDate": ISODate("2017-03-09T22:38:42Z"), "infoMessage": "could not find member to sync from", "electionTime": Timestamp(1489099072, 1), "electionDate": ISODate("2017-03-09T22:37:52Z"), "configVersion": 1, "self": true }, { "_id": 3, "name": "192.168.206.158:27003", "health": 1, "state": 7, "stateStr": "ARBITER", "uptime": 70, "lastHeartbeat": ISODate("2017-03-09T22:38:50.164Z"), "lastHeartbeatRecv": ISODate("2017-03-09T22:38:47.840Z"), "pingMs": NumberLong(0), "configVersion": 1 } ], "ok": 1}
8、主节点插入数据
命令:for(var i = 0 ; i < 100 ; i++)db.collectontest.insert({name:"yangfan",age:18})
9、从节点测试备份情况
结果:成功
10、测试主节点宕机后的状态情况
结果:从节点切换成主节点
{ "set": "yfset1", "date": ISODate("2017-03-09T22:45:36.970Z"), "myState": 1, "term": NumberLong(2), "heartbeatIntervalMillis": NumberLong(2000), "optimes": { "lastCommittedOpTime": { "ts": Timestamp(1489099522, 1), "t": NumberLong(1) }, "appliedOpTime": { "ts": Timestamp(1489099534, 2), "t": NumberLong(2) }, "durableOpTime": { "ts": Timestamp(1489099534, 2), "t": NumberLong(2) } }, "members": [ { "_id": 1, "name": "192.168.206.158:27001", "health": 1, "state": 1, "stateStr": "PRIMARY", "uptime": 530, "optime": { "ts": Timestamp(1489099534, 2), "t": NumberLong(2) }, "optimeDate": ISODate("2017-03-09T22:45:34Z"), "infoMessage": "could not find member to sync from", "electionTime": Timestamp(1489099534, 1), "electionDate": ISODate("2017-03-09T22:45:34Z"), "configVersion": 1, "self": true }, { "_id": 2, "name": "192.168.206.158:27002", "health": 0, "state": 8, "stateStr": "(not reachable/healthy)", "uptime": 0, "optime": { "ts": Timestamp(0, 0), "t": NumberLong(-1) }, "optimeDurable": { "ts": Timestamp(0, 0), "t": NumberLong(-1) }, "optimeDate": ISODate("1970-01-01T00:00:00Z"), "optimeDurableDate": ISODate("1970-01-01T00:00:00Z"), "lastHeartbeat": ISODate("2017-03-09T22:45:36.403Z"), "lastHeartbeatRecv": ISODate("2017-03-09T22:45:24.393Z"), "pingMs": NumberLong(0), "lastHeartbeatMessage": "Connection refused", "configVersion": -1 }, { "_id": 3, "name": "192.168.206.158:27003", "health": 1, "state": 7, "stateStr": "ARBITER", "uptime": 474, "lastHeartbeat": ISODate("2017-03-09T22:45:36.402Z"), "lastHeartbeatRecv": ISODate("2017-03-09T22:45:32.908Z"), "pingMs": NumberLong(0), "configVersion": 1 } ], "ok": 1}
11、重启主节点后的状态情况
结果:原主节点恢复成主节点,原因是仲裁模式下,权重大的为主节点
{ "set": "yfset1", "date": ISODate("2017-03-09T23:18:39.874Z"), "myState": 1, "term": NumberLong(3), "heartbeatIntervalMillis": NumberLong(2000), "optimes": { "lastCommittedOpTime": { "ts": Timestamp(1489101511, 1), "t": NumberLong(3) }, "appliedOpTime": { "ts": Timestamp(1489101511, 1), "t": NumberLong(3) }, "durableOpTime": { "ts": Timestamp(1489101511, 1), "t": NumberLong(3) } }, "members": [ { "_id": 1, "name": "192.168.206.158:27001", "health": 1, "state": 2, "stateStr": "SECONDARY", "uptime": 1798, "optime": { "ts": Timestamp(1489101511, 1), "t": NumberLong(3) }, "optimeDurable": { "ts": Timestamp(1489101511, 1), "t": NumberLong(3) }, "optimeDate": ISODate("2017-03-09T23:18:31Z"), "optimeDurableDate": ISODate("2017-03-09T23:18:31Z"), "lastHeartbeat": ISODate("2017-03-09T23:18:38.608Z"), "lastHeartbeatRecv": ISODate("2017-03-09T23:18:38.545Z"), "pingMs": NumberLong(0), "syncingTo": "192.168.206.158:27002", "configVersion": 1 }, { "_id": 2, "name": "192.168.206.158:27002", "health": 1, "state": 1, "stateStr": "PRIMARY", "uptime": 1798, "optime": { "ts": Timestamp(1489101511, 1), "t": NumberLong(3) }, "optimeDate": ISODate("2017-03-09T23:18:31Z"), "electionTime": Timestamp(1489099731, 1), "electionDate": ISODate("2017-03-09T22:48:51Z"), "configVersion": 1, "self": true }, { "_id": 3, "name": "192.168.206.158:27003", "health": 1, "state": 7, "stateStr": "ARBITER", "uptime": 1798, "lastHeartbeat": ISODate("2017-03-09T23:18:38.632Z"), "lastHeartbeatRecv": ISODate("2017-03-09T23:18:38.368Z"), "pingMs": NumberLong(0), "configVersion": 1 } ], "ok": 1}
三、副本集【非仲裁模式】
1、第五步之前(包含第五步)和仲裁模式相同,区别在于初始化副本操作不同,之后的现象随着不同
2、初始化副本操作
命令:rs.initiate({"_id":"yfset1",members:[{"_id":1,host:"192.168.206.158:27001"},{"_id":2,host:"192.168.206.158:27002"},{"_id":3,host:"192.168.206.158:27003"}]})
rs.initiate({"_id":"yfset1",members:[{"_id":1,host:"192.168.206.158:27001"},{"_id":2,host:"192.168.206.158:27002"},{"_id":3,host:"192.168.206.158:27003"}]})
3、整个副本状态
命令:rs.status()
{ "set": "yfset1", "date": ISODate("2017-03-09T23:30:20.685Z"), "myState": 1, "term": NumberLong(1), "heartbeatIntervalMillis": NumberLong(2000), "optimes": { "lastCommittedOpTime": { "ts": Timestamp(1489102217, 1), "t": NumberLong(1) }, "appliedOpTime": { "ts": Timestamp(1489102217, 1), "t": NumberLong(1) }, "durableOpTime": { "ts": Timestamp(1489102217, 1), "t": NumberLong(1) } }, "members": [ { "_id": 1, "name": "192.168.206.158:27001", "health": 1, "state": 1, "stateStr": "PRIMARY", "uptime": 95, "optime": { "ts": Timestamp(1489102217, 1), "t": NumberLong(1) }, "optimeDate": ISODate("2017-03-09T23:30:17Z"), "infoMessage": "could not find member to sync from", "electionTime": Timestamp(1489102177, 1), "electionDate": ISODate("2017-03-09T23:29:37Z"), "configVersion": 1, "self": true }, { "_id": 2, "name": "192.168.206.158:27002", "health": 1, "state": 2, "stateStr": "SECONDARY", "uptime": 53, "optime": { "ts": Timestamp(1489102217, 1), "t": NumberLong(1) }, "optimeDurable": { "ts": Timestamp(1489102217, 1), "t": NumberLong(1) }, "optimeDate": ISODate("2017-03-09T23:30:17Z"), "optimeDurableDate": ISODate("2017-03-09T23:30:17Z"), "lastHeartbeat": ISODate("2017-03-09T23:30:19.368Z"), "lastHeartbeatRecv": ISODate("2017-03-09T23:30:19.936Z"), "pingMs": NumberLong(0), "syncingTo": "192.168.206.158:27003", "configVersion": 1 }, { "_id": 3, "name": "192.168.206.158:27003", "health": 1, "state": 2, "stateStr": "SECONDARY", "uptime": 53, "optime": { "ts": Timestamp(1489102217, 1), "t": NumberLong(1) }, "optimeDurable": { "ts": Timestamp(1489102217, 1), "t": NumberLong(1) }, "optimeDate": ISODate("2017-03-09T23:30:17Z"), "optimeDurableDate": ISODate("2017-03-09T23:30:17Z"), "lastHeartbeat": ISODate("2017-03-09T23:30:19.367Z"), "lastHeartbeatRecv": ISODate("2017-03-09T23:30:19.925Z"), "pingMs": NumberLong(0), "syncingTo": "192.168.206.158:27001", "configVersion": 1 } ], "ok": 1}4、主节点插入数据
命令:for(var i = 0 ; i < 10 ; i++)db.testcollection.insert({name:"yang"+i,age:i})
5、测试节点查看数据备份情况
5.1、从节点 node02 数据备份情况
5.2、从节点 node03 数据备份情况
6、测试主节点宕机后的状态情况
结果:从节点切换成主节点
{ "set": "yfset1", "date": ISODate("2017-03-09T23:38:45.367Z"), "myState": 1, "term": NumberLong(2), "heartbeatIntervalMillis": NumberLong(2000), "optimes": { "lastCommittedOpTime": { "ts": Timestamp(1489102707, 1), "t": NumberLong(1) }, "appliedOpTime": { "ts": Timestamp(1489102707, 1), "t": NumberLong(1) }, "durableOpTime": { "ts": Timestamp(1489102707, 1), "t": NumberLong(1) } }, "members": [ { "_id": 1, "name": "192.168.206.158:27001", "health": 0, "state": 8, "stateStr": "(not reachable/healthy)", "uptime": 0, "optime": { "ts": Timestamp(0, 0), "t": NumberLong(-1) }, "optimeDurable": { "ts": Timestamp(0, 0), "t": NumberLong(-1) }, "optimeDate": ISODate("1970-01-01T00:00:00Z"), "optimeDurableDate": ISODate("1970-01-01T00:00:00Z"), "lastHeartbeat": ISODate("2017-03-09T23:38:44.997Z"), "lastHeartbeatRecv": ISODate("2017-03-09T23:38:33.743Z"), "pingMs": NumberLong(0), "lastHeartbeatMessage": "Connection refused", "configVersion": -1 }, { "_id": 2, "name": "192.168.206.158:27002", "health": 1, "state": 2, "stateStr": "SECONDARY", "uptime": 556, "optime": { "ts": Timestamp(1489102707, 1), "t": NumberLong(1) }, "optimeDurable": { "ts": Timestamp(1489102707, 1), "t": NumberLong(1) }, "optimeDate": ISODate("2017-03-09T23:38:27Z"), "optimeDurableDate": ISODate("2017-03-09T23:38:27Z"), "lastHeartbeat": ISODate("2017-03-09T23:38:44.996Z"), "lastHeartbeatRecv": ISODate("2017-03-09T23:38:42.915Z"), "pingMs": NumberLong(0), "configVersion": 1 }, { "_id": 3, "name": "192.168.206.158:27003", "health": 1, "state": 1, "stateStr": "PRIMARY", "uptime": 590, "optime": { "ts": Timestamp(1489102707, 1), "t": NumberLong(1) }, "optimeDate": ISODate("2017-03-09T23:38:27Z"), "infoMessage": "could not find member to sync from", "electionTime": Timestamp(1489102724, 1), "electionDate": ISODate("2017-03-09T23:38:44Z"), "configVersion": 1, "self": true } ], "ok": 1}7、重新主节点后的状态情况
结果:原主节点变成了现主节点的从节点
{ "set": "yfset1", "date": ISODate("2017-03-09T23:40:16.933Z"), "myState": 1, "term": NumberLong(2), "heartbeatIntervalMillis": NumberLong(2000), "optimes": { "lastCommittedOpTime": { "ts": Timestamp(1489102815, 1), "t": NumberLong(2) }, "appliedOpTime": { "ts": Timestamp(1489102815, 1), "t": NumberLong(2) }, "durableOpTime": { "ts": Timestamp(1489102815, 1), "t": NumberLong(2) } }, "members": [ { "_id": 1, "name": "192.168.206.158:27001", "health": 1, "state": 2, "stateStr": "SECONDARY", "uptime": 5, "optime": { "ts": Timestamp(1489102707, 1), "t": NumberLong(1) }, "optimeDurable": { "ts": Timestamp(1489102707, 1), "t": NumberLong(1) }, "optimeDate": ISODate("2017-03-09T23:38:27Z"), "optimeDurableDate": ISODate("2017-03-09T23:38:27Z"), "lastHeartbeat": ISODate("2017-03-09T23:40:15.074Z"), "lastHeartbeatRecv": ISODate("2017-03-09T23:40:15.807Z"), "pingMs": NumberLong(0), "configVersion": 1 }, { "_id": 2, "name": "192.168.206.158:27002", "health": 1, "state": 2, "stateStr": "SECONDARY", "uptime": 648, "optime": { "ts": Timestamp(1489102805, 1), "t": NumberLong(2) }, "optimeDurable": { "ts": Timestamp(1489102805, 1), "t": NumberLong(2) }, "optimeDate": ISODate("2017-03-09T23:40:05Z"), "optimeDurableDate": ISODate("2017-03-09T23:40:05Z"), "lastHeartbeat": ISODate("2017-03-09T23:40:15.048Z"), "lastHeartbeatRecv": ISODate("2017-03-09T23:40:14.962Z"), "pingMs": NumberLong(0), "syncingTo": "192.168.206.158:27003", "configVersion": 1 }, { "_id": 3, "name": "192.168.206.158:27003", "health": 1, "state": 1, "stateStr": "PRIMARY", "uptime": 681, "optime": { "ts": Timestamp(1489102815, 1), "t": NumberLong(2) }, "optimeDate": ISODate("2017-03-09T23:40:15Z"), "infoMessage": "could not find member to sync from", "electionTime": Timestamp(1489102724, 1), "electionDate": ISODate("2017-03-09T23:38:44Z"), "configVersion": 1, "self": true } ], "ok": 1}
- mongo 主从
- mongo主从
- Mongo 主从
- mongo主从配置
- mongo 主从数据库
- mongo主从复制
- Mongo 主从复制 原理浅析
- Mongo集群之主从复制
- windows 平台 mongo 主从配置
- mongo shell 高级之 主从复制
- 【mongoDB实战】mongo集群---主从复制篇
- Mongo服务器集群配置学习一——主从复制
- Mongo服务器集群配置学习一——主从复制
- Mongo:笔记五(数据备份,恢复 验证 主从 分片)
- Mongo主从同步local.oplog.$main oplog is empty
- Mongo实现主从复制与集群,使用Replica Sets实现
- MONGO
- mongo
- WebView的使用小结
- Mongo 介绍和使用
- APIJSON,让接口和文档见鬼去吧!
- 机器人信息收集1
- 3Sum
- Mongo 主从
- 建造者模式
- Java基础初学之数组
- 简单介绍MJRefresh的简单使用
- 学习运维——MariaDB数据库
- N皇后问题
- 20170308技术积累
- 学习笔记
- highcharts知识点