其实我是照着大佬的方法配置的,之所以要自己写一篇博客是为了加深记忆,增强理解力。话不多说,开始。
我这里用的方法配置,就只需要下载一次mongodb,配置一次环境变量即可。还有种方式是直接弄多个mongodb运行在不同机器上。我这里选择这种方式实际上是偷懒了。不过无论哪种方式,架构都是一样的。先模仿别人,等自己彻底搞明白了再去按照自己的方式配置。
准备文件夹
我们这里弄两个分片,分别是shard1和shard2。
首先在D盘中创建一个文件夹,我这里是D:\shards
同时按照我的方式创建下面几个文件夹。
之后我们分别进入这几个文件夹,创建子文件夹。注意,config我没有用到,可以不用创建。
configServer:
config里面分别创建config-server1.config文件和config-server2.config文件。
之后进入data文件夹,创建一个db文件夹,再在db文件夹下面创建两个文件夹分别是server1和server2。
这两个文件夹是存放数据的文件夹。创建好后,configServer文件夹的准备工作我们就做好了。
接下来是routersvr文件夹:
config文件夹下面创建配置文件:
这样routersvr文件夹的准备工作也做好了
接下来看shard1文件夹:
在data文件夹下新建db文件夹,db文件夹下新建rs1和rs2文件夹:
在config文件夹下新建rs1和rs2文件夹:
接下来打开shard2文件夹,和shard1基本一样
config下面:
data\db:
至此,我们文件的准备基本结束。
现在开始配置
shard配置
shard2
打开rs1.conf,输入以下内容:
dbpath=D:\shards\shard2\data\db\rs1
logpath=D:\shards\shard2\log\rs1.log
journal=true
port=20001
replSet=shard2
rs2.conf:
dbpath=D:\shards\shard2\data\db\rs2
logpath=D:\shards\shard2\log\rs2.log
journal=true
port=20002
replSet=shard2
shard1
同理:
rs1:
dbpath=D:\shards\shard1\data\db\rs1
logpath=D:\shards\shard1\log\rs1.log
journal=true
port=10001
replSet=shard1
rs2:
dbpath=D:\shards\shard1\data\db\rs2
logpath=D:\shards\shard1\log\rs2.log
journal=true
port=10002
replSet=shard1
打开router.config,并且输入以下内容:
port=40001
logpath=D:\shards\routersvr\log\server.log
打开config-server1.config并输入:
dbpath=D:\shards\configServer\data\db\server1
logpath=D:\shards\configServer\log\server1.log
journal=true
port=30001
replSet=config-server
config-server2.config
dbpath=D:\shards\configServer\data\db\server2
logpath=D:\shards\configServer\log\server2.log
journal=true
port=30002
replSet=config-server
至此,所有的配置我们也基本弄完了,剩下就是一些cmd操作了。
打开cmd(不是shell),直接输入:
mongod -shardsvr -config D:\shards\shard1\config\rs1.conf
这个命令的意思是打开shard1的rs1节点
回车后并不会显示什么东西。但是记住,这个窗口千万别关,关了,就又要重新启动一次。
我们可以打开一个新的cmd窗口,验证该节点是否启动成功
输入mongo -port 10001
可以看到启动成功。
同理重复操作,启动rs2节点:
之后我们设置节点:
再打开一个cmd,分别按顺序输入以下命令:
mongo -port 10001
rs.initiate()
shard1:SECONDARY> rs.add("localhost:10002")
结果:
我们继续配置shard2
和shard1同理,操作一模一样,我就只放结果了:
到这里,两个分片就结束了,千万记得,启动节点的窗口别关闭了。
configServer
接下来是configServer:
打开一个新的cmd窗口,输入:
mongod -configsvr -config D:\shards\configServer\config\config-server1.config
再打开一个新的cmd窗口:
mongod -configsvr -config D:\shards\configServer\config\config-server2.config
这两个窗口也别关。
继续再打开一个窗口,依次输入以下三个命令:
mongo -port 30001
rs.initiate()
shard1:SECONDARY> rs.add("localhost:30002")
这里,configServer也完成了,我们继续下一个router。
router
打开一个新的窗口输入:
mongos -configdb "config-server/localhost:30001,localhost:30002" -config D:\shards\routersvr\config\router-server.config
这个窗口千万别关
接下来打开新cmd窗口,分别按顺序输入以下指令:
mongo -port 40001
use admin
db.runCommand({addshard:"shard1/localhost:10001,localhost:10002",allowLocal:true}) //添加分片1
db.runCommand({addshard:"shard2/localhost:20001,localhost:20002",allowLocal:true}) //添加分片2
此时我们可以看分片是否添加成功:
use config
db.shards.find()
已经添加成功了。
继续:
use admin
db.runCommand({"enablesharding":"test"}) //设置数据库分片存储
db.runCommand({"shardcollection":"test.users","key":{"_id":"hashed"}}) //设置集合片键,根据id进行分片
至此就已经全部配置好了。
测试
我们直接开始测试。打开一个新的cmd窗口。输入:
mongo -port 40001
开始进行插入操作:
use test
db.users.insert({name:"a1"})
然后连续插入几个数据,看他们分别存在哪个shard内。
我总共插入了8条数据,shard1里面有4条
shard2里面有4条
说明我们分片集群成功了。