mongodb 3.4 学习 (三)复制集

it2022-05-05  107

mongodb 3.4 学习 (三)复制集 复制集(replica set) 复制集是一组mongodb的进程维护同样的数据集,提供冗余与高可用性。最小的复制集由3台服务器(或者3个实例)组成,最多1个primary和2个secondary实例,其中只有primary允许读写,secondary只读。secondary和primary的数据完全一致,它们之间通过primary实例的oplog异步(asynchronous)方式同步数据。

oplog(operations log)是专门的capped collection,保存所有数据库相关修改的回滚记录,secondary成员通过异步的方式拷贝和执行这些操作。 当primary不可用时,复制集发起投票(elections),选择1台secondary做为primary,请注意priority这个参数,priority为0的secondary不能成为primary,不能触发投票。 Oplog Size 在Unix和Windows系统中, 如果存储引擎使用的是WiredTiger,将占用剩余使用空间的5%。

# 生产环境部署 kvm-70-101 10.0.70.101 # primary kvm-70-102 10.0.70.102 # secondary kvm-70-103 10.0.70.103 # secondary # 生成key openssl rand -base64 756 > mongodb_product_key # 拷贝到所有成员服务器,并对文件授权 chmod 400 mongodb_product_key chown mongod mongodb_product_key # 变更/etc/mongod.conf,对复制集命名 security: keyFile: /etc/mongodb_product_key replication: replSetName: myapp # primary初始化 rs.initiate( { _id : 'myapp', members: [ { _id : 0, host : 'kvm-70-101:27017' }, { _id : 1, host : 'kvm-70-102:27017' }, { _id : 2, host : 'kvm-70-103:27017' } ] }) { "info" : "try querying local.system.replset to see current configuration", "ok" : 0, "errmsg" : "already initialized", "code" : 23, "codeName" : "AlreadyInitialized" } # 建立超级用户admin use admin db.createUser( { user: 'admin', pwd: '@admin', roles: [ { role: 'root', db: 'admin' } ] } ); # 建立app数据库的管理员app use app db.createUser( { user: 'app', pwd: '@app', roles: [ { role: 'dbOwner', db: 'app' } ] } ); # 认证登录 db.auth('admin', '@admin') # 如果另外增加secondary,使用以下命令 rs.add('kvm-70-104:27017') rs.add('kvm-70-104:27017') # 查看配置 rs.conf() { "_id" : "myapp", "version" : 3, "protocolVersion" : NumberLong(1), "members" : [ { "_id" : 0, "host" : "kvm-70-101:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 1, "host" : "kvm-70-102:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 }, { "_id" : 2, "host" : kvm-70-103:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "slaveDelay" : NumberLong(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : 2000, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("59248e52d45510744805fb78") } } # 查看状态 rs.status() { "set" : "myapp", "date" : ISODate("2017-05-23T20:37:08.946Z"), "myState" : 1, "term" : NumberLong(1), "heartbeatIntervalMillis" : NumberLong(2000), "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1495571827, 1), "t" : NumberLong(1) }, "appliedOpTime" : { "ts" : Timestamp(1495571827, 1), "t" : NumberLong(1) }, "durableOpTime" : { "ts" : Timestamp(1495571827, 1), "t" : NumberLong(1) } }, "members" : [ { "_id" : 0, "name" : "kvm-70-101:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 4968, "optime" : { "ts" : Timestamp(1495571827, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2017-05-23T20:37:07Z"), "electionTime" : Timestamp(1495567955, 2), "electionDate" : ISODate("2017-05-23T19:32:35Z"), "configVersion" : 3, "self" : true }, { "_id" : 1, "name" : "kvm-70-102:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 77, "optime" : { "ts" : Timestamp(1495571827, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1495571827, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2017-05-23T20:37:07Z"), "optimeDurableDate" : ISODate("2017-05-23T20:37:07Z"), "lastHeartbeat" : ISODate("2017-05-23T20:37:07.702Z"), "lastHeartbeatRecv" : ISODate("2017-05-23T20:37:06.951Z"), "pingMs" : NumberLong(0), "syncingTo" : "10.0.70.103:27017", "configVersion" : 3 }, { "_id" : 2, "name" : "kvm-70-103:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 77, "optime" : { "ts" : Timestamp(1495571827, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1495571827, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2017-05-23T20:37:07Z"), "optimeDurableDate" : ISODate("2017-05-23T20:37:07Z"), "lastHeartbeat" : ISODate("2017-05-23T20:37:07.708Z"), "lastHeartbeatRecv" : ISODate("2017-05-23T20:37:07.733Z"), "pingMs" : NumberLong(0), "syncingTo" : "10.0.70.101:27017", "configVersion" : 3 } ], "ok" : 1 } # secondary验证 # 授权从机允许读 rs.slaveOk() use app db.auth('app', '@app') db.test.insert({'hello': 'world'}) # 查看建立的数据库及用户 rs0:SECONDARY> db.test.find().pretty(); { "_id" : ObjectId("5ad6c7e574a09792011db5ee"), "hello" : "world" } # 进行一次新的投票 rs.stepDown() posted on 2017-05-24 15:56 北京涛子 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/liujitao79/p/6899385.html


最新回复(0)