在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
关于副本集 副本集是一种在多台机器同步数据的进程。 在一些场景,可以使用副本集来扩展读性能。客户端有能力发送读写操作给不同的服务器。 mongodb副本集是一组拥有相同数据的mongodb实例,主mongodb接受所有的写操作,所有的其他实例可以接受主实例的操作以保持数据同步。 Client Application Driver Writes Reads | | Primary |Replication|Replication Secondary Secondary 二级节点复制主节点的oplog然后在自己的数据副本上执行操作,二级节点是主节点数据的反射,如果主节点不可用,会选举一个新的主节点。默认读操作是在主节点进行的,但是可以指定读取首选项参数来指定读操作到副本节点。 1.异步复制 2.自动故障转移 副本集提供了一些选项给应用程序,可以做一个成员位于不同数据中心的副本集。 sharding转换一个副本集为分片集群 /data/example/firstset1 /data/example/firstset2 /data/example/firstset3 创建目录: mkdir -p /data/example/firstset1 /data/example/firstset2 /data/example/firstset3 1.2 在其他终端启动三个mongodb实例,如下: mongod --dbpath /data/example/firstset1 --port 10001 --replSet firstset --oplogSize 700 --rest --fork --logpath /data/example/firstset1/firstset1.log --logappend --nojournal --directoryperdb mongod --dbpath /data/example/firstset2 --port 10002 --replSet firstset --oplogSize 700 --rest --fork --logpath /data/example/firstset2/firstset2.log --logappend --nojournal --directoryperdb mongod --dbpath /data/example/firstset3 --port 10003 --replSet firstset --oplogSize 700 --rest --fork --logpath /data/example/firstset3/firstset3.log --logappend --nojournal --directoryperdb --oplog选项强制每个mongodb实例操作日志为700M,不使用该参数则默认为分区空间的5%,限制oplog的大小,可以使每个实例启动的快一点。 mongo mongo01:10001/admin 如果是运行在生产环境下,或者不同主机名或IP的机器上,需要修改mongo01为指定名称。 var config = { "_id" : "firstset", "members" : [ {"_id" : 0, "host" : "mongo01:10001"}, {"_id" : 1, "host" : "mongo01:10002"}, {"_id" : 2, "host" : "mongo01:10003"}, ] } rs.initiate(config); { "info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1 } 或 db.runCommand( {"replSetInitiate" : {"_id" : "firstset", "members" : [ {"_id" : 0, "host" : "mongo01:10001"}, {"_id" : 1, "host" : "mongo01:10002"}, {"_id" : 2, "host" : "mongo01:10003"} ] } } ) 1.5 在mongo shell中创建并插入数据: use mydb switched to db mydb animal = ["dog", "tiger", "cat", "lion", "elephant", "bird", "horse", "pig", "rabbit", "cow", "dragon", "snake"]; for(var i=0; i<100000; i++){ name = animal[Math.floor(Math.random()*animal.length)]; user_id = i; boolean = [true, false][Math.floor(Math.random()*2)]; added_at = new Date(); number = Math.floor(Math.random()*10001); db.test_collection.save({"name":name, "user_id":user_id, "boolean": boolean, "added_at":added_at, "number":number }); } 上面的操作会向集合test_collection插入100万条数据,根据系统不同,可能会花费几分钟的时间。 2. 部署一个分片设施 /data/example/config1 /data/example/config2 /data/example/config3 创建目录: mkdir -p /data/example/config1 /data/example/config2 /data/example/config3 2.2 在另外的终端下,启动配置服务器: mongod --configsvr --dbpath /data/example/config1 --port 20001 --fork --logpath /data/example/config1/config1.log --logappend mongod --configsvr --dbpath /data/example/config2 --port 20002 --fork --logpath /data/example/config2/config2.log --logappend mongod --configsvr --dbpath /data/example/config3 --port 20003 --fork --logpath /data/example/config3/config3.log --logappend 2.3 在另外的终端下,启动mongos实例: mongo mongo01:27017/admin 2.4.2 使用addShard命令添加第一个分片 db.runCommand( { addShard : "firstset/mongo01:10001,mongo01:10002,mongo01:10003" } ) 2.4.3 出现以下信息,表示成功: { "shardAdded" : "firstset", "ok" : 1 } 3. 部署另一个测试副本集 /data/example/secondset1 /data/example/secondset2 /data/example/secondset3 创建目录: mkdir -p /data/example/secondset1 /data/example/secondset2 /data/example/secondset3 3.2 在其他终端启动三个mongodb实例,如下: mongod --dbpath /data/example/secondset1 --port 30001 --replSet secondset --oplogSize 700 --rest --fork --logpath /data/example/secondset1/secondset1.log --logappend --nojournal --directoryperdb mongod --dbpath /data/example/secondset2 --port 30002 --replSet secondset --oplogSize 700 --rest --fork --logpath /data/example/secondset2/secondset2.log --logappend --nojournal --directoryperdb mongod --dbpath /data/example/secondset3 --port 30003 --replSet secondset --oplogSize 700 --rest --fork --logpath /data/example/secondset3/secondset3.log --logappend --nojournal --directoryperdb 3.3 连接一个mongodb实例的shell mongo mongo01:20001/admin 3.4 在mongo shell上初始化副本集 db.runCommand( {"replSetInitiate" : {"_id" : "secondset", "members" : [ {"_id" : 0, "host" : "mongo01:30001"}, {"_id" : 1, "host" : "mongo01:30002"}, {"_id" : 2, "host" : "mongo01:30003"} ] } } ) 3.5 将该副本集加入分片集群 db.runCommand( { addShard : "secondset/mongo01:30001,mongo01:30002,mongo01:30003" } ) 返回成功信息: { "shardAdded" : "firstset", "ok" : 1 } 3.6 通过运行listShards命令证实分片都添加成功。如下: db.runCommand({listShards:1}) { "shards" : [ { "_id" : "firstset", "host" : "firstset/mongo01:10001,mongo01:10002,mongo01:10003" }, { "_id" : "secondset", "host" : "secondset/mongo01:30001,mongo01:30002,mongo01:30003" } ], "ok" : 1 } |
请发表评论