多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# MongoDB副本集简洁 * * * * * --: 作者:Mick 时间:2018年8月20日 * * * * * ### 生成认证秘钥Key ``` openssl rand -base64 745 > /data/mongodb/KeyFile.file chmod 600 /data/mongodb/KeyFile.file // 该key的权限必须是600,然后将其放到每一台服务器上 ``` ### 副本集配置 ``` replication: replSetName: 副本集合的名称自定义 security: keyFile: /data/mongodb/KeyFile.file ``` #### 主节点初始化 > rs.initiate() //初始化方法 { "info2" : "no configuration specified. Using a default configuration for the set", //代表成功 "me" : "192.168.154.128:27717", "ok" : 1, "operationTime" : Timestamp(1532137496, 1), "$clusterTime" : { "clusterTime" : Timestamp(1532137496, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } magic:OTHER> //magic表示副本集合名称 #### 主节点上添加从节点 magic:OTHER> rs.add("192.168.154.129:27717") // Ip : Port { "ok" : 1, // 代表成功 "operationTime" : Timestamp(1532138221, 1), "$clusterTime" : { "clusterTime" : Timestamp(1532138221, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } #### 主节点查看从节点状态 magic:PRIMARY> rs.status() // "health" : 1 表示全部正常 #### 从节点启动副本集合 > rs.slaveOk() //备份节点默认是不对外提供读写功能的,如果想在备份节点提供读操作的话,需要执行rs.slaveOk() magic:SECONDARY> // magic表示副本集名称 SECONDARY表示从节点 magic:PRIMARY> db.oplog.rs.findOne({}) ### 副本集深入 #### oplog大小以及意义 副本集大小:oplogSize是磁盘空闲空间的5%,最大不超过50G 复制时间窗口:按照记录条数封顶, 按照文件体积封顶 #### oplog格式详解 magic:PRIMARY> db.oplog.rs.findOne({}) { "ts" : Timestamp(1532137496, 1), "h" : NumberLong("4089369247341483049"), "v" : 2, "op" : "n", "ns" : "", "wall" : ISODate("2018-07-21T01:44:56.101Z"), "o" : { "msg" : "initiating set" } } ts 操作发生的时间戳 h 操作唯一标识符ID v oplog的版本 op 操作类型 insert, delete, update, db cmd, null ns 操作发生的命名空间 database_name.collection_name o 操作对应的文档 o2 仅对update操作,更新操作的变更台条件 ### 副本集常用命令 #### 主节点查看从节点状态 magic:PRIMARY> db.isMaster() "ismaster" : true //表示是主节点, 从节点显示 "secondary" : true #### 查看oplog信息 magic:PRIMARY> rs.printReplicationInfo() configured oplog size: 990MB //表示副本集容量 log length start to end: 1462secs (0.41hrs) oplog first event time: Sat Jul 21 2018 09:44:56 GMT+0800 (CST) oplog last event time: Sat Jul 21 2018 10:09:18 GMT+0800 (CST) now: Sat Jul 21 2018 10:09:23 GMT+0800 (CST) #### 查看从节点信息 magic:PRIMARY> db.printSlaveReplicationInfo() source: 192.168.154.130:27717 // 表示从节点 Ip:Port信息 syncedTo: Sat Jul 21 2018 10:14:38 GMT+0800 (CST) 0 secs (0 hrs) behind the primary // 表示延迟时间 source: 192.168.154.129:27717 syncedTo: Sat Jul 21 2018 10:14:38 GMT+0800 (CST) 0 secs (0 hrs) behind the primary #### 在主节点上删除从节点 magic:PRIMARY> rs.remove("192.168.154.129:27717") { "ok" : 1, "operationTime" : Timestamp(1532139128, 1), "$clusterTime" : { "clusterTime" : Timestamp(1532139128, 1), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } #### 主节点主动降级(在重选的过程中有可能还被选举成主节点) magic:PRIMARY> rs.stepDown(2) // 2S后执行 { "operationTime" : Timestamp(1532165884, 17), "ok" : 0, "errmsg" : "stepdown period must be longer than secondaryCatchUpPeriodSecs", "code" : 2, "codeName" : "BadValue", "$clusterTime" : { "clusterTime" : Timestamp(1532165884, 17), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } #### 冻结某个节点使其在此期间不能成为主节点在rs.stepDown()使用 magic:PRIMARY> rs.freeze(100) // 冻结100S { "operationTime" : Timestamp(1532165884, 38), "ok" : 0, "errmsg" : "cannot freeze node when primary or running for election. state: Primary", "code" : 95, "codeName" : "NotSecondary", "$clusterTime" : { "clusterTime" : Timestamp(1532165884, 38), "signature" : { "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" : NumberLong(0) } } } #### 修改配置文件 con = rs.conf() // 获取原始的配置文件 con.members[0].host = "192.168.1.105:27717" //使用点操作修改 rs.reconfig(con) // 更改配置文件