Mongo 主从

    xiaoxiao2021-03-25  153

    一、Master-Slave 方式

    1、主节点信息【主节点】

    2、主节点配置【主节点】

    bind_ip=192.168.206.158 port=27017 fork=true dbpath=/usr/local/mongodb/node01/data/db logpath=/usr/local/mongodb/node01/logs/mongodb.log logappend=true # master config master=true source=192.168.206.159:27017

    3、从节点信息【从节点】

    4、从节点增加配置【从节点】

    bind_ip=192.168.206.159 port=27017 fork=true dbpath=/usr/local/mongodb/node01/data/db logpath=/usr/local/mongodb/node01/logs/mongodb.log logappend=true #slave config slave=true source=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 # 默认27017 port=27001 # 是否以守护进程方式运行 fork=true # 日志文件位置 logpath=/usr/local/mongodb/node01/logs/mongodb.log # 以追加方式写入日志 logappend=true # 数据库文件位置 dbpath=/usr/local/mongodb/node01/data/db # 副本集名称:名称相同的副本集表示在同一个副本中 replSet=yfset1

    3.2、node02节点配置

    # 访问地址 bind_ip=192.168.206.158 # 默认27017 port=27002 # 是否以守护进程方式运行 fork=true # 日志文件位置 logpath=/usr/local/mongodb/node02/logs/mongodb.log # 以追加方式写入日志 logappend=true # 数据库文件位置 dbpath=/usr/local/mongodb/node02/data/db # 副本集名称:名称相同的副本集表示在同一个副本中 replSet=yfset1

    3.3、node03节点配置

    # 访问地址 bind_ip=192.168.206.158 # 默认27017 port=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 }

    转载请注明原文地址: https://ju.6miu.com/read-7016.html

    最新回复(0)