MongoDB分片集群搭建

1. 分片集群架构目标
两个分片节点副本集(3+3)+一个配置节点副本集(3)+两个路由节点(2),共11个服务节点。

2. 分片(存储)节点副本集的创建
所有的的配置文件都直接放到 sharded_cluster 的相应的子目录下面,默认配置文件名字:mongod.conf
2.1 第一套副本集
准备存放数据和日志的目录:


#-----------myshardrs01
mkdir -p /mongodb/sharded_cluster/myshardrs01_27018/log \ &
mkdir -p /mongodb/sharded_cluster/myshardrs01_27018/data/db \ &

mkdir -p /mongodb/sharded_cluster/myshardrs01_27118/log \ &
mkdir -p /mongodb/sharded_cluster/myshardrs01_27118/data/db \ &

mkdir -p /mongodb/sharded_cluster/myshardrs01_27218/log \ &
mkdir -p /mongodb/sharded_cluster/myshardrs01_27218/data/db
 

vim /mongodb/sharded_cluster/myshardrs01_27018/mongod.conf
 

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
storage:
   #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/sharded_cluster/myshardrs01_27018/data/db" 
   journal:
      #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.pid"
net:
   #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
   #bindIpAll: true
   #服务实例绑定的IP(我用的是本地虚拟机,若是云端服务器,这里填本地局域网ip,可通过ifcofnig查看)
   bindIp: localhost,192.168.84.141
   #bindIp
   #绑定的端口
   port: 27018
replication:
   #副本集的名称
   replSetName: myshardrs01 
sharding:
   #分片角色
   clusterRole: shardsvr

注意:

设置sharding.clusterRole需要mongod实例运行复制。 要将实例部署为副本集成员,请使用replSetName设置并指定副本集的名称。

新建或修改配置文件:

vim /mongodb/sharded_cluster/myshardrs01_27118/mongod.conf

myshardrs01_27118:

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/myshardrs01_27118/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
storage:
   #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/sharded_cluster/myshardrs01_27118/data/db" 
   journal:
      #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27118/log/mongod.pid"
net:
   #服务实例绑定所有IP 
   #bindIpAll: true 
   #服务实例绑定的IP
   bindIp: localhost,192.168.84.141
   #绑定的端口
   port: 27118
replication:
   replSetName: myshardrs01 
sharding:
   clusterRole: shardsvr
新建或修改配置文件:vim /mongodb/sharded_cluster/myshardrs01_27218/mongod.conf

myshardrs01_27218:

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/myshardrs01_27218/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
storage:
   #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/sharded_cluster/myshardrs01_27218/data/db" 
   journal:
      #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27218/log/mongod.pid"
net:
   #服务实例绑定的IP
   bindIp: localhost,192.168.84.141
   #绑定的端口
   port: 27218 
replication:
   replSetName: myshardrs01 
sharding:
   clusterRole: shardsvr
启动第一套副本集:一主一副本一仲裁
依次启动三个mongod服务:

/usr/local/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27018/mongod.conf

/usr/local/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27118/mongod.conf

/usr/local/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27218/mongod.conf
查看服务是否启动:

ps -ef |grep mongod
2.2 第二套副本集
准备存放数据和日志的目录:

#-----------myshardrs02
mkdir -p /mongodb/sharded_cluster/myshardrs02_27318/log \ &
mkdir -p /mongodb/sharded_cluster/myshardrs02_27318/data/db \ &

mkdir -p /mongodb/sharded_cluster/myshardrs02_27418/log \ &
mkdir -p /mongodb/sharded_cluster/myshardrs02_27418/data/db \ &

mkdir -p /mongodb/sharded_cluster/myshardrs02_27518/log \ &
mkdir -p /mongodb/sharded_cluster/myshardrs02_27518/data/db
新建或修改配置文件:

vim /mongodb/sharded_cluster/myshardrs02_27318/mongod.conf
 

myshardrs02_27318:

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/myshardrs02_27318/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true 
storage:
   #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/sharded_cluster/myshardrs02_27318/data/db" 
   journal:
      #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: "/mongodb/sharded_cluster/myshardrs02_27318/log/mongod.pid"
net:
   #服务实例绑定的IP
   bindIp: localhost,192.168.84.141
   #绑定的端口
   port: 27318
replication:
   replSetName: myshardrs02 
sharding:
   clusterRole: shardsvr

 
 
新建或修改配置文件:

vim /mongodb/sharded_cluster/myshardrs02_27418/mongod.conf
1
myshardrs02_27418:

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/myshardrs02_27418/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
storage:
   #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/sharded_cluster/myshardrs02_27418/data/db" 
   journal:
      #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: "/mongodb/sharded_cluster/myshardrs02_27418/log/mongod.pid"
net:
   #服务实例绑定所有IP 
   #bindIpAll: true 
   #服务实例绑定的IP
   bindIp: localhost,192.168.84.141
   #绑定的端口
   port: 27418
replication:
   replSetName: myshardrs02
sharding:
   clusterRole: shardsvr

 
新建或修改配置文件:

vim /mongodb/sharded_cluster/myshardrs02_27518/mongod.conf
1
myshardrs02_27518:

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/myshardrs02_27518/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
storage:
   #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/sharded_cluster/myshardrs02_27518/data/db" 
   journal:
      #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: "/mongodb/sharded_cluster/myshardrs02_27518/log/mongod.pid"
net:
   #服务实例绑定所有IP 
   #bindIpAll: true 
   #服务实例绑定的IP
   bindIp: localhost,192.168.84.141
   #绑定的端口
   port: 27518
replication:
   replSetName: myshardrs02 
sharding:
   clusterRole: shardsvr

 
启动第二套副本集:一主一副本一仲裁
依次启动三个mongod服务:


/usr/local/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs02_27318/mongod.conf

/usr/local/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs02_27418/mongod.conf

/usr/local/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs02_27518/mongod.conf
 
2.3 配置节点副本集的创建
第一步:准备存放数据和日志的目录:

#-----------configrs
#建立数据节点data和日志目录
mkdir -p /mongodb/sharded_cluster/myconfigrs_27019/log \ &
mkdir -p /mongodb/sharded_cluster/myconfigrs_27019/data/db \ &

mkdir -p /mongodb/sharded_cluster/myconfigrs_27119/log \ &
mkdir -p /mongodb/sharded_cluster/myconfigrs_27119/data/db \ &

mkdir -p /mongodb/sharded_cluster/myconfigrs_27219/log \ &
mkdir -p /mongodb/sharded_cluster/myconfigrs_27219/data/db
 
新建或修改配置文件:

vim /mongodb/sharded_cluster/myconfigrs_27019/mongod.conf
1
myconfigrs_27019:

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/myconfigrs_27019/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
storage:
   #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/sharded_cluster/myconfigrs_27019/data/db" 
   journal:
      #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27019/log/mongod.pid"
net:
   #服务实例绑定所有IP 
   #bindIpAll: true 
   #服务实例绑定的IP
   bindIp: localhost,192.168.84.141
   #绑定的端口
   port: 27019
replication:
   replSetName: myconfigrs 
sharding:
   clusterRole: configsvr

 
新建或修改配置文件:

vim /mongodb/sharded_cluster/myconfigrs_27119/mongod.conf
1
myconfigrs_27119

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/myconfigrs_27119/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
storage:
   #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/sharded_cluster/myconfigrs_27119/data/db" 
   journal:
      #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27119/log/mongod.pid"
net:
   #服务实例绑定所有IP 
   #bindIpAll: true 
   #服务实例绑定的IP
   bindIp: localhost,192.168.84.141
   #绑定的端口
   port: 27119
replication:
   replSetName: myconfigrs 
sharding:
   clusterRole: configsvr

 
新建或修改配置文件:

vim /mongodb/sharded_cluster/myconfigrs_27219/mongod.conf
1
myconfigrs_27219

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/myconfigrs_27219/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
storage:
   #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。
   dbPath: "/mongodb/sharded_cluster/myconfigrs_27219/data/db" 
   journal:
      #启用或禁用持久性日志以确保数据文件保持有效和可恢复。
      enabled: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27219/log/mongod.pid"
net:
   #服务实例绑定所有IP 
   #bindIpAll: true 
   #服务实例绑定的IP
   bindIp: localhost,192.168.84.141
   #绑定的端口
   port: 27219
replication:
   replSetName: myconfigrs 
sharding:
   clusterRole: configsvr

 
启动配置副本集:一主两副本依次启动三个mongod服务:

/usr/local/mongodb/bin/mongod -f /mongodb/sharded_cluster/myconfigrs_27019/mongod.conf

/usr/local/mongodb/bin/mongod -f /mongodb/sharded_cluster/myconfigrs_27119/mongod.conf

/usr/local/mongodb/bin/mongod -f /mongodb/sharded_cluster/myconfigrs_27219/mongod.conf
 
查看服务是否启动:

 ps -ef |grep mongod
1
2.4 初始化副本集和创建主节点:
使用客户端命令连接任意一个节点,但这里尽量要连接主节点:

/usr/local/mongodb/bin/mongo --host 192.168.84.141 --port 27018
1
执行初始化副本集命令:

rs.initiate()
1
添加两个副本节点:

rs.add("192.168.84.141:27118") 
rs.addArb("192.168.84.141:27218") 
1
2
退出

exit
1
登录另一套副本集

/usr/local/mongodb/bin/mongo --host 192.168.84.141 --port 27318
1
执行初始化副本集命令:

rs.initiate()
1
添加副本节点:

rs.add("192.168.84.141:27418") 
rs.addArb("192.168.84.141:27518") 
1
2
退出

exit
1
初始化配置结点的副本集

/usr/local/mongodb/bin/mongo --host 192.168.84.141 --port 27019
1
执行初始化副本集命令:

rs.initiate()
1
添加两个副本节点:

rs.add("192.168.84.141:27119") 
rs.add("192.168.84.141:27219")
1
2
2.5 路由节点的创建和操作
2.5.1 第一个路由节点的创建和连接
第一步:准备存放数据和日志的目录:

#-----------mongos01
mkdir -p /mongodb/sharded_cluster/mymongos_27017/log
1
2
mymongos_27017节点:新建或修改配置文件:

vi /mongodb/sharded_cluster/mymongos_27017/mongos.conf
1
mongos.conf

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/mymongos_27017/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: /mongodb/sharded_cluster/mymongos_27017/log/mongod.pid"
net:
   #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
   #bindIpAll: true
   #服务实例绑定的IP
   bindIp: localhost,192.168.84.141
   #bindIp
   #绑定的端口
   port: 27017
sharding:
   #指定配置节点副本集
   configDB: myconfigrs/192.168.84.141:27019,192.168.84.141:27119,192.168.84.141:27219

 
启动mongos:

/usr/local/mongodb/bin/mongos -f /mongodb/sharded_cluster/mymongos_27017/mongos.conf
1
提示:启动如果失败,可以查看log目录下的日志,查看失败原因。

客户端登录mongos,

/usr/local/mongodb/bin/mongo --host 192.168.84.141 --port 27017
1
使用aabb

show dbs
use aabb
db.aa.insert({aa:"aa"}) 
1
2
3
2.5.2 在路由节点上进行分片配置操作
使用命令添加分片:(1)添加分片:
语法:

sh.addShard("IP:Port")
1
将第一套分片副本集添加进来:

sh.addShard("myshardrs01/192.168.84.141:27018,192.168.84.141:27118,192.168.84.141:27218")
1
查看分片状态情况:

sh.status()
1
继续将第二套分片副本集添加进来:

sh.addShard("myshardrs02/192.168.84.141:27318,192.168.84.141:27418,192.168.84.141:27518")
1
查看分片状态:

sh.status()
1
开启分片功能:sh.enableSharding(“库名”)、sh.shardCollection(“库名.集合名”,{“key”:1})在mongos上的articledb数据库配置sharding:

sh.enableSharding("articledb") 
1
分片规则一:哈希策略
使用nickname作为片键,根据其值的哈希值进行数据分片
sh.shardCollection("articledb.comment",{"nickname":"hashed"}) 
1
2)分片规则二:范围策略

 sh.shardCollection("articledb.author",{"age":1}) 
1
重启一个客户端,启动分片2:

/usr/local/mongodb/bin/mongo --port 27318
1
测试一(哈希策略测试)
在mongos上执行

use articledb
for(var i=1;i<=1000;i++) {db.comment.insert({_id:i+"",nickname:"BoBo"+i})}
db.comment.count() 
  
在分片1中执行:

use articledb 
db.comment.count() 
 
在分片2中执行:

use articledb 
db.comment.count() 
 
测试二(范围规则):
数据块(chunk)没有填满,默认的数据块尺寸(chunksize)是64M,填满后才会考虑向其他片的数据块填充数据,因此,为了测试,可以将其改小,这里改为1M,操作如下:

mongos> use config
mongos> db.settings.save( { _id:"chunksize", value: 1 } )
 
插入20000条数据

mongos> use articledb

mongos> for(var i=1;i<=20000;i++) {db.author.save({"name":"BoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoBoB oBoBoBoBoBoBoBoBo"+i,"age":NumberInt(i%120)})}

mongos> db.author.count()
 
在分片1:

myshardrs01:PRIMARY> use articledb

myshardrs01:PRIMARY> db.author.count()
 
在分片2:

myshardrs02:PRIMARY> use articledb

db.author.count()
 
2.5.3 再增加一个路由节点
文件夹:

#-----------mongos02
mkdir -p /mongodb/sharded_cluster/mymongos_27117/log
 
新建或修改配置文件:

vi /mongodb/sharded_cluster/mymongos_27117/mongos.conf
 
mongos.conf

systemLog:
   #MongoDB发送所有日志输出的目标指定为文件
   destination: file
   #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
   path: "/mongodb/sharded_cluster/mymongos_27117/log/mongod.log"
   #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。
   logAppend: true
processManagement:
   #启用在后台运行mongos或mongod进程的守护进程模式。
   fork: true
   #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
   pidFilePath: /mongodb/sharded_cluster/mymongos_27117/log/mongod.pid"
net:
   #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
   #bindIpAll: true
   #服务实例绑定的IP
   bindIp: localhost,192.168.84.141
   #bindIp
   #绑定的端口
   port: 27117
sharding:
   configDB: myconfigrs/192.168.84.141:27019,192.168.84.141:27119,192.168.84.141:27219

 
启动mongos2:

/usr/local/mongodb/bin/mongos -f /mongodb/sharded_cluster/mymongos_27117/mongos.conf
1
2.5.4 测试是否启动成功
1)第一种方法:使用MongoDB Compose软件进行连接:
 

2)使用SpringBootData
(1)Java客户端常用的是SpringDataMongoDB,其连接的是mongs路由,配置和单机mongod的配置是一样的。
多个路由的时候的SpringDataMongoDB的客户端配置参考如下:

uri: mongodb:// 192.168.84.141:27017, 192.168.84.141:27117/articledb
 

 

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值