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


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



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=yfset1


3.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=yfset1


3.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}



0 0
原创粉丝点击