搭建mongodb分布式集群(3台主机分片集群)

搭建mongodb分布式集群(分片集群)

2020-01-02 12:56:37

介绍:

    分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。基本思想就是将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一部分,最后通过一个均衡器来对各个分片进行均衡(数据迁移)。通过一个名为mongos的路由进程进行操作,mongos知道数据和片的对应关系(通过配置服务器)。大部分使用场景都是解决磁盘空间的问题,对于写入有可能会变差(+++里面的说明+++),查询则尽量避免跨分片查询。使用分片的时机:

       Shard   Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障;
       Config  Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
       Route  Server: mongos  实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用

主机规划:

 
IP地址 实例(端口) 实例(端口) 实例(端口) 实例(端口) 实例(端口)
192.168.2.3 mongos(27107) configsvr(20000) shard1(27018) shard2(27019) shard3(27020)
192.168.2.4 mongos(27107) configsvr(20000) shard1(27018) shard2(27019) shard3(27020)
192.168.2.5 mongos(27107) configsvr(20000) shard1(27018) shard2(27019) shard3(27020)

目录创建:

在每台服务器创建对应的目录

1 mkdir -p /data/mongodb/{share1,share2,share3}/db
2 mkdir -p /data/mongodb/mongos/db
3 mkdir -p /data/mongodb/configsvr/db
4 mkdir -p /data/mongodb/{conf,logs}


创建配置文件:

1 touch /data/mongodb/conf/configsvr.conf 
2 touch /data/mongodb/conf/mongos.conf 
3 touch /data/mongodb/conf/shard1.conf 
4 touch /data/mongodb/conf/shard2.conf 
5 touch /data/mongodb/conf/shard3.conf

配置文件详情:

configsvr.conf

 1 systemLog:
 2     destination: file
 3     logAppend: true
 4     path: /data/mongodb/logs/configsvr.log
 5 storage:
 6  dbPath: /data/mongodb/configsvr/db 7  journal: 8  enabled: true 9 processManagement: 10  fork: true 11  pidFilePath: /data/mongodb/configsvr/configsvr.pid 12 net: 13 port: 20000 14 bindIp: 0.0.0.0 15 replication: 16  replSetName: config 17 sharding: 18 clusterRole: configsvr

shard1.conf

 1 systemLog:
 2     destination: file
 3     logAppend: true
 4     path: /data/mongodb/logs/shard1.log
 5 storage:
 6  dbPath: /data/mongodb/shard1/db 7  journal: 8  enabled: true 9 processManagement: 10  fork: true 11  pidFilePath: /data/mongodb/shard1/shard1.pid 12 net: 13 port: 27018 14 bindIp: 0.0.0.0 15 replication: 16  replSetName: shard1 17 sharding: 18 clusterRole: shardsvr

shard2.conf

 1 systemLog:
 2     destination: file
 3     logAppend: true
 4     path: /data/mongodb/logs/shard2.log
 5 storage:
 6  dbPath: /data/mongodb/shard2/db 7  journal: 8  enabled: true 9 processManagement: 10  fork: true 11  pidFilePath: /data/mongodb/shard2/shard2.pid 12 net: 13 port: 27019 14 bindIp: 0.0.0.0 15 replication: 16  replSetName: shard2 17 sharding: 18 clusterRole: shardsvr

shard3.conf

 1 systemLog:
 2     destination: file
 3     logAppend: true
 4     path: /data/mongodb/logs/shard3.log
 5 storage:
 6  dbPath: /data/mongodb/shard3/db 7  journal: 8  enabled: true 9 processManagement: 10  fork: true 11  pidFilePath: /data/mongodb/shard3/shard3.pid 12 net: 13 port: 27020 14 bindIp: 0.0.0.0 15 replication: 16  replSetName: shard3 17 sharding: 18 clusterRole: shardsvr

mongos.conf

 1 systemLog:
 2     destination: file
 3     logAppend: true
 4     path: /data/mongodb/logs/mongos.log
 5 processManagement:
 6  fork: true 7  pidFilePath: /data/mongodb/mongos/mongos.pid 8 net: 9 port: 27017 10 bindIp: 0.0.0.0 11 sharding: 12 configDB: config/192.168.2.3:20000,192.168.2.4:20000,192.168.2.5:20000

启动命令:

1 /data/mongodb/bin/mongod -f /data/mongodb/config/configser.conf
2 /data/mongodb/bin/mongod -f /data/mongodb/config/shard1.conf
3 /data/mongodb/bin/mongod -f /data/mongodb/config/shard2.conf
4 /data/mongodb/bin/mongod -f /data/mongodb/config/shard3.conf
5 /data/mongodb/bin/mongod -f /data/mongodb/config/mongos.conf

 停止命令:

killall mongod  #停止config 和shard 
killall mongos  #停止 mongos

连接 shard1 

/data/mongodb/bin/mongo 192.168.2.3:27018
执行

 1 rs.initiate({
 2 "_id":"shard1",
 3 "members":[
 4 {
 5 "_id":0,
 6 "host":"192.168.2.3:27018"
 7 }, 8 { 9 "_id":1, 10 "host":"192.168.2.4:27018" 11 }, 12 { 13 "_id":2, 14 "host":"192.168.2.5:27018" 15 } 16 ] 17 })

连接 shard2

/data/mongodb/bin/mongo 192.168.2.3:27019
执行

 1 rs.initiate({
 2 "_id":"shard2",
 3 "members":[
 4 {
 5 "_id":0,
 6 "host":"192.168.2.3:27019"
 7 }, 8 { 9 "_id":1, 10 "host":"192.168.2.4:27019" 11 }, 12 { 13 "_id":2, 14 "host":"192.168.2.5:27019" 15 } 16 ] 17 })

连接 shard3
/data/mongodb/bin/mongo 192.168.2.3:27020
执行

 1 rs.initiate({
 2 "_id":"shard3",
 3 "members":[
 4 {
 5 "_id":0,
 6 "host":"192.168.2.3:27020"
 7 }, 8 { 9 "_id":1, 10 "host":"192.168.2.4:27020" 11 }, 12 { 13 "_id":2, 14 "host":"192.168.2.5:27020" 15 } 16 ] 17 })

连接 config
/data/mongodb/bin/mongo 192.168.2.3:20000

 1 rs.initiate({
 2 "_id":"config",
 3 "members":[
 4 {
 5 "_id":0,
 6 "host":"192.168.2.3:20000"
 7 }, 8 { 9 "_id":1, 10 "host":"192.168.2.4:20000" 11 }, 12 { 13 "_id":2, 14 "host":"192.168.2.5:20000" 15 } 16 ] 17 })

连接 mongos 添加路由 

/data/mongodb/bin/mongo 192.168.2.3:27017

1 sh.addShard("shard1/192.168.2.3:27018,192.168.2.4:27018,192.168.2.5:27018")
2 sh.addShard("shard2/192.168.2.3:27019,192.168.2.4:27019,192.168.2.5:27019")
3 sh.addShard("shard3/192.168.2.3:27020,192.168.2.4:27020,192.168.2.5:27020")

登录 mongos 授权管理员

1 use admin
2 db.createUser({user:'admin',pwd:'admin',roles:['clusterAdmin','dbAdminAnyDatabase','userAdminAnyDatabase','readWriteAnyDatabase']})
授权库账号
use df_test
db.createUser({user:'df_test',pwd:'admin',roles:['readWrite']})

猜你喜欢

转载自www.cnblogs.com/hushaojie/p/12132365.html