MONGO集群部署手册

合集下载

mongodb副本集群搭建

mongodb副本集群搭建

mongodb副本集群搭建⼀.环境介绍1.机器信息10.40.6.6810.40.6.10810.40.6.110软件环境为centos 6.x2.mongodb 下载链接地址使⽤⼆进制⽂件包安装,版本选择的是mongodb 3.2.15⼆.完整步骤1.下载安装包解压tar -zxf mongodb-linux-x86_64-rhel62-3.2.15.tgz -C /usr/local/mv /usr/local/mongodb-linux-x86_64-rhel62-3.2.15/ /usr/local/mongodb-3.2ln -s /usr/local/mongodb-3.2/bin/* /usr/local/bin/2.创建⽤户和相关的⽂件夹useradd mongodbmkdir -p /data/mongodb/data/mkdir -p /data/mongodb/log/chown -R mongodb:mongodb /data/mongodb/3.编辑配置⽂件,mongo的启动可以直接⽤命令⾏启动,或者指定配置⽂件启动vim /etc/mongodb.confsystemLog:destination: filepath: "/data/mongodb/log/mongod.log"logAppend: truestorage:dbPath: "/data/mongodb/data/"directoryPerDB: truejournal:enabled: trueprocessManagement:fork: true#security:# authorization: "enabled"net:port: 27017replication:oplogSizeMB: 50replSetName: "repl_test"secondaryIndexPrefetch: "all"⾄此,mongo的安装基本完成了。

MongoDB分片集群搭建及扩容

MongoDB分片集群搭建及扩容

MongoDB分⽚集群搭建及扩容### 实验:分⽚集群搭建及扩容#### 实验⽬标及流程* ⽬标:学习如何搭建⼀个两分⽚的分⽚集群* 环境:3台Linux虚拟机器,4Core 8GB* 步骤:* 配置域名解析* 准备分⽚⽬录* 创建第⼀个分⽚复制集并初始化* 初始化分⽚集群,加⼊第⼀个分⽚* 创建分⽚表* 加⼊第⼆个分⽚#### 实验架构```demo1 shard1(Primary|27017) shard2(Primary|27011) Config1(27019) mongos(27017)``````demo2 Secondary|27010 Secondary|27011 Config2(27019)``````demo3 Secondary|27010 Secondary|27011 Config3(27019)```| | member1 | member2 | member3 | member4 | member5 | member6 ||-------|---------|---------|---------|---------|---------|---------|| shard1 | ● | | ● | | ● | || shard2 | | ● | | ● | | ● || config | ● | | ● | | ● | || mongos | | ● | | ● | | ● |demo1 demo2 demo3 1. 配置域名解析在3台虚拟器上分别执⾏以下3条命令,注意替换实际IP地址```echo "192.168.1.1 demo1 " >> /etc/hostsecho "192.168.1.2 demo2 " >> /etc/hostsecho "192.168.1.3 demo3 " >> /etc/hosts```2. 准备分⽚⽬录在各服务器上创建数据⽬录,我们⽤`/data`,请按⾃⼰需要修改为其他⽬录:- 在member1/member3/member5上执⾏以下命令:mkdir -p /data/shard1/mkdir -p /data/config/_ 在member2/member4/member6上执⾏以下命令:mkdir -p /data/shard2/mkdir -p /data/mongos/3. 创建第⼀个分⽚⽤的复制集在member1/member3/member5上执⾏以下命令```mongod --bind_id 0.0.0.0 --replSet shard1 --dbpath /data/shard1 --logpath/data/shard1/mongod.lgo --port 27010 --fork --shardsvr --wiredTigerCacheSizeGB 1```4. 初始化第⼀个分⽚复制集```mongo --host :27010rs.initiate({_id : "shard1","members": [{"_id": 0,"host": ":27010"},{"_id": 1,"host": ":27010"},{"_id": 2,"host": ":27010"},]})```5. 创建config server复制集在member1/member3/member5上执⾏以下命令```mongod --bind_id 0.0.0.0 --replSet shard1 --dbpath /data/shard1 --logpath/data/shard1/mongod.lgo --port 27010 --fork --shardsvr --wiredTigerCacheSizeGB 1```6. 初始化config server复制集```mongo --host :27010rs.initiate({_id : "shard1","members": [{"_id": 0,"host": ":27010"},{"_id": 1,"host": ":27010"},{"_id": 2,"host": ":27010"},]})```7. 在第⼀台机器上搭建mongos```# mongos --bind_ip 0.0.0.0 --logpath /data/mongos/mongos.log --port 27017 --fork-- configdb config/:27019,:27019,:27019# 连接到mongos,添加分⽚# mongo --host :27017mongos>sh.addShard("shard1/:27010,:27010,:27010"); ```8. 创建分⽚表```# 连接到mongos,创建分⽚集合# mongo --host :27017mongos > sh.status();mongos > sh.enableSharding("foo");mongos > sh.shardCollection("foo.bar", {_id:'hashed'});mongos > sh.status();插⼊测试数据use foofor (var i = 0; i < 10000; i++) {db.bar.insert({i:i});}```9. 创建第2个分⽚复制集在 member2/member4/member6上执⾏以下命令```mongod --bind_id 0.0.0.0 --replSet shard2 --dbpath /data/shard2--logpath /data/shard2/mongod.log --port 27011 --fork --shardsvr --wiredTigerCacheSizeGB 1```10. 初始化第⼆个分⽚的复制集```# mongo --host :27011rs.initiate({_id : "shard2","members": [{"_id": 0,"host": ":27011"},{"_id": 1,"host": ":27011"},{"_id": 2,"host": ":27011"},]})```11. 加⼊第2个分⽚```# 连接到mongos,添加分⽚# mongo --host :27017mongos>sh.addShard("shard2/:27011,:27011,:27011"); mongos>sh.status()```。

mongodb分片集群(shardingwithreplicaset)配置

mongodb分片集群(shardingwithreplicaset)配置

mongodb分片集群(shardingwithreplicaset)配置一共有4台机器,各自挂接一个存储,希望实现:1.尽量节约存储2.高可用性3.存储大量数据配置方案:1.每一台机器做一个分片的主数据库2.每一台机器做一个分片的后备数据库3.每一台机器做一个分片的仲裁服务4.两个两个一组交叉作对方的后备5.有三台机器开配置服务6.有一台机器开路由服务(生产环境可以在每一台Windows App服务器上开路由服务,App服务器集群做负载均衡)这样的话,任何一台服务器完全离线(或者交叉的两台服务器离线),都能保证整个系统正常运行。

不过在服务器和服务器起来之后需要:1.在升级成为主数据库的那个后备数据库上运行rs.StepDown(100)来让它让出主数据库的位置,因为每一个分片的活动数据库都应该由独立服务器担当,以获得最好的性能2.配置服务和后备数据库起来之后不需要做任何调整192.168.129.142mkdir -p /usr/data/shard1mkdir -p /usr/data/shard2mkdir -p /usr/data/shard3mkdir -p /usr/data/config1/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10001 --dbpath /usr/data/shard1/ --logpath /usr/data/shard1/log.log --replSet shard1 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10002 --dbpath /usr/data/shard2/ --logpath /usr/data/shard2/log.log --replSet shard2 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10003 --dbpath /usr/data/shard3/ --logpath /usr/data/shard3/log.log --replSet shard3 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --configsvr --port 20001 --dbpath /usr/data/config1/ --logpath /usr/data/config1/log.log --restps aux | grep mongodb | grep -v grep/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongo --port 10001config = {_id: 'shard1', members: [{_id: 0, host: '192.168.129.142:10001'},{_id: 1, host: '192.168.129.172:10001'},{_id: 2, host: '192.168.129.173:10001', arbiterOnly: true}]}rs.initiate(config)rs.status()192.168.129.172mkdir -p /usr/data/shard2mkdir -p /usr/data/shard1mkdir -p /usr/data/shard4mkdir -p /usr/data/config2/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10002 --dbpath /usr/data/shard2/ --logpath /usr/data/shard2/log.log --replSet shard2 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10001 --dbpath /usr/data/shard1/ --logpath/usr/data/shard1/log.log --replSet shard1 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10004 --dbpath /usr/data/shard4/ --logpath /usr/data/shard4/log.log --replSet shard4 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --configsvr --port 20002 --dbpath /usr/data/config2/ --logpath /usr/data/config2/log.log --restps aux | grep mongodb | grep -v grep/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongo --port 10002config = {_id: 'shard2', members: [{_id: 0, host: '192.168.129.172:10002'},{_id: 1, host: '192.168.129.142:10002'},{_id: 2, host: '192.168.129.175:10002', arbiterOnly: true}]}rs.initiate(config)rs.status()192.168.129.173mkdir -p /usr/data/shard3mkdir -p /usr/data/shard4mkdir -p /usr/data/shard1mkdir -p /usr/data/config3/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10003 --dbpath /usr/data/shard3/ --logpath /usr/data/shard3/log.log --replSet shard3 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10004 --dbpath /usr/data/shard4/ --logpath /usr/data/shard4/log.log --replSet shard4 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork--shardsvr --port 10001 --dbpath /usr/data/shard1/ --logpath /usr/data/shard1/log.log --replSet shard1 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --configsvr --port 20003 --dbpath /usr/data/config3/ --logpath /usr/data/config3/log.log --restps aux | grep mongodb | grep -v grep/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongo --port 10003config = {_id: 'shard3', members: [{_id: 0, host: '192.168.129.173:10003'},{_id: 1, host: '192.168.129.175:10003'},{_id: 2, host: '192.168.129.142:10003', arbiterOnly: true}]}rs.initiate(config)rs.status()192.168.129.175mkdir -p /usr/data/shard4mkdir -p /usr/data/shard3mkdir -p /usr/data/shard2mkdir -p /usr/data/master/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10004 --dbpath /usr/data/shard4/ --logpath /usr/data/shard4/log.log --replSet shard4 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10003 --dbpath /usr/data/shard3/ --logpath /usr/data/shard3/log.log --replSet shard3 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongod --fork --shardsvr --port 10002 --dbpath /usr/data/shard2/ --logpath /usr/data/shard2/log.log --replSet shard2 --rest/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongos --fork --port 40000 --logpath /usr/data/master/log.log --chunkSize 1 "192.168.129.142:20001,192.168.129.172:20002,192.168.129 .173:20003"ps aux | grep mongodb | grep -v grep/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongo --port 10004config = {_id: 'shard4', members: [{_id: 0, host: '192.168.129.175:10004'},{_id: 1, host: '192.168.129.173:10004'},{_id: 2, host: '192.168.129.172:10004', arbiterOnly: true}]}rs.initiate(config)rs.status()/usr/local/mongodb-linux-x86_64-1.6.4/bin/mongo --port 40000use admindb.runCommand({ addshard:'shard1/192.168.129.142:10001 ,192.168.129.172:10001' })db.runCommand({ addshard:'shard2/192.168.129.172:10002 ,192.168.129.142:10002' })db.runCommand({ addshard:'shard3/192.168.129.173:10003 ,192.168.129.175:10003' })db.runCommand({ addshard:'shard4/192.168.129.175:10004 ,192.168.129.173:10004' })db.runCommand({ listshards:1 })db.runCommand({ enablesharding:'test' })db.runCommand({ shardcollection:'test.data', key:{_id:1} }) printShardingStatus()插入大量数据后的结果:db.data.stats(){"sharded" : true,"ns" : "test.data","count" : 1992002,"size" : 2103555152, "avgObjSize" : 1056.0005220878293, "storageSize" : 2464232960, "nindexes" : 1, "nchunks" : 23,"shards" : {"shard1" : {"ns" : "test.data","count" : 1271788,"size" : 1343008448, "avgObjSize" : 1056.0002516142627, "storageSize" : 1568785152, "numExtents" : 25, "nindexes" : 1, "lastExtentSize" : 267987712, "paddingFactor" : 1, "flags" : 1, "totalIndexSize" : 52658176, "indexSizes" : {"_id_" : 52658176},"ok" : 1},"shard2" : {"ns" : "test.data", "count" : 98494,"size" : 104009808, "avgObjSize" : 1056.001462017991, "storageSize" : 111137536, "numExtents" : 12, "nindexes" : 1, "lastExtentSize" : 25047552, "paddingFactor" : 1, "flags" : 1, "totalIndexSize" : 4087808, "indexSizes" : {"_id_" : 4087808},"ok" : 1},"shard3" : {"ns" : "test.data", "count" : 487410,"size" : 514705248, "avgObjSize" : 1056.000590878316, "storageSize" : 607047424, "numExtents" : 20, "nindexes" : 1, "lastExtentSize" : 107698688, "paddingFactor" : 1, "flags" : 1, "totalIndexSize" : 20250624, "indexSizes" : {"_id_" : 20250624},"ok" : 1},"shard4" : {"ns" : "test.data","count" : 134310,"size" : 141831648, "avgObjSize" : 1056.0021442930533, "storageSize" : 177262848, "numExtents" : 14, "nindexes" : 1, "lastExtentSize" : 36068352, "paddingFactor" : 1,"flags" : 1, "totalIndexSize" : 5570560, "indexSizes" : {"_id_" : 5570560},"ok" : 1}},"ok" : 1}printShardingStatus()--- Sharding Status ---sharding version: { "_id" : 1, "version" : 3 } shards:{"_id" : "shard1","host" : "shard1/192.168.129.142:10001,192.168.129.172:10001"}{"_id" : "shard2","host" : "shard2/192.168.129.172:10002,192.168.129.142:10002"}{"_id" : "shard3","host" : "shard3/192.168.129.173:10003,192.168.129.175:10003"}{"_id" : "shard4","host" : "shard4/192.168.129.175:10004,192.168.129.173:10004"}databases:{ "_id" : "admin", "partitioned" : false, "primary" : "config" }{ "_id" : "test", "partitioned" : true, "primary" : "shard1" }test.data chunks:{ "_id" : { $minKey : 1 } } -->> { "_id" : ObjectId("4d01c5bc926adb17b8000001") } on : shard2 { "t" : 8000, "i" : 0 }{ "_id" : ObjectId("4d01c5bc926adb17b8000001") } -->> { "_id" : ObjectId("4d01c620926adb17b800d1dd") } on : shard2 { "t" : 10000, "i" : 0 }{ "_id" : ObjectId("4d01c620926adb17b800d1dd") } -->> { "_id" : ObjectId("4d01c669926adb17b80180bf") } on : shard4{ "t" : 9000, "i" : 0 }{ "_id" : ObjectId("4d01c669926adb17b80180bf") } -->> { "_id" : ObjectId("4d01c6b6926adb17b8022fa1") } on : shard2 { "t" : 12000, "i" : 0 }{ "_id" : ObjectId("4d01c6b6926adb17b8022fa1") } -->> { "_id" : ObjectId("4d01c6fd926adb17b802de83") } on : shard1 { "t" : 5000, "i" : 1 }{ "_id" : ObjectId("4d01c6fd926adb17b802de83") } -->> { "_id" : ObjectId("4d01c74c926adb17b8038d65") } on : shard4 { "t" : 11000, "i" : 0 }{ "_id" : ObjectId("4d01c74c926adb17b8038d65") } -->> { "_id" : ObjectId("4d01c795926adb17b8043c47") } on : shard4 { "t" : 13000, "i" : 0 }{ "_id" : ObjectId("4d01c795926adb17b8043c47") } -->> { "_id" : ObjectId("4d01c7e6926adb17b804eb29") } on : shard1 { "t" : 6000, "i" : 2 }{ "_id" : ObjectId("4d01c7e6926adb17b804eb29") } -->> { "_id" : ObjectId("4d01c82f926adb17b8059a0b") } on : shard1 { "t" : 6000, "i" : 4 }{ "_id" : ObjectId("4d01c82f926adb17b8059a0b") } -->> { "_id" : ObjectId("4d01c8d4926adb17b806f7cf") } on : shard1 { "t" : 12000, "i" : 1 }{ "_id" : ObjectId("4d01c8d4926adb17b806f7cf") } -->> { "_id" : ObjectId("4d01c963926adb17b8085593") } on : shard3 { "t" : 7000, "i" : 2 }{ "_id" : ObjectId("4d01c963926adb17b8085593") } -->> { "_id" : ObjectId("4d01ca1c926adb17b809b357") } on : shard3 { "t" : 7000, "i" : 4 }{ "_id" : ObjectId("4d01ca1c926adb17b809b357") } -->> { "_id" : ObjectId("4d01caf7926adb17b80b306a") } on : shard3{ "t" : 7000, "i" : 6 }{ "_id" : ObjectId("4d01caf7926adb17b80b306a") } -->> { "_id" : ObjectId("4d01cbc2926adb17b80d09fd") } on : shard3 { "t" : 13000, "i" : 2 }{ "_id" : ObjectId("4d01cbc2926adb17b80d09fd") } -->> { "_id" : ObjectId("4d01cc54926adb17b80e67c1") } on : shard3 { "t" : 14000, "i" : 1 }{ "_id" : ObjectId("4d01cc54926adb17b80e67c1") } -->> { "_id" : ObjectId("4d01cec7926adb125c00d1dc") } on : shard1 { "t" : 14000, "i" : 2 }{ "_id" : ObjectId("4d01cec7926adb125c00d1dc") } -->> { "_id" : ObjectId("4d01ced2926adb125c022fa0") } on : shard1 { "t" : 14000, "i" : 4 }{ "_id" : ObjectId("4d01ced2926adb125c022fa0") } -->> { "_id" : ObjectId("4d01cedf926adb125c038d64") } on : shard1 { "t" : 14000, "i" : 6 }{ "_id" : ObjectId("4d01cedf926adb125c038d64") } -->> { "_id" : ObjectId("4d01ceeb926adb125c04eb28") } on : shard1 { "t" : 14000, "i" : 8 }{ "_id" : ObjectId("4d01ceeb926adb125c04eb28") } -->> { "_id" : ObjectId("4d01cf1a926adb125c07a6ab") } on : shard1 { "t" : 14000, "i" : 10 }{ "_id" : ObjectId("4d01cf1a926adb125c07a6ab") } -->> { "_id" : ObjectId("4d01cf3c926adb125c0a622e") } on : shard1 { "t" : 14000, "i" : 12 }{ "_id" : ObjectId("4d01cf3c926adb125c0a622e") } -->> { "_id" : ObjectId("4d01cf52926adb125c0d1db1") } on : shard1 { "t" : 14000, "i" : 14 }{ "_id" : ObjectId("4d01cf52926adb125c0d1db1") } -->> { "_id" : ObjectId("4d01d58c926adb16480096f4") } on : shard1{ "t" : 14000, "i" : 16 }{ "_id" : ObjectId("4d01d58c926adb16480096f4") } -->> { "_id" : { $maxKey : 1 } } on : shard1 { "t" : 14000, "i" : 17 }另,这套配置插入1万条1KB数据的时间大约在1.4秒,如果使用最简单单进程配置的话速度稍快,在1.2秒,性能下降不是很厉害,可以接受。

Mongodb集群搭建的三种方式

Mongodb集群搭建的三种方式

Mongodb集群搭建的三种方式MongoDB是一个基于分布式文件存储的数据库。

由C++语言编写。

旨在为WEB应用提供可扩展的高性能数据存储解决方案。

他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。

Mongo 最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

Mongodb的存储方式是文档式存储,并不是Key-Value形式。

Mongodb的三种集群方式的搭建:Replica Set、Sharding、Master-Slaver。

1、Replica Set(副本集)简单来说就是集群当中包含了多份数据,保证主节点挂掉了,备节点能继续提供数据服务,提供的前提就是数据需要和主节点一致。

如下图:Mongodb(M)表示主节点,Mongodb(S)表示备节点,Mongodb(A)表示仲裁节点。

主备节点存储数据,仲裁节点不存储数据。

客户端同时连接主节点与备节点,不连接仲裁节点。

默认设置下,主节点提供所有增删查改服务,备节点不提供任何服务。

但是可以通过设置使备节点提供查询服务,这样就可以减少主节点的压力,当客户端进行数据查询时,请求自动转到备节点上。

这个设置叫做Read Preference Modes,同时Java客户端提供了简单的配置方式,可以不必直接对数据库进行操作。

仲裁节点是一种特殊的节点,它本身并不存储数据,主要的作用是决定哪一个备节点在主节点挂掉之后提升为主节点,所以客户端不需要连接此节点。

这里虽然只有一个备节点,但是仍然需要一个仲裁节点来提升备节点级别。

2、Sharding和Replica Set类似,都需要一个仲裁节点,但是Sharding还需要配置节点和路由节点。

就三种集群搭建方式来说,这种是最复杂的。

部署图如下:3、Master-Slaver这个是最简答的集群搭建,不过准确说也不能算是集群,只能说是主备。

mongo集群

mongo集群

Auto-Sharding 解决了海量存储和动态扩容的问题,但离实际生产环境所需的高可靠(high reliability)、高可用(high availability)还有些距离。

解决方案:•Shard: 使用Replica Sets,确保每个数据节点都具有备份、自动容错转移、自动恢复能力。

•Config: 使用3 个配置服务器,确保元数据完整性(two-phase commit)。

•Route: 配合LVS,实现负载平衡,提高接入性能(high performance)。

以下我们配置一个Replica Sets + Sharding 测试环境。

装个配置过程建议都用IP 地址,以免出错。

(1) 首先建好所有的数据库目录。

$ sudo mkdir -p /var/mongodb/10001$ sudo mkdir -p /var/mongodb/10002$ sudo mkdir -p /var/mongodb/10003$ sudo mkdir -p /var/mongodb/10011$ sudo mkdir -p /var/mongodb/10012$ sudo mkdir -p /var/mongodb/10013$ sudo mkdir -p /var/mongodb/config1$ sudo mkdir -p /var/mongodb/config2$ sudo mkdir -p /var/mongodb/config3(2) 配置Shard Replica Sets。

$ sudo ./mongod --shardsvr --fork --logpath /dev/null --dbpath /var/mongodb/10001 --port 10001 --nohttpinterface --replSet set1forked process: 4974all output going to: /dev/null$ sudo ./mongod --shardsvr --fork --logpath /dev/null --dbpath /var/mongodb/10002 --port 10002 --nohttpinterface --replSet set1forked process: 4988all output going to: /dev/null$ sudo ./mongod --shardsvr --fork --logpath /dev/null --dbpath /var/mongodb/10003 --port 10003 --nohttpinterface --replSet set1forked process: 5000all output going to: /dev/null$ ./mongo --port 10001MongoDB shell version: 1.6.2connecting to: 127.0.0.1:10001/test> cfg = { _id:'set1', members:[... { _id:0, host:'192.168.1.202:10001' },... { _id:1, host:'192.168.1.202:10002' },... { _id:2, host:'192.168.1.202:10003' }... ]};> rs.initiate(cfg){"info" : "Config now saved locally. Should come online in about a minute.", "ok" : 1}> rs.status(){"set" : "set1","date" : "Tue Sep 07 2010 10:25:28 GMT+0800 (CST)","myState" : 5,"members" : [{"_id" : 0,"name" : "yuhen-server64:10001","health" : 1,"state" : 5,"self" : true},{"_id" : 1,"name" : "192.168.1.202:10002","health" : -1,"state" : 6,"uptime" : 0,"lastHeartbeat" : "Thu Jan 01 1970 08:00:00 GMT+0800 (CST)" },{"_id" : 2,"name" : "192.168.1.202:10003","health" : -1,"state" : 6,"uptime" : 0,"lastHeartbeat" : "Thu Jan 01 1970 08:00:00 GMT+0800 (CST)" }],"ok" : 1}配置第二组Shard Replica Sets。

docker-compose部署mongo副本集集群,主从仲裁

docker-compose部署mongo副本集集群,主从仲裁

docker-compose部署mongo副本集集群,主从仲裁1.⽣成keyFile⽂件MongoDB使⽤keyfile认证,副本集中的每个mongod实例使⽤keyfile内容作为认证其他成员的共享密码。

mongod实例只有拥有正确的keyfile才可以加⼊副本集。

keyFile的内容必须是6到1024个字符的长度,且副本集所有成员的keyFile内容必须相同。

有⼀点要注意是的:在UNIX系统中,keyFile必须没有组权限或完全权限(也就是权限要设置成X00的形式)。

Windows系统中,keyFile权限没有被检查。

可以使⽤任意⽅法⽣成keyFile。

例如,使⽤openssl⽣成复杂的随机的1024个字符串。

然后使⽤chmod修改⽂件权限,只给⽂件拥有者提供读权限。

在部署⽬录中,新建conf⽂件夹,然后执⾏以下指令,使⽤openssl进⾏⽣成随机字符串,存⼊mongodb.key⽂件# 400权限是要保证安全性,否则mongod启动会报错# 存放⽬录随意,只要对应yaml⽂件中的地址即可。

openssl rand -base64 756 > mongodb.keychmod400 mongodb.key2.docker-compose.yml⽂件version: "3"services:#主节点mongodb0:image: mongo:4.0.20container_name: mongo0restart: alwaysports:- 27017:27017environment:- MONGO_INITDB_ROOT_USERNAME=root- MONGO_INITDB_ROOT_PASSWORD=meiyoumima2021command: mongod --replSet rs0 --keyFile /mongodb.keyvolumes:- ./runtime/mongodb0/data:/data/db- ./runtime/mongodb0/data/configdb:/data/configdb- ./conf/mongodb.key:/mongodb.keynetworks:- mongo-networkentrypoint:- bash- -c- |chmod 400 /mongodb.keychown 999:999 /mongodb.keyexec docker-entrypoint.sh $$@#副节点mongodb1:image: mongo:4.0.20container_name: mongo1restart: alwaysports:- 27018:27017environment:- MONGO_INITDB_ROOT_USERNAME=root- MONGO_INITDB_ROOT_PASSWORD=meiyoumima2021command: mongod --replSet rs0 --keyFile /mongodb.keyvolumes:- ./runtime/mongodb1/data:/data/db- ./runtime/mongodb1/data/configdb:/data/configdb- ./conf/mongodb.key:/mongodb.keynetworks:- mongo-networkentrypoint:- bash- -c- |chmod 400 /mongodb.keychown 999:999 /mongodb.keyexec docker-entrypoint.sh $$@#仲裁节点mongodb2:image: mongo:4.0.20container_name: mongo2restart: alwaysports:- 27019:27017environment:- MONGO_INITDB_ROOT_USERNAME=root- MONGO_INITDB_ROOT_PASSWORD=meiyoumima2021command: mongod --replSet rs0 --keyFile /mongodb.keyvolumes:- ./runtime/mongodb2/data:/data/db- ./runtime//mongodb2/data/configdb:/data/configdb- ./conf/mongodb.key:/mongodb.keynetworks:- mongo-networkentrypoint:- bash- -c- |chmod 400 /mongodb.keychown 999:999 /mongodb.keyexec docker-entrypoint.sh $$@networks:mongo-network:external: false注:chown 999:999 /mongodb.key:999⽤户是容器中的mongod⽤户,通过chown修改⽂件⽤户权限mongod --replSet rs0 --keyFile /mongodb.key 启动命令,--replSet rs0 以副本集形式启动并将副本集名字命名为 rs0 --keyFile /mongodb.key 设置keyFile,⽤于副本集通信,⽂件通过 volumes 映射到容器内3.建⽴副本集进⼊Mongo容器链接Mongo# 选择第⼀个容器mongo0,进⼊mongo 容器docker exec -it mongo0 bash# 登录mongomongo -u root -p root或者通过以下⽅式进⼊Mongo容器链接Mongodocker exec -it mongo0 mongo通过以下指令配置mongo副本集集群# 认证use admindb.auth('root', 'meiyoumima2021')成功返回1,失败返回0初始化副本集:rs.initiate()⽆参初始化后,当前节点默认是PRIMARY节点添加节点:# 副节点rs.add('mongo1:27017')# 仲裁节点rs.add('mongo2:27017', true)查看副本集配置信息:rs.conf()查看副本集运⾏状态:rs.status()增长mongo0的权重:cfg = rs.conf()# 修改权重cfg.members[0].priority=5# 从新配置rs.reconfig(cfg)仲裁节点的权重默认为 0,其它节点默认为 1。

MongoDB-部署模式

MongoDB-部署模式

MongoDB-部署模式mongodb部署有2种模式:
1、复制集 Replica Set
2、集群 shard
⼀、复制集
复制集:是⼀组 mongod 实例组成,提供了数据冗余与⾼可⽤性
成员:主节点(Primary)和从节点(Secondaries)
最基础的复制集架构是由三个节点组成的,最常见的是⼀个主节点和两个从节点结构
优势:⾃动故障转移,数据冗余,⾼可⽤
⼆、集群 shard
集群架构:主要包含以下部分
shard:即分⽚,每个分⽚存储⼀部分数据,分⽚必须是复制集部署
mongos:扮演路由服务器⾓⾊,提供客户端和分⽚服务器连接接⼝
config Server:配置服务器,存储元数据和配置数据信息,也必须是复制集⽅式部署。

mongodb分片集群的组件及搭建分片集群的流程

mongodb分片集群的组件及搭建分片集群的流程

mongodb分片集群的组件及搭建分片集群的流程MongoDB是一个流行的非关系型数据库,它支持分布式存储和处理大量结构化和非结构化数据。

为了支持高可用性和扩展性,MongoDB提供了分片集群的功能。

分片集群可以将一个巨大的MongoDB数据库分拆成多个分片,并将这些分片分布在多台服务器上。

下面让我们了解一下MongoDB分片集群的组件以及搭建分片集群的流程。

组件1.分片服务器(Shard Server):分片服务器是MongoDB分片集群的核心。

它们存储数据并根据数据的主键将其分发到不同的分片上。

2.配置服务器(Config Server):配置服务器维护着分片集群的元数据信息,例如配置信息和分片信息。

每个分片集群需要至少三个配置服务器。

3.路由服务器(Router Server):路由服务器充当负载均衡器的角色,将客户端请求路由到正确的分片服务器上。

搭建分片集群的流程1.安装并启动分片服务器:在每台分片服务器上安装MongoDB,并启动分片服务器服务。

2.安装并启动配置服务器:在三台以上的不同服务器上安装MongoDB,配置为配置服务器,并启动配置服务器服务。

3.添加分片服务器到分片集群中:在路由服务器上执行“sh.addShard()”命令,并指定分片服务器的IP地址及端口号。

可重复执行该命令,添加多个分片服务器到分片集群中。

4.启动路由服务器:在一台服务器上配置为路由服务器,并启动路由服务器服务。

5.启用分片集群模式:在路由服务器上执行“sh.enableSharding()”命令,启用分片集群模式。

6.为分片集群的集合启用分片:使用路由服务器上的“sh.shardCollection()”命令将集合分片。

指定集合所在的数据库、集合名称以及用于分片的键。

7.检查分片集群状态:使用“sh.status()”命令在路由服务器上检查分片集群的状态。

在这里可以看到分片的状态信息以及集群的可用性和负载情况。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

mongo集群部署手册黑龙江华云合创科技有限公司实施运维部2016年7月文档修改记录一、环境介绍1.mongo集群各组件介绍mongo集群有四个组件:mongos、config server、shard、replica set。

mongos:数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求转发到对应的shard服务器上。

在生产环境通常有多个mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

config server:配置服务器,存储所有数据库元信息(路由、分片)的配置。

mongos 本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。

mongos第一次启动或者关掉重启就会从config server加载配置信息,以后如果配置服务器信息变化会通知到所有的mongos更新自己的状态。

在生产环境通常有多个config server配置服务器,因为它存储了分片路由的元数据,只要还有config server 存活,mongodb集群就不会挂掉。

shard:数据分片,通过mongos操作数据库就能自动把对应的数据操作请求转发到对应的分片机器上。

replica set:分片的副本级,保证分片的可靠性。

2.mongo集群架构图本方案中各个组件的数量为mongos3个、config server3个、shard server3个,每个shard包含一个副本和一个仲裁也就是3*2=6个,总共需要部署15个实例。

这些实例可以部署在多台服务器上也可以部署在一台服务器上,本方案部署在三台服务器上。

3.环境描述硬件环境:角色IP CPU内存硬盘机器1172.17.78.16722G30G机器2172.17.78.16822G30G机器3172.17.78.16922G30G软件环境:主机名IP操作系统mongo版本test1172.17.78.167CentOS6.5 3.2.6test2172.17.78.168CentOS6.5 3.2.6test3172.17.78.169CentOS6.5 3.2.6二、mongo集群部署1.在每台服务器上创建mongo安装目录[root@test1~]#mkdir-p/data/mongodbtest[root@test1~]#cd/data/mongodbtest[root@test1mongodbtest]#mkdir-p/data/mongodbtest/mongos/log[root@test1mongodbtest]#mkdir-p/data/mongodbtest/config/data[root@test1mongodbtest]#mkdir-p/data/mongodbtest/config/log[root@test1mongodbtest]#mkdir-p/data/mongodbtest/mongos/log[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard1/data[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard1/log[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard2/data[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard2/log[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard3/data[root@test1mongodbtest]#mkdir-p/data/mongodbtest/shard3/log2.下载mongodb[root@test1~]#cd/data/mongodbtest[root@test1mongodbtest]#wget /linux/mongodb-linux-x86_6 4-amazon-3.2.6.tgz[root@test1mongodbtest]#tar-xvf mongodb-linux-x86_64-amazon-3.2.6.tgz[root@test1mongodbtest]#mv mongodb-linux-x86_64-amazon-3.2.6mongodb3.在每台服务器上启动配置服务[root@test1mongodbtest]#/data/mongodbtest/mongodb/bin/mongod--configsvr–d bpath/data/mongodbtest/config/data--port21000--logpath/data/mongodbtest/con fig/log/config.log–fork4.在每台服务器上启动mongos服务[root@test1bin]#/data/mongodbtest/mongodb/bin/mongos--configdb172.17.78.16 7:21000,172.17.78.168:21000,172.17.78.169:21000--port20000--logpath/data/mong odbtest/mongos/log/mongos.log–fork5.在每台服务器上配置各个分片的副本集[root@test1bin]#/data/mongodbtest/mongodb/bin/mongod--shardsvr--replSet shar d1--port22001--dbpath/data/mongodbtest/shard1/data--logpath/data/mongodbtest/shard1/log/shard1.log--fork--nojournal--oplogSize100[root@test1bin]#/data/mongodbtest/mongodb/bin/mongod--shardsvr--replSet shar d2--port22002--dbpath/data/mongodbtest/shard2/data--logpath/data/mongod btest/shard2/log/shard2.log--fork--nojournal--oplogSize100[root@test1bin]#/data/mongodbtest/mongodb/bin/mongod--shardsvr--replSet shar d3--port22003--dbpath/data/mongodbtest/shard3/data--logpath/data/mongodb test/shard3/log/shard3.log--fork--nojournal--oplogSize100登陆任意服务器,配置分片副本集[root@test1bin]#/data/mongodbtest/mongodb/bin/mongo127.0.0.1:22001 mongos>use adminswitched to db adminmongos>config={_id:"shard1",members:[{_id:0,host:"172.17.78.167:22001"},{_id:1,host:"172.17.78.168:22001"},{_id:2,host:"172.17.78.169:22001",arbiterOnly:true}]}mongos>rs.initiate(config);[root@test1bin]#/data/mongodbtest/mongodb/bin/mongo127.0.0.1:22002 mongos>use adminswitched to db adminmongos>config={_id:"shard2",members:[{_id:0,host:"172.17.78.167:22002"},{_id:1,host:"172.17.78.168:22002"},{_id:2,host:"172.17.78.169:22002",arbiterOnly:true}]}mongos>rs.initiate(config);[root@test1bin]#/data/mongodbtest/mongodb/bin/mongo127.0.0.1:22003 mongos>use adminswitched to db adminmongos>config={_id:"shard3",members:[{_id:0,host:"172.17.78.167:22003"},{_id:1,host:"172.17.78.168:22003"},{_id:2,host:"172.17.78.169:22003",arbiterOnly:true}]}mongos>rs.initiate(config);6.设置分片配置,让分片生效[root@test1bin]#/data/mongodbtest/mongodb/bin/mongo127.0.0.1:20000 mongos>use adminswitched to db adminmongos>db.runCommand({addshard:"shard1/172.17.78.167:22001,172.17.78.168:2 2001,172.17.78.169:22001"});mongos>db.runCommand({addshard:"shard2/172.17.78.167:22002,172.17.78.168:2 2002,172.17.78.169:22002"});mongos>db.runCommand({addshard:"shard3/172.17.78.167:22003,172.17.78.168:2 2003,172.17.78.169:22003"});mongos>db.runCommand({listshards:1});{"shards":[{"_id":"shard1","host":"shard1/172.17.78.167:22001,172.17.78.168:22001"},{"_id":"shard2","host":"shard2/172.17.78.167:22002,172.17.78.168:22002"},{"_id":"shard3","host":"shard3/172.17.78.167:22003,172.17.78.168:22003"}],"ok":1}7.测试mongo集群mongos>db.runCommand({enablesharding:"testdb"}){"ok":1}mongos>db.runCommand({shardcollection:"testdb.table1",key:{id:1}}) {"collectionsharded":"testdb.table1","ok":1}[root@test1~]#/data/mongodbtest/mongodb/bin/mongo127.0.0.1:20000 mongos>use testdbswitched to db testdbmongos>for(var i=1;i<=100000;i++)db.table1.save({id:i,"test1":"testval1"}); WriteResult({"nInserted":1})mongos>db.table1.stats();。

相关文档
最新文档