mongodb项目实战与高级应用(MongoDB 高可用方案-MongoDB 数据分片搭建)

和Replica Set 类似,都需要一个仲裁节点,但是Sharding 还需要配置节点路由节点。就三种集
群搭建方式来说,这种是最复杂的。
配置数据节点

mkdir -p /opt/mongodb/shard/replset/replica1/data
mkdir -p /opt/mongodb/shard/replset/replica1/logs
mkdir -p /opt/mongodb/shard/replset/replica2/data
mkdir -p /opt/mongodb/shard/replset/replica2/logs
mkdir -p /opt/mongodb/shard/replset/replica3/data
mkdir -p /opt/mongodb/shard/replset/replica3/logs

vi /opt/mongodb/shard/replset/replica1/mongodb.cfg
 

dbpath=/opt/mongodb/shard/replset/replica1/data
logpath=/opt/mongodb/shard/replset/replica1/logs/mongodb.log
logappend=true
fork=true
bind_ip=47.107.182.164
port=27001
replSet=shard001
shardsvr=true

vi /opt/mongodb/shard/replset/replica2/mongodb.cfg

dbpath=/opt/mongodb/shard/replset/replica2/data
logpath=/opt/mongodb/shard/replset/replica2/logs/mongodb.log
logappend=true
fork=true
bind_ip=47.107.182.164
port=27002
replSet=shard001
shardsvr=true

vi /opt/mongodb/shard/replset/replica3/mongodb.cfg

dbpath=/opt/mongodb/shard/replset/replica3/data
logpath=/opt/mongodb/shard/replset/replica3/logs/mongodb.log
logappend=true
fork=true
bind_ip=47.107.182.164
port=27003
replSet=shard001
shardsvr=true

2.启动数据节点

mongod -f /opt/mongodb/shard/replset/replica1/mongodb.cfg
#47.107.182.164:27001
mongod -f /opt/mongodb/shard/replset/replica2/mongodb.cfg
#47.107.182.164:27002
mongod -f /opt/mongodb/shard/replset/replica3/mongodb.cfg
#47.107.182.164:27003

3、使数据节点集群生效

mongo 47.107.182.164:27001 #ip 和port 是某个节点的地址
cfg={_id:"shard001",members:[{_id:0,host:'47.107.182.164:27001'},{_i
d:1,host:'47.107.182.164:27002'},{_id:2,host:'47.107.182.164:27003'
}]};
rs.initiate(cfg) #使配置生效

4、配置configsvr(配置节点)

mkdir -p /opt/mongodb/shard/configsvr/config1/data
mkdir -p /opt/mongodb/shard/configsvr/config1/logs
mkdir -p /opt/mongodb/shard/configsvr/config2/data
mkdir -p /opt/mongodb/shard/configsvr/config2/logs
mkdir -p /opt/mongodb/shard/configsvr/config3/data
mkdir -p /opt/mongodb/shard/configsvr/config3/logs

/opt/mongodb/shard/configsvr/config1/mongodb.cfg

dbpath=/opt/mongodb/shard/configsvr/config1/data
configsvr=true
port=28001
fork=true
logpath=/opt/mongodb/shard/configsvr/config1/logs/mongodb.log
replSet=configrs
logappend=true
bind_ip=47.107.182.164

/opt/mongodb/shard/configsvr/config2/mongodb.cfg
 

dbpath=/opt/mongodb/shard/configsvr/config2/data
configsvr=true
port=28002
fork=true
logpath=/opt/mongodb/shard/configsvr/config2/logs/mongodb.log
replSet=configrs
logappend=true
bind_ip=47.107.182.164

/opt/mongodb/shard/configsvr/config3/mongodb.cfg

dbpath=/opt/mongodb/shard/configsvr/config3/data
configsvr=true
port=28003
fork=true
logpath=/opt/mongodb/shard/configsvr/config3/logs/mongodb.log
replSet=configrs
logappend=true
bind_ip=47.107.182.164

5、启动configsvr 节点

mongod -f /opt/mongodb/shard/configsvr/config1/mongodb.cfg
#47.107.182.164:28001
mongod -f /opt/mongodb/shard/configsvr/config2/mongodb.cfg
#47.107.182.164:28002
mongod -f /opt/mongodb/shard/configsvr/config3/mongodb.cfg
#47.107.182.164:28003

6、使configsvr 节点集群生效

mongo 47.107.182.164:28001 #ip 和port 是某个节点的地址
use admin #先切换到admin
cfg={_id:"configrs",members:[{_id:0,host:'47.107.182.164:28001'},{_i
d:1,host:'47.107.182.164:28002'},{_id:2,host:'47.107.182.164:28003'
}]};
rs.initiate(cfg) #使配置生效

配置路由节点

mkdir -p /opt/mongodb/shard/routesvr/logs
#注意:路由节点没有data 文件夹

vi /opt/mongodb/shard/routesvr/mongodb.cfg

configdb=configrs/47.107.182.164:28001,47.107.182.164:28002,47.107.182.164:28003//配置节点
port=30000
fork=true
logpath=/opt/mongodb/shard/routesvr/logs/mongodb.log
logappend=true
bind_ip=47.107.182.164

7.启动路由节点

./mongos -f /opt/mongodb/shard/routesvr/mongodb.cfg
#47.107.182.164:30000

这里我们没有用配置文件的方式启动,其中的参数意义大家应该都明白。一般来说一个数据节点对应一
个配置节点,仲裁节点则不需要对应的配置节点。注意在启动路由节点时,要将配置节点地址写入到启
动命令里。

4.配置Replica Set
这里可能会有点奇怪为什么Sharding 会需要配置Replica Set。其实想想也能明白,多个节点的数据
肯定是相关联的,如果不配一个Replica Set,怎么标识是同一个集群的呢。这也是人家mongodb 的
规定,咱们还是遵守吧。配置方式和之前所说的一样,定一个cfg,然后初始化配置。

 

8.配置Sharding

mongo 47.107.182.164:30000 #这里必须连接路由节点
sh.addShard("shard001/47.107.182.164:27001");
sh.addShard("shard002/47.107.182.164:27017");
#shard001、shard002 表示replica set 的名字当把主节点添加到shard 以后,会
自动找到set 里的主,备,决策节点
use testdb
sh.enableSharding("testdb") #testdb is database name
sh.shardCollection("testdb.testcon",{"name":”hashed”})
db.collection.status()

第一个命令很容易理解,第二个命令是对需要进行Sharding 的数据库进行配置,第三个命令是对需要
进行Sharding 的Collection 进行配置,这里的testcon 即为Collection 的名字。另外还有个key,
这个是比较关键的东西,对于查询效率会有很大的影响。
到这里Sharding 也已经搭建完成了,以上只是最简单的搭建方式,其中某些配置仍然使用的是默
认配置。如果设置不当,会导致效率异常低下,所以建议大家多看看官方文档再进行默认配置的修改。
以上三种集群搭建方式首选Replica Set,只有真的是大数据,Sharding 才能显现威力,毕竟备
节点同步数据是需要时间的。Sharding 可以将多片数据集中到路由节点上进行一些对比,然后将数据
返回给客户端,但是效率还是比较低的说。


我自己有测试过,不过具体的机器配置已经不记得了。Replica Set(副本集) 的ips 在数据达到1400W 条时基
本能达到1000 左右,而Sharding 在300W 时已经下降到500 IPS,两者的单位数据大小大概是10kb。
大家在应用的时候还是多多做下性能测试,毕竟不像Redis 有参照。

官网地址:https://www.mongodb.com/

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值