MongoDB的高可用配置

复制与复制集的相关概念

复制:将一个数据库实例中的所有数据库改变复制到另一个独立的数据库实例中。

副本集(replSet,复制集),原理上也是主从复制。

副本集与主从复制的区别是主库出现故障时,能自动主从切换,从而故障得以恢复,其它从库从新的主库同步数据,整个过程不需要手工干预。

 

副本集(replSet,复制集)的应用

1.备份

2.故障转移

3.读扩展

4.离线数据分析等

5.实例图

 

 

配置并启动3个复制集

[root@iZ4jc05d2ictd0xzg4lzteZ opt]# vi mongodbset1.cnf

 

dbpath=/opt/mongodb/data1

port=27017

logpath=/opt/mongodb/logs

fork=true

logappend=true

replSet=pcitc

 

[root@iZ4jc05d2ictd0xzg4lzteZ opt]# vi mongodbset2.cnf

 

dbpath=/opt/mongodb/data2

port=27018

logpath=/opt/mongodb/logs

fork=true

logappend=true

replSet=pcitc

 

[root@iZ4jc05d2ictd0xzg4lzteZ opt]# vi mongodbset3.cnf

 

dbpath=/opt/mongodb/data3

port=27019

logpath=/opt/mongodb/logs

fork=true

logappend=true

replSet=pcitc

 

 

./mongod -f /opt/mongodbset1.cnf

./mongod -f /opt/mongodbset2.cnf

./mongod -f /opt/mongodbset3.cnf

./mongo --port 27017

rs.status()

 

 

cfg={_id:'pcitc',members:[  {_id:0,host:'127.0.0.1:27017'},

{_id:1,host:'127.0.0.1:27018'},

{_id:2,host:'127.0.0.1:27019'}]

}

 

rs.initiate(cfg)

 

动态增加或删除复制集节点

[root@iZ4jc05d2ictd0xzg4lzteZ opt]#  vi mongodbset4.cnf

dbpath=/opt/mongodb/data4

port=27020

logpath=/opt/mongodb/logs

fork=true

logappend=true

replSet=pcitc

 

./mongod -f /opt/mongodbset4.cnf

 

rs.add("127.0.0.1:27020")

rs.status()

rs.remove("127.0.0.1:27020")

 

模拟高可用

主机服务挂掉

[root@iZ4jc05d2ictd0xzg4lzteZ bin]# ./mongod -f /opt/mongodbset1.cnf –shutdown

./mongo 127.0.0.1:27018

rs.status()

主机服务重新启动

./mongod -f /opt/mongodbset1.cnf

rs.status()

复制集的管理-- oplog

./mongo --port 27019

pcitc:PRIMARY> db.users.insert({"uuid":1000})

WriteResult({ "nInserted" : 1 })

pcitc:PRIMARY> db.users.find()

{ "_id" : ObjectId("5c7493bcf1cd2a75f3444fc1"), "uuid" : 1000 }

 

pcitc:PRIMARY> db.users.update({"uuid":1000},{"uuid":10000})

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

pcitc:PRIMARY> db.users.find()

{ "_id" : ObjectId("5c7493bcf1cd2a75f3444fc1"), "uuid" : 10000 }

pcitc:PRIMARY> db.users.remove({})

WriteResult({ "nRemoved" : 1 })

pcitc:PRIMARY> use local

oplog.rs  复制集相关的操作

op操作:i 写入,u 更新,d 插入 ,ns:操作的集合 ,o代表原来的数据

测试主从备份

./mongo --port 27019

pcitc:PRIMARY> db.users.insert({"uuid":1000})

WriteResult({ "nInserted" : 1 })

./mongo --port 27017

}

pcitc:SECONDARY> rs.slaveOk()

pcitc:SECONDARY> db.users.find()

{ "_id" : ObjectId("5c74afcf7d3220a1fd76b814"), "uuid" : 1000 }

复制集相关信息指令

rs.status()                复制集的状态

rs.initiate()               复制集通过默认配置初始化

rs.initiate(cfg)             复制集通过配置文档初始化

rs.conf()                 获得当前的配置信息

rs.reconfig(cfg)            重新配置

rs.add(hostportstr)         动态增加一个节点

rs.add(membercfgobj)      动态增加一个节点含有优先级等信息

rs.addArb(hostportstr)      添加一个仲裁节点

rs.stepDown([stepdownSecs, catchUpSecs])

stepdownSecs:通知复制集其他成员,35秒内,本服务器不会选举为主服务器 

catchUpSecs:主服务器需要降级的时候,多个从服务器因业务繁忙,有延迟,允许30秒的超赶时间,然后主从切换

rs.syncFrom(hostportstr)    如果初始化一个新的节点,可以指定某个想要节点进行同步      

rs.freeze(secs)             指定的秒数之内不能被选举成主服务器    

rs.remove(hostportstr)

rs.slaveOk()               从服务器默认不能读,执行此命令,可以读

 

rs.printReplicationInfo()     查看日志的大小和时间的范围

configured oplog size:   4403.060936927795MB

log length start to end: 66764secs (18.55hrs)

oplog first event time:  Mon Feb 25 2019 15:42:40 GMT+0800 (CST)

oplog last event time:   Tue Feb 26 2019 10:15:24 GMT+0800 (CST)

now:                     Tue Feb 26 2019 10:15:26 GMT+0800 (CST)

 

rs.printSlaveReplicationInfo() 确认从服务器是否有延迟

pcitc:PRIMARY> rs.printSlaveReplicationInfo()

source: 127.0.0.1:27017

        syncedTo: Tue Feb 26 2019 11:24:34 GMT+0800 (CST)

        0 secs (0 hrs) behind the primary

source: 127.0.0.1:27018

        syncedTo: Tue Feb 26 2019 11:24:34 GMT+0800 (CST)

        0 secs (0 hrs) behind the primary

 

db.isMaster()              查看整个架构,包括标准节点 仲裁节点 被动节点

查看复制集的相关信息

pcitc:PRIMARY> use local

pcitc:PRIMARY> db.system.replset.find()

{ "_id" : "pcitc", "version" : 3, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "127.0.0.1:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {  }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "127.0.0.1:27018", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {  }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : "127.0.0.1:27019", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {  }, "slaveDelay" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : -1, "catchUpTakeoverDelayMillis" : 30000, "getLastErrorModes" : {  }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("5c739c70de5867b3253bcad8") } }

猜你喜欢

转载自blog.csdn.net/lql_h/article/details/87919271
今日推荐