MongoDB集群搭建(分片+副本集)

MongoDB集群搭建(分片+副本集)

分片则指为处理大量数据,将数据分开存储,不同服务器保存不同的数据,它们的数据总和即为整个数据集。追求的是高性能。 副本集是在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。在生产环境中,通常是这两种技术结合使用,分片+副本集。

本篇文章采用的版本为3.6。

1.搭建环境

系统:windows10

服务器:192.168.6.1/2/3

MongoDB版本:3.6

服务器1服务器2服务器3
mongosmongosmongos
config serverconfig serverconfig server
shard1 分片1的主节点shard1 分片1的副节点shard1 分片1的仲裁节点
shard2 分片2的副节点shard2 分片2的仲裁节点shard2 分片2的主节点
shard3 分片3的仲裁节点shard3 分片3的主节点shard3 分片3的副节点

分别在每台机器建立mongos、config、shard1、shard2、shard3六个目录,因为mongos不存储数据,只需要建立日志文件目录即可,conf目录用于存放配置服务器,mongos用于存放路由服务器,config用于存放配置服务器,shard1、shard2、shard3用于存放分片副本集的主节点、副节点、仲裁节点。

2.分别搭建三台服务器上的分片副本集

1.主节点配置文件

systemLog:
    destination: file
    path: D:\Mongodb3.6\data\log\mongod.log
storage:
    dbPath: D:\Mongodb3.6\data\db
net:
   port: 27017
   bindIp: 0.0.0.0
replication:
   replSetName: rs_test01  指定所属副本集
sharding:
   clusterRole: shardsvr  指定节点的分片角色,shardsvr分片服务器,configsvf配置服务器

2.副节点配置文件

systemLog:
    destination: file
    path: D:\Mongodb3.6\data\log\mongod.log
storage:
    dbPath: D:\Mongodb3.6\data\db
net:
   port: 27017
   bindIp: 0.0.0.0
replication:
   replSetName: rs_test01

3.仲裁节点配置文件

systemLog:
    destination: file
    path: D:\Mongodb3.6\data\log\mongod.log
storage:
    dbPath: D:\Mongodb3.6\data\db
net:
   port: 27017
   bindIp: 0.0.0.0
replication:
   replSetName: rs_test01

副本集初始化流程: 

1.启动三台服务器的上的分片节点,进入mongodb/bin目录下,通过如下命令启动mongo服务:

mongod --config D:\Mongodb3.6\mongod.cfg

2.登陆任意一台服务器

mongo --port 27017

3.使用admin数据库

use admin 

4.初始化副本集,初始化方式有两种:

第一种:首先直接调用rs.initiate()方法,然后通过rs.add("ip:port")的方法设置副节点,通过rs.addArb("ip:port",true)的方法设置仲裁节点。

第二种:

1.首先声明一个config变量:

config = {

    _id : "副本集名称",

    members : [

        { id : 0 , host : "192.168.6.1:27017" },

        { id : 1 , host : "192.168.6.2:27017" },

        { id : 2 , host : "192.168.6.3:27017" , arbiterOnly : true},

    ]

}

2.然后通过rs.initiate(config)方法根据config配置变量初始化副本集。

 根据上面的步骤,修改IP或端口就可以配置其余两个分片。

3.配置服务器副本集搭建

配置文件

systemLog:
    destination: file
    path: D:\Mongodb3.6_cfg_rs2\data\log\mongod.log
storage:
    dbPath: D:\Mongodb3.6_cfg_rs2\data\db
net:
   port: 27027
   bindIp: 0.0.0.0
replication:
   replSetName: rs_test_cfg
sharding:
   clusterRole: configsvr

配置副本集初始化流程与上面的分片副本集初始化流程一样。
配置服务器副本集,需要3个节点,虽然官方说可以设置1个或3个,但是经过测试,配置服务器副本集只设置一个节点时,无法使用mongos命令链接路由服务器。配置服务器副本集中的3个节点中不能设置仲裁节点否则在报错(Arbiters are not allowed in replica set configurations being used for config servers)。

4.路由服务器搭建

配置文件

systemLog:
    destination: file
    path: D:\Mongodb3.6_mongos\data\log\mongod.log
net:
   port: 27037
   bindIp: 0.0.0.0
sharding:
  #监听的配置服务器,只能有1个或者3个 configs为配置服务器的副本集名字
   configDB: rs_test_cfg/192.168.6.1:27027,192.168.6.2:27027,192.168.6.3:27027 

 

5.分片

目前搭建了mongodb配置服务器、路由服务器,各个分片服务器,不过应用程序连接到mongos路由服务器并不能使用分片机制,还需要在程序里设置分片配置,让分片生效。 
登陆任意一台mongos,进入/usr/local/mongodb/bin目录下

mongos --port 27037

使用admin数据库

use  admin

串联路由服务器与分配副本集

sh.addShard("rs_test01/192.168.6.1:27017,192.168.6.2:27017,192.168.6.3:27017")
sh.addShard("rs_test02/192.168.6.1:27027,192.168.6.2:27027,192.168.6.3:27027")
sh.addShard("rs_test03/192.168.6.1:27037,192.168.6.2:27037,192.168.6.3:27037")

查看集群状态

sh.status()

 

6、 测试

目前配置服务、路由服务、分片服务、副本集服务都已经串联起来了,但我们的目的是希望插入数据,数据能够自动分片。连接在mongos上,准备让指定的数据库、指定的集合分片生效。 
指定数据库testdb分片生效

sh.enableSharding("testdb")

指定数据库里需要分片的集合和片键

sh.shardCollection("testdb.testCollection",{id:"hashed"})

关于分片键的介绍可以查看文章:https://blog.csdn.net/wenniuwuren/article/details/52945137 

我们设置testdb的 testCollection表需要分片,根据 id 自动分片到 shard1 ,shard2,shard3 上面去。要这样设置是因为不是所有mongodb 的数据库和表 都需要分片!插入100000条数据测试: 
这里写图片描述
查看分配状态

db.testCollection.stats();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值