## 注: 机器1、2、3、4、5分别为 172.16.40.107、x.108、x.109、x.110、x.106
/etc/init.d/iptables stop
/etc/init.d/ip6tables stop
## 机器1:
rm -rf /home/mongodb/*
mkdir -p /home/mongodb/data/shard11
/usr/local/mongodb/bin/mongod --shardsvr --port 27017 --replSet shard1/dlxa08:27017 --dbpath /home/mongodb/data/shard11 --oplogSize 100 --logpath /home/mongodb/data/shard11.log --logappend --fork
## 机器2:
rm -rf /home/mongodb/*
mkdir -p /home/mongodb/data/shard12
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard1/dlxa07:27017 --port 27017 --dbpath /home/mongodb/data/shard12 --oplogSize 100 --logpath /home/mongodb/data/shard12.log --logappend --fork
## 初始化Replica Set, 连接任意一台mongod进程,(注:只要在一台db上执行一次下面的命令即可)
/usr/local/mongodb/bin/mongo --port 27017
config = {_id:'shard1',members:[
{_id:0,host:'172.16.40.107:27017'},
{_id:1,host:'172.16.40.108:27017'}]
}
rs.initiate(config);
# 查看初始化状态。
> rs.status();
#=====================================
同样方法,配置shard2用到的replica sets:
server3:
rm -rf /home/mongodb/*
mkdir -p /home/mongodb/data/shard21
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /home/mongodb/data/shard21 --oplogSize 100 --logpath /home/mongodb/data/shard21.log --logappend --fork
server4:
rm -rf /home/mongodb/*
mkdir -p /home/mongodb/data/shard22
/usr/local/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /home/mongodb/data/shard22 --oplogSize 100 --logpath /home/mongodb/data/shard22.log --logappend --fork
## 初始化Replica Set, 连接任意一台mongod进程,(注:只要在一台db上执行一次下面的命令即可)
/usr/local/mongodb/bin/mongo --port 27018
config = {_id: 'shard2', members: [
{_id: 0, host: '172.16.40.109:27018'},
{_id: 1, host: '172.16.40.110:27018'}]
}
rs.initiate(config);
# 查看初始化状态。
> rs.status();
#==================================================================
#配置3台config server
Server2:
mkdir -p /home/mongodb/data/config
/usr/local/mongodb/bin/mongod --configsvr --dbpath /home/mongodb/data/config --port 20000 --logpath /home/mongodb/data/config.log --logappend --fork
#config server也需要dbpath
Server4:
mkdir -p /home/mongodb/data/config
/usr/local/mongodb/bin/mongod --configsvr --dbpath /home/mongodb/data/config --port 20000 --logpath /home/mongodb/data/config.log --logappend --fork
Server5:
rm -rf /home/mongodb/*
mkdir -p /home/mongodb/data/config
/usr/local/mongodb/bin/mongod --configsvr --dbpath /home/mongodb/data/config --port 20000 --logpath /home/mongodb/data/config.log --logappend --fork
#==================================================================
配置mongos
#在
# server1,
# server3,
# server5,
#上分别执行:
/usr/local/mongodb/bin/mongos --configdb 172.16.40.106:20000,172.16.40.108:20000,172.16.40.110:20000 --port 30000 --chunkSize 5 --logpath /home/mongodb/data/mongos.log --logappend --fork
应该改为:
/usr/local/mongodb/bin/mongos --configdb 172.16.40.107:20000 --port 30000 --chunkSize 5 --logpath /home/mongodb/data/mongos.log --logappend --fork
#mongs不需要dbpath
#=================================================================
Configuring the Shard Cluster
连接到其中一个mongos进程,并切换到admin数据库做以下配置
1. 连接到mongs,并切换到admin
/usr/local/mongodb/bin/mongo 172.16.40.110:30000/admin
>db
Admin
2. 加入shards
如里shard是单台服务器,用>db.runCommand( { addshard : "<serverhostname>[:<port>]" } )这样的命令加入,如果shard是replica sets,用replicaSetName/<serverhostname>[:port][,serverhostname2[:port],…]这样的格式表示,例如本例执行:
db.runCommand( { addshard : "shard1/172.16.40.107:27017,172.16.40.108:27017",name:"s1",maxsize:20480} );
db.runCommand( { addshard : "shard2/172.16.40.109:27018,172.16.40.110:27018",name:"s2",maxsize:20480} );
db.runCommand( { addshard : "shard1/172.16.40.107:27017,172.16.40.108:27017",name:"s1"} );
db.runCommand( { addshard : "shard2/172.16.40.109:27018,172.16.40.110:27018",name:"s2"} );
#Name:用于指定每个shard的名字,不指定的话系统将自动分配
#maxSize:指定各个shard可使用的最大磁盘空间,单位megabytes
4. Listing shards
>db.runCommand( { listshards : 1 } )
如果列出了以上二个你加的shards,表示shards已经配置成功
5. 激活数据库分片
命令:
> db.runCommand( { enablesharding : "test" } );
通过执行以上命令,可以让数据库跨shard,如果不执行这步,数据库只会存放在一个shard,
6.
要使单个collection也分片存储,需要给collection指定一个分片key,通过以下命令操作:
> db.runCommand( { shardcollection : "test.cdr",key : {"_id":1} });
#################################################################################################
问题:
1、 只能启动1、3 configdbs
[root@dlxa07 ritow]# cat /home/mongodb/data/mongos.log
Mon Sep 5 17:20:29 need either 1 or 3 configdbs
,将两个中的一个kill掉,成功地将 mongos启动
2、3、4 问题可以通过关闭防火墙,得以解决:
2、 web 端只能看到一个,另一个看不到
能够: 172.16.40.107:28017、 172.16.40.109:28018
不能: 172.16.40.108:28017、 172.16.40.110:28018
3、初始化Replica Set, (107上)失败提示如下,但在两个中的另外一个(108上)运行同样的命令,启动貌似成功
失败情况:(于107上)
> rs.initiate(config);
{
"errmsg" : "couldn't initiate : need members up to initiate, not ok : 172.16.40.108:27017",
"ok" : 0
}
(于108上):
rs.initiate(config);
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
4、rs.status() 仍然是一个成功一个失败,情况同上。
#################################################################################################
1、 未启动分片
[root@dlxa10 mg_test]# ./InsertTest
sizeof(u8)==1
sizeof(u16)==2
sizeof(u32)==4
sizeof(u64)==8
<localhost:27017> is connected!
2961998925:2319215107
2978776141:855253525
2264924263
�
The using time is: 899S
计算结果:
插入1千万条记录,用时899秒,平均11123 条/秒
[root@dlxa06 mongodb-src-r1.8.3]# du -h /home/mongodb/data/;date
4.0K /home/mongodb/data/config/_tmp
209M /home/mongodb/data/config
209M /home/mongodb/data/
2011年 09月 06日 星期二 14:06:44 CST
[root@dlxa07 bin]# du -h /home/mongodb/data/;date
4.0K /home/mongodb/data/shard11/_tmp
673M /home/mongodb/data/shard11
673M /home/mongodb/data/
2011年 09月 06日 星期二 14:07:15 EDT
[root@dlxa08 ~]# du -h /home/mongodb/data/;date
4.0K /home/mongodb/data/shard12/_tmp
25G /home/mongodb/data/shard12
4.0K /home/mongodb/data/config/_tmp
209M /home/mongodb/data/config
25G /home/mongodb/data/
2011年 09月 06日 星期二 14:11:49 CST
[root@dlxa09 bin]# du -h /home/mongodb/data/;date
4.0K /home/mongodb/data/shard21/_tmp
209M /home/mongodb/data/shard21
209M /home/mongodb/data/
2011年 09月 06日 星期二 14:08:59 CST
[root@dlxa10 mg_test]# du -h /home/mongodb/data/;date
4.0K /home/mongodb/data/config/_tmp
209M /home/mongodb/data/config
4.0K /home/mongodb/data/shard22/_tmp
209M /home/mongodb/data/shard22
417M /home/mongodb/data/
2011年 09月 06日 星期二 14:08:39 CST
shard1:PRIMARY> db.persons.remove();
shard1:PRIMARY>
大约需要9分钟,没有获取精确时间
#################################################################################################
2、 激活分片
[root@dlxa10 mg_test]# ./InsertTest
sizeof(u8)==1
sizeof(u16)==2
sizeof(u32)==4
sizeof(u64)==8
<localhost:27017> is connected!
2961998925:2319215107
2978776141:855253525
2264924263
�
RECORD_COUNT=5000000. The using time is: 1902S
插入速率:2628条/秒
[root@dlxa07 bin]# du -h /home/mongodb/data/shard*
4.0K /home/mongodb/data/shard11/_tmp
8.2G /home/mongodb/data/shard11
[root@dlxa08 ~]# du -h /home/mongodb/data/shard*
4.0K /home/mongodb/data/shard12/_tmp
8.5G /home/mongodb/data/shard12
[root@