1、分片与副本集配置方案服务器:服务器 1:10.120.131.201服务器 2:10.120.131.203服务器 3:10.120.131.204两个分片:shard1,shard2。每个分片都是一个副本集。shard1 包含四个节点:10.120.131.201:10000,10.120.131.203:10000,10.120.131.204:10000,10.120.131.204:10001,其中 10.120.131.204:10001 为仲裁节点,仲裁节点不参与数据复制,只参与投票。shard2 包含四个节点:10.120.131.201:10100,10.120.131.203
2、:10100,10.120.131.204:10100,10.120.131.204:10101,其中 10.120.131.204:10101 为仲裁节点。系统包含三个角色:Shard server:mongod 的实例,用于存储实际的数据块,对应着系统架构图中的两个分片(副本集) 。Config server:mongod 实例,用于存储整个 cluster metadata,包含了 chunk 块的信息。Route server(路由): mongos 实例,前端路由,客户端由此接入,让整个集群看上去像一个单一的数据库。服务器系统架构图如下:配置过程:服务器 1:进入 mongodb 的
3、文件夹中 (/home/software/mongodb2.4.8)。创建data 文件夹,并进入到 data 文件夹中。创建文件夹:shard11,shard12。分为 shard1,shard2 在服务器 1 上的数据存储文件夹。创建 config 文件夹,用于存储 cluster metadata。代码:mkdir data,进入 data 文件夹:mkdir shard11,mkdir shard12,mkdir config服务器 2:进入 mongodb 的文件夹中 (/home/software/mongodb2.4.8)。创建data 文件夹,并进入到 data 文件夹中。创建
4、文件夹:shard21,shard22。分为 shard1,shard2 在服务器 2 上的数据存储文件夹。创建 config 文件夹,用于存储 cluster metadata。代码:mkdir data,进入 data 文件夹:mkdir shard21,mkdir shard22,mkdir config服务器 3:进入 mongodb 的文件夹中 (/home/software/mongodb2.4.8)。创建data 文件夹,并进入到 data 文件夹中。创建文件夹:shard31,shard32。分为 shard1,shard2 在服务器 3 上的数据存储文件夹。创建文件夹:sha
5、rd31_arb,shard32_arb,分别为 shard1 与shard2 的仲裁节点。创建 config 文件夹,用于存储 cluster metadata。代码:mkdir data,进入 data 文件夹:mkdir shard31,mkdir shard32, mkdir shard31_arb,mkdir shard32_arb,mkdir config.配置副本集:配置副本集 shard1:在服务器 1 上启动 mongod:./mongod -shardsvr -replSet shard1 -dbpath /home/software/mongodb2.4.8/data/s
6、hard11 -port 10000 -logpath /home/software/mongodb2.4.8/data/shard11.log -fork -nojournal在服务器 2 上启动 mongod:./mongod -shardsvr -replSet shard1 -dbpath /home/software/mongodb2.4.8/data/shard21 -port 10000 -logpath /home/software/mongodb2.4.8/data/shard21.log -fork nojournal在服务器 3 上启动两个 mongod:./mongod
7、 -shardsvr -replSet shard1 -dbpath /home/software/mongodb2.4.8/data/shard31 -port 10000 -logpath /home/software/mongodb2.4.8/data/shard31.log -fork nojournal ./mongod -shardsvr -replSet shard1 -dbpath /home/software/mongodb2.4.8/data/shard31_arb -port 10001 -logpath /home/software/mongodb2.4.8/data/
8、shard31_arb.log -fork -nojournal初始化副本集 shard1:用 mongo 连接任意一个 mongod(仲裁节点除外): ./momgo -port 10000 并执行:config=_id:”shard1”,members:_id:0,host:”10.120.131.201:10000”,_id:1,host:”10.120.131.203:10000”,_id:2,host:”10.120.131.204:10000”,_id:3,host:”10.120.131.204:10001,”arbiterOnly”:truers.initiate(config
9、)用同样的方法配置副本集 shard2:在服务器 1 上启动 mongod:./mongod -shardsvr -replSet shard2 -dbpath /home/software/mongodb2.4.8/data/shard12 -port 10100 -logpath /home/software/mongodb2.4.8/data/shard12.log -fork -nojournal在服务器 2 上启动 mongod:./mongod -shardsvr -replSet shard2 -dbpath /home/software/mongodb2.4.8/data/sh
10、ard22 -port 10100 -logpath /home/software/mongodb2.4.8/data/shard22.log -fork nojournal在服务器 3 上启动两个 mongod:./mongod -shardsvr -replSet shard2 -dbpath /home/software/mongodb2.4.8/data/shard32 -port 10100 -logpath /home/software/mongodb2.4.8/data/shard32.log -fork nojournal ./mongod -shardsvr -replSet
11、 shard2 -dbpath /home/software/mongodb2.4.8/data/shard32_arb -port 10101 -logpath /home/software/mongodb2.4.8/data/shard32_arb.log -fork -nojournal初始化副本集 shard1:用 mongo 连接任意一个 mongod(仲裁节点除外): ./momgo -port 10100 并执行:config=_id:”shard2”,members:_id:0,host:”10.120.131.201:10100”,_id:1,host:”10.120.131
12、.203:10100”,_id:2,host:”10.120.131.204:10100”,_id:3,host:”10.120.131.204:10101,”arbiterOnly”:truers.initiate(config)配置三台 config server在三台服务器上分别启动 mongod(仲裁节点不需要配置 config):./mongod -configsvr -dbpath /home/software/mongodb2.4.8/data/config -port 20000 -logpath /home/software/mongodb2.4.8/data/config.
13、log -logappend -fork在三台服务器上分别启动 mongos:./mongos -configdb 10.120.131.201:20000,10.120.131.203:20000,10.120.131.204:20000 -port 30000 -chunkSize 1 -logpath /home/software/mongodb2.4.8/data/mongos.log -logappend -fork连接 mongos:./mongo port 30000配置分片:切换到 adminuse admin加入 shards:db.runCommand( addshard:
14、”replicaSetName/:,:”)db.runCommand(addshard:”shard1/10.120.131.201:10000,10.120.131.203:10000,10.120.131.204:10000”,name:”s1”);db.runCommand(addshard:”shard2/10.120.131.201:10100,10.120.131.203:10100,10.120.131.204:10100”,name:”s2”);对数据库 dbtest 进行分片:db.runCommand(enablesharding:”dbtest”)如果不执行这一步,则一个数据库只能在一个片上,执行了这一步之后,一个数据库的不同集合将会放在不同的片上。一个数据库的一个集合会放在同一个片上,如果要将同一个集合(mycol,包含两个字段:year,value)放在不同的片上,还需要将集合进行分片,指定分片键(year) ,执行下一步:db.runCommand(shardcollection:”db.mycol”,key:year:1)此时对数据 dbtest 的 mycol 集合分片完毕。