mkdir /sharding/replication1/mongodb1 -p
mkdir /sharding/replication1/mongodb2 -p
mkdir /sharding/replication1/mongodb3 -p
mkdir /sharding/replication1/mongodb1/data -p
mkdir /sharding/replication1/mongodb1/pid -p
mkdir /sharding/replication1/mongodb1/log -p
touch /sharding/replication1/mongodb1/pid/mongodb.pid
touch /sharding/replication1/mongodb1/log/mongodb.log
mkdir /sharding/replication1/mongodb2/data -p
mkdir /sharding/replication1/mongodb2/pid -p
mkdir /sharding/replication1/mongodb2/log -p
touch /sharding/replication1/mongodb2/pid/mongodb.pid
touch /sharding/replication1/mongodb2/log/mongodb.log
mkdir /sharding/replication1/mongodb3/data -p
mkdir /sharding/replication1/mongodb3/pid -p
mkdir /sharding/replication1/mongodb3/log -p
touch /sharding/replication1/mongodb3/pid/mongodb.pid
touch /sharding/replication1/mongodb3/log/mongodb.log
------
mkdir /sharding/replication2/mongodb1 -p
mkdir /sharding/replication2/mongodb2 -p
mkdir /sharding/replication2/mongodb3 -p
mkdir /sharding/replication2/mongodb1/data -p
mkdir /sharding/replication2/mongodb1/pid -p
mkdir /sharding/replication2/mongodb1/log -p
touch /sharding/replication2/mongodb1/pid/mongodb.pid
touch /sharding/replication2/mongodb1/log/mongodb.log
mkdir /sharding/replication2/mongodb2/data -p
mkdir /sharding/replication2/mongodb2/pid -p
mkdir /sharding/replication2/mongodb2/log -p
touch /sharding/replication2/mongodb2/pid/mongodb.pid
touch /sharding/replication2/mongodb2/log/mongodb.log
mkdir /sharding/replication2/mongodb3/data -p
mkdir /sharding/replication2/mongodb3/pid -p
mkdir /sharding/replication2/mongodb3/log -p
touch /sharding/replication2/mongodb3/pid/mongodb.pid
touch /sharding/replication2/mongodb3/log/mongodb.log
-----
mkdir /sharding/configservice/mongodb1 -p
mkdir /sharding/configservice/mongodb2 -p
mkdir /sharding/configservice/mongodb3 -p
mkdir /sharding/configservice/mongodb1/data -p
mkdir /sharding/configservice/mongodb1/pid -p
mkdir /sharding/configservice/mongodb1/log -p
touch /sharding/configservice/mongodb1/pid/mongodb.pid
touch /sharding/configservice/mongodb1/log/mongodb.log
mkdir /sharding/configservice/mongodb2/data -p
mkdir /sharding/configservice/mongodb2/pid -p
mkdir /sharding/configservice/mongodb2/log -p
touch /sharding/configservice/mongodb2/pid/mongodb.pid
touch /sharding/configservice/mongodb2/log/mongodb.log
mkdir /sharding/configservice/mongodb3/data -p
mkdir /sharding/configservice/mongodb3/pid -p
mkdir /sharding/configservice/mongodb3/log -p
touch /sharding/configservice/mongodb3/pid/mongodb.pid
touch /sharding/configservice/mongodb3/log/mongodb.log
每一个mongodb空间创建配置文件
vim /sharding/replication1/mongodb1/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/replication1/mongodb1/log/mongodb.log
### 写入数据存储配置 journal 类似于 MySQL binlog 日志,是否开启
### 是否开启 journal 日志持久存储,journal用来数据恢复
storage:
dbPath: /sharding/replication1/mongodb1/data
journal:
enabled: true
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/replication1/mongodb1/pid/mongodb.pid
### 网络配置
net:
port: 5001
bindIp: 192.168.33.131
### 副本配置 replSetName - 副本的名称
### enableMajorityReadConcern - 是否开启 ReadConcern 的级别为 majority ,默认为 false
### 只有开启此选项,才能在 read 操作中使用 majority
replication:
replSetName: shard0
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
sharding:
clusterRole: shardsvr
-------------------
vim /sharding/replication1/mongodb2/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/replication1/mongodb2/log/mongodb.log
### 写入数据存储配置 journal 类似于 MySQL binlog 日志,是否开启
### 是否开启 journal 日志持久存储,journal用来数据恢复
storage:
dbPath: /sharding/replication1/mongodb2/data
journal:
enabled: true
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/replication1/mongodb2/pid/mongodb.pid
### 网络配置
net:
port: 5002
bindIp: 192.168.33.131
### 副本配置 replSetName - 副本的名称
### enableMajorityReadConcern - 是否开启 ReadConcern 的级别为 majority ,默认为 false
### 只有开启此选项,才能在 read 操作中使用 majority
replication:
replSetName: shard0
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
sharding:
clusterRole: shardsvr
----
vim /sharding/replication1/mongodb3/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/replication1/mongodb3/log/mongodb.log
### 写入数据存储配置 journal 类似于 MySQL binlog 日志,是否开启
### 是否开启 journal 日志持久存储,journal用来数据恢复
storage:
dbPath: /sharding/replication1/mongodb3/data
journal:
enabled: true
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/replication1/mongodb3/pid/mongodb.pid
### 网络配置
net:
port: 5003
bindIp: 192.168.33.131
### 副本配置 replSetName - 副本的名称
### enableMajorityReadConcern - 是否开启 ReadConcern 的级别为 majority ,默认为 false
### 只有开启此选项,才能在 read 操作中使用 majority
replication:
replSetName: shard0
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
sharding:
clusterRole: shardsvr
启动第一个副本实例:
/usr/local/mongodb/bin/mongod -f /sharding/replication1/mongodb1/mongodb.conf
/usr/local/mongodb/bin/mongod -f /sharding/replication1/mongodb2/mongodb.conf
/usr/local/mongodb/bin/mongod -f /sharding/replication1/mongodb3/mongodb.conf
创建第二个副本的配置文件:
vim /sharding/replication2/mongodb1/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/replication2/mongodb1/log/mongodb.log
### 写入数据存储配置 journal 类似于 MySQL binlog 日志,是否开启
### 是否开启 journal 日志持久存储,journal用来数据恢复
storage:
dbPath: /sharding/replication2/mongodb1/data
journal:
enabled: true
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/replication2/mongodb1/pid/mongodb.pid
### 网络配置
net:
port: 5011
bindIp: 192.168.33.131
### 副本配置 replSetName - 副本的名称
### enableMajorityReadConcern - 是否开启 ReadConcern 的级别为 majority ,默认为 false
### 只有开启此选项,才能在 read 操作中使用 majority
replication:
replSetName: shard1
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
sharding:
clusterRole: shardsvr
---
vim /sharding/replication2/mongodb2/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/replication2/mongodb2/log/mongodb.log
### 写入数据存储配置 journal 类似于 MySQL binlog 日志,是否开启
### 是否开启 journal 日志持久存储,journal用来数据恢复
storage:
dbPath: /sharding/replication2/mongodb2/data
journal:
enabled: true
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/replication2/mongodb2/pid/mongodb.pid
### 网络配置
net:
port: 5012
bindIp: 192.168.33.131
### 副本配置 replSetName - 副本的名称
### enableMajorityReadConcern - 是否开启 ReadConcern 的级别为 majority ,默认为 false
### 只有开启此选项,才能在 read 操作中使用 majority
replication:
replSetName: shard1
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
sharding:
clusterRole: shardsvr
---
vim /sharding/replication2/mongodb3/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/replication2/mongodb3/log/mongodb.log
### 写入数据存储配置 journal 类似于 MySQL binlog 日志,是否开启
### 是否开启 journal 日志持久存储,journal用来数据恢复
storage:
dbPath: /sharding/replication2/mongodb3/data
journal:
enabled: true
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/replication2/mongodb3/pid/mongodb.pid
### 网络配置
net:
port: 5013
bindIp: 192.168.33.131
### 副本配置 replSetName - 副本的名称
### enableMajorityReadConcern - 是否开启 ReadConcern 的级别为 majority ,默认为 false
### 只有开启此选项,才能在 read 操作中使用 majority
replication:
replSetName: shard1
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
sharding:
clusterRole: shardsvr
启动第二个副本实例:
/usr/local/mongodb/bin/mongod -f /sharding/replication2/mongodb1/mongodb.conf
/usr/local/mongodb/bin/mongod -f /sharding/replication2/mongodb2/mongodb.conf
/usr/local/mongodb/bin/mongod -f /sharding/replication2/mongodb3/mongodb.conf
创建配置节点集群:
vim /sharding/configservice/mongodb1/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/configservice/mongodb1/log/mongodb.log
### 写入数据存储配置 journal 类似于 MySQL binlog 日志,是否开启
### 是否开启 journal 日志持久存储,journal用来数据恢复
storage:
dbPath: /sharding/configservice/mongodb1/data
journal:
enabled: true
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/configservice/mongodb1/pid/mongodb.pid
### 网络配置
net:
port: 5021
bindIp: 192.168.33.131
### 副本配置 replSetName - 副本的名称
### enableMajorityReadConcern - 是否开启 ReadConcern 的级别为 majority ,默认为 false
### 只有开启此选项,才能在 read 操作中使用 majority
replication:
replSetName: shard2
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
sharding:
clusterRole: configsvr
---
vim /sharding/configservice/mongodb2/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/configservice/mongodb2/log/mongodb.log
### 写入数据存储配置 journal 类似于 MySQL binlog 日志,是否开启
### 是否开启 journal 日志持久存储,journal用来数据恢复
storage:
dbPath: /sharding/configservice/mongodb2/data
journal:
enabled: true
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/configservice/mongodb2/pid/mongodb.pid
### 网络配置
net:
port: 5022
bindIp: 192.168.33.131
### 副本配置 replSetName - 副本的名称
### enableMajorityReadConcern - 是否开启 ReadConcern 的级别为 majority ,默认为 false
### 只有开启此选项,才能在 read 操作中使用 majority
replication:
replSetName: shard2
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
sharding:
clusterRole: configsvr
---
vim /sharding/configservice/mongodb3/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/configservice/mongodb2/log/mongodb.log
### 写入数据存储配置 journal 类似于 MySQL binlog 日志,是否开启
### 是否开启 journal 日志持久存储,journal用来数据恢复
storage:
dbPath: /sharding/configservice/mongodb3/data
journal:
enabled: true
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/configservice/mongodb3/pid/mongodb.pid
### 网络配置
net:
port: 5023
bindIp: 192.168.33.131
### 副本配置 replSetName - 副本的名称
### enableMajorityReadConcern - 是否开启 ReadConcern 的级别为 majority ,默认为 false
### 只有开启此选项,才能在 read 操作中使用 majority
replication:
replSetName: shard2
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
sharding:
clusterRole: configsvr
启动第3个配置实例:
/usr/local/mongodb/bin/mongod -f /sharding/configservice/mongodb1/mongodb.conf
/usr/local/mongodb/bin/mongod -f /sharding/configservice/mongodb2/mongodb.conf
/usr/local/mongodb/bin/mongod -f /sharding/configservice/mongodb3/mongodb.conf
客户端连接,初始化第一套副本:
mongo --host=192.168.33.131 --port=5001
初始化,并作为主节点:
rs.initiate()
查看配置信息:
rs.conf()
加入副本以及仲裁节点:
rs.add("192.168.33.131:5002") --- 加入副本节点
rs.remove("192.168.33.131:5002");
rs.addArb("192.168.33.131:5003") --- 加入仲裁节点 仲裁节点无法使用事务,一般不建议使用仲裁节点
rs.remove("192.168.33.131:5003")
客户端连接,初始化第二套副本:
mongo --host=192.168.33.131 --port=5011
初始化,并作为主节点:
rs.initiate()
查看配置信息:
rs.conf()
rs.add("192.168.33.131:5012")
rs.conf()
rs.addArb("192.168.33.131:5013")
rs.conf()
客户端连接,初始化配置集群:
mongo --host=192.168.33.131 --port=5021
初始化,并作为主节点:
rs.initiate()
查看配置信息:
rs.conf()
rs.add("192.168.33.131:5022")
rs.conf()
rs.add("192.168.33.131:5023")
rs.conf()
创建路由节点:
mkdir /sharding/route/mongodb1/log -p
mkdir /sharding/route/mongodb1/pid -p
touch /sharding/route/mongodb1/pid/mongodb.pid
touch /sharding/route/mongodb1/log/mongodb.log
mkdir /sharding/route/mongodb2/log -p
mkdir /sharding/route/mongodb2/pid -p
touch /sharding/route/mongodb2/pid/mongodb.pid
touch /sharding/route/mongodb2/log/mongodb.log
创建路由节点配置:
vim /sharding/route/mongodb1/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/route/mongodb1/log/mongodb.log
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/route/mongodb1/pid/mongodb.pid
### 网络配置
net:
port: 5031
bindIp: 192.168.33.131
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
### mongos 需要连接配置节点,读取配置节点的路由规则,再去操作存储数据的数据库
sharding:
configDB: shard2/192.168.33.131:5021,192.168.33.131:5022,192.168.33.131:5023
------------
vim /sharding/route/mongodb2/mongodb.conf
### 写入配置
### 写入日志存储配置 destination 输出目标,file(syslog) 代表输出到文件,不指定则默认为标准输出,logAppend 是否追加日志
systemLog:
destination: file
logAppend: true
path: /sharding/route/mongodb2/log/mongodb.log
### 进程管理配置
processManagement:
fork: true
pidFilePath: /sharding/route/mongodb2/pid/mongodb.pid
### 网络配置
net:
port: 5032
bindIp: 192.168.33.131
### shardsvr - sharding 分片,监听27018端口,configsvr - config server 监听27019端口
### mongos 需要连接配置节点,读取配置节点的路由规则,再去操作存储数据的数据库
sharding:
configDB: shard2/192.168.33.131:5021,192.168.33.131:5022,192.168.33.131:5023
启动 mongos 路由节点:
mongos -f /sharding/route/mongodb1/mongodb.conf
mongos -f /sharding/route/mongodb2/mongodb.conf
连接路由节点客户端:
mongo --host=192.168.33.131 --port=5031
连接路由节点,并添加副本:
sh.addShard(ip:port) 单机
sh.addShard(ip:port) 副本节点
添加分片:
sh.addShard("shard0/192.168.33.131:5001,192.168.33.131:5002,192.168.33.131:5003")
sh.addShard("shard1/192.168.33.131:5011,192.168.33.131:5012,192.168.33.131:5013")
查看:
sh.status()
分片集群是针对某一个数据库来分片的,并且需要指定到集合:
sh.enableSharding("数据库名称") --- 开启该数据库的分片
sh.shardingCollection("数据库名称.集合名称",{"根据哪个字段进行分片":"指定分片规则"})
sh.enableSharding("tb")
sh.shardCollection("tb.yc",{"name":"hashed"}) ---根据 _id 的 hash 值分片
sh.shardCollection("tb.sg",{"age":1}) ---根据 age 范围分片,所有的数据都会写入一个数据库(shard0),直到shard0数据达到64M,才会写入下一个数据库
测试之前,将64M的配置改为1M:
use config
db.settings.save({_id:"chunksize",value:1})
注:分片规则一定在 mongos> 执行
查看状态:
sh.status()
测试分片:
use tb
try{
for(var i=1;i<=10000;i++){
db.yc.insert({id_:i+"",name:"yc"+i,num:i})
}
}catch(e){
print(e)
}
查询插入数据的总条数:
db.yc.count()
范围分片测试:
use sg
try{
for(var i=1000001;i<=2000000;i++){
db.sg.insert({id_:i+"",name:"sg"+i,num:i})
}
}catch(e){
print(e)
}