为了清楚的给大家讲解我们用了三台机器来搭建分片集群,而不是伪集群
MongoDB下载地址
mongo1 10.20.123.1
mongo2 10.20.123.2
mongo3 10.20.123.3
shard集群分为shard,配置服务器,路由。下面我以mongo1,mongo2,mongo3来代替会更加清晰
#三台机器下载或上传合适的mongodb包,并执行同样的操作,以mongo1为例
[bai@mongo1] tar -xzvf mongodb-linux-x86_64-rhel70-4.2.17.tgz -C /data/
[bai@mongo1] cd /data/
[bai@mongo1 data] mv mongodb-linux-x86_64-rhel70-4.2.17 mongodb
[bai@mongo1 data] ln -s /data/mongodb/bin/* /usr/bin/
[bai@mongo1 data] mkdir -p mongodb/{shard1,shard2,shard3}/{data,logs}
#接下来写配置文件,配置基本相同,只需要对应各自的服务器ip和端口以及replSet
#以mongo1为例,下列集群配置
[bai@mongo1 data] vim mongodb/shard1/data/mongo.cfg
dbpath=/data/mongodb/shard1/data
logpath=/data/mongodb/shard1/logs/mongodb.log
logappend=true
fork=true
bind_ip=mongo1
port=27001
replSet=shard1
shardsvr=true
[bai@mongo1 data] vim mongodb/shard2/data/mongo.cfg
dbpath=/data/mongodb/shard2/data
logpath=/data/mongodb/shard2/logs/mongodb.log
logappend=true
fork=true
bind_ip=mongo2
port=27002
replSet=shard2
shardsvr=true
[bai@mongo1 data] vim mongodb/shard3/data/mongo.cfg
dbpath=/data/mongodb/shard3/data
logpath=/data/mongodb/shard3/logs/mongodb.log
logappend=true
fork=true
bind_ip=mongo3
port=27003
replSet=shard3
shardsvr=true
以上是我们定义好的三个主节点,登录主节点启动集群
剩余两台机器的配置只需要更改对应的ip就好,路径、端口、replSet都不需要更改
#三台机器同时执行,以mongo1为例
[bai@mongo1 data] mongod -f mongodb/shard1/data/mongo.cfg
[bai@mongo1 data] mongod -f mongodb/shard2/data/mongo.cfg
[bai@mongo1 data] mongod -f mongodb/shard3/data/mongo.cfg
#到这里我们已经一共启动了九个节点
#以下只在一个节点操作就可以,这里我们在mongo1上操作
[bai@mongo1 data] mongo mongo1:27001/admin #前面的mongo是命令,后面mongo1是ip地址
#进入mongodb后的界面,>尖角号前什么都没有
#以下的mongo1,mongo2,mongo3均为ip地址的代写
> cfg={_id:"shard1",members:[{_id:0,host:'mongo1:27001'},{_id:1,host:'mongo2:27001'},{_id:2,host:'mongo3:27001'}]};
> rs.initiate(cfg) #使刚刚的配置生效
#执行完后我们发现,>尖角号前面有了之前命名的shard1
shard1:PRIMARY> exit
#操作同上,只在mongo1上执行
[bai@mongo1 data] mongo mongo1:27002/admin
> cfg={_id:"shard2",members:[{_id:0,host:'mongo1:27002'},{_id:1,host:'mongo2:27002'},{_id:2,host:'mongo3:27002'}]};
> rs.initiate(cfg)
shard2:PRIMARY> exit
#shard3
[bai@mongo1 data] mongo mongo1:27003/admin
> cfg={_id:"shard3",members:[{_id:0,host:'mongo1:27003'},{_id:1,host:'mongo2:27003'},{_id:2,host:'mongo3:27003 '}]};
> rs.initiate(cfg)
shard3:PRIMARY> exit
#三台服务器都配置,操作相同,这里以mongo1为例
[bai@mongo1 data] mkdir -p mongodb/configsvr/{data,logs}
[bai@mongo1 data] vim mongodb/configsvr/data/mongo.cfg
dbpath=/data/mongodb/configsvr/data
configsvr=true
port=28001
fork=true
logpath=/data/mongodb/configsvr/logs/mongodb.log
replSet=configrs
logappend=true
bind_ip=mongo1
#以上配置文件配置都相同,把ip地址改为相对应的机器,并更改端口就好了
#三台机器都去启动
[bai@mongo1 data] mongod -f mongodb/configsvr/data/mongo.cfg
#分别登录刚刚启动的配置服务器,配置配置服务器的信息
[bai@mongo1 data] mongo mongo1:28001/admin
> cfg={_id:"configrs",members:[{_id:0,host:'mongo1:28001'},{_id:1,host:'mongo2:28002'},{_id:2,host:'mongo3:28003'}]};
> rs.initiate(cfg)
configrs:PRIMARY> exit
#三台服务器都配置,操作相同,这里以mongo1为例
[bai@mongo1 data] vim mongodb/routesvr/mongo.cfg
configdb=configrs/mongo1:28001,mongo2:28002,mongo3:28003
port=30000
fork=true
logpath=/data/mongodb/routesvr/logs/mongodb.log
logappend=true
bind_ip=mongo1
#以上配置文件配置都相同,把ip地址改为相对应的机器就好了
#三台机器都去启动
[bai@mongo1 data] mongos -f mongodb/routesvr/mongo.cfg
#登录三台路由服务器,配置Replica Set
[bai@mongo1 data] mongo mongo1:30000/admin
#配置都一样,把主节点添加到 shard
mongos> sh.addShard("shard1/mongo1:27001");
mongos> sh.addShard("shard2/mongo2:27001");
mongos> sh.addShard("shard3/mongo3:27001");
集群基本搭建完成了,但是要分片还是没有成功的,因为要配置分片的信息,创建索引
mongos> use testdb #创建进入一个数据库
mongos> sh.enableSharding("testdb") #把testdb库加入shard中
mongos> sh.shardCollection("testdb.testcon",{"name":”hashed”}) #创建表testcon,索引为name字段使用hashed算法
mongos> db.collection.status() #查看状态
使用路由添加一百条数据,然后使用shard集群的27001端口分别登录集群看到,这一百条数据分别写在了三个集群上