WHCSRL 技术网

MongoDB切片集群配置:_weixin

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)
}

推荐阅读