mongodb复制集和分片

本文详细介绍了如何使用MongoDB进行分片与复制集的搭建,并通过自动化工具Gulp实现部署流程简化。主要内容包括:配置复制集、添加分片、初始化分片、配置服务器、分片添加与生效、以及自动化部署实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先了解大体了解mongodb复制集和分片的作用,简单来说复制集是保证数据的安全性,分片提高了数据库的并发性。(随便提一下对于数据安全性这里,mongodb是通过复制集实现的,当然也可以通过计算机的硬件来实现比如有的公司硬盘采用磁盘阵列冗余存储,没见过这东东是啥)

目录结构

mongodb安装目录下新建data目录用于存放数据

1__bash

data下对应五个文件夹,分别对应配置父亲,mongos服务器以及三个分片服务器,由于每个分片又是通过复制集来实现的,所有每个shard下面又有三台mongod实例。

 

脚本管理

由于在配置过程中会有大量重复的命令,所有我通过脚本形式来启动。

由于复制集是分片的基础,先说复制集

shard1.sh

/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/shard1/db1/db --logpath=/usr/local/mongodb/data/shard1/db1/log.log --logappend --fork --port 2000 --replSet=shard1

/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/shard1/db2/db --logpath=/usr/local/mongodb/data/shard1/db2/log.log --logappend --fork --port 2001 --replSet=shard1

/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/shard1/db3/db --logpath=/usr/local/mongodb/data/shard1/db3/log.log --logappend --fork --port 2002 --replSet=shard1

其实就是启动一个mongodb实例,—replSet=shard1,是要创建的复制集的标志。

执行后并没有形成一个复制集,还是需要初始化。

登陆任意一个mongod实例,/usr/local/mongodb/bin/mongod 127.0.0.1:2000/admin

执行rs.status(),会有相应的报错提示,大体意思是复制集还没有初始化,请先初始化

那输入配置config = {_id: “shard1”,members: [_{id: 0, host: “127.0.0.1:2000”},{_id: 1, host: “127.0.0.1:2001”},{_id:2, host: “127.0.0.1:2002”}]}

然后执行rs.initiate(config);

OK,第一个复制集就创建好了。其他三个复制集类似,需要注意的是每个分片的复制集的名字。为了好记,我是用shard1 shard2 shard3,另外端口我也是每个shard分别用2001 2001 2002,3000 3001 3002,4000 401 4002

配置服务器

首先启动配置服务器

/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data/conf/db --logpath=/usr/local/mongodb/data/conf/log.log --logappend --fork -port 5000 –configsvr

然后类似复制集一样需要分片配置的初始化

/usr/local/mongodb/bin/mongod 127.0.0.1:5000/admin

通过命令 db.runCommand({addshard: “replicaSetName/[serverhost[: port], …]”}),添加复制集分片

db.runCommand({addshard: “shard1/127.0.0.1:2000,127.0.0.1:2001,127.0.0.1:2002”})

db.runCommand({addshard: “shard2/127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002”})

db.runCommand({addshard: “shard3/127.0.0.1:4000,127.0.0.1:4001,127.0.0.1:4002”})

分片添加成功,查看 db.runCommand({listshards:1});

或是 show dbs

use conf

db.conf.find();

mongos服务器

启动服务器 /usr/local/mongodb/bin/mongos –port 5001 –configdb 127.0.0.1:5000

连接 /usr/local/mongodb/bin/mongo 127.0.0.1:5001/admin

使分片生效 db.runCommand({enablesharding: “sand”}),指定数据库

db.runCommand({shardcollection: “sand.decision”, key: {order: 1}}); 指定要分片的collection以及片键,因为并不是需要所有的collection都不要分片,分片的片键也不一样。

至此,分片工作以及完成

测试

连接mongos,如上

use sand

for(var i=1;i<100000000;i++){db.decision.save({name: “decision”+i, order: i});}

千万级还是要等老久了。。。

db.decision.count()

然后分别连接每个复制集的任意一个mongod的实例,执行db.decision.count()查看

复制集的secondary级别的默认是不允许操的,可以通过命令rs.status0k(),使之临时可以操作,此时会发现每个分片上都有数据且不同,但同一个分片上不同的mongod上数据是一样的。

&#160;

自动化

自己目前可以通过gulp实现简单的自动化部署,由于对gulp没有深入研究,一致在想能不能通过gulp实现全部的自动化呢?

公司没有这样的需求,只是自己平时玩玩,对稳定性,性能上都没有什么经验,如果有写过这方便的亲们给发个链接。

转载于:https://my.oschina.net/u/1249401/blog/525893

### 配置MongoDB复制集分片在头歌平台的方法 #### 1. 安装MongoDB 为了在头歌平台上配置MongoDB复制集分片,首先需要安装MongoDB。以下是具体的步骤: 解压并移动MongoDB压缩包至目标路径: ```bash tar -zxvf mongodb-linux-x86_64-3.2.10.tgz sudo mv mongodb-linux-x86_64-3.2.10 /usr/local/mongodb ``` 完成以上操作后即可确认MongoDB已成功安装[^1]。 --- #### 2. 创建必要的文件夹结构 在头歌平台上运行MongoDB复制集分片前,需先创建所需的目录结构来存储数据日志其他必要信息。具体命令如下: ```bash mkdir -p /data/test2/shard1/db mkdir -p /logs/test2/shard1/log mkdir -p /data/test2/shard2/db mkdir -p /logs/test2/shard2/log mkdir -p /data/test2/shard3/db mkdir -p /logs/test2/shard3/log mkdir -p /data/test2/config/db mkdir -p /logs/test2/config/log mkdir -p /logs/test2/mongs/log mkdir -p /etc/test2 ``` 这些指令用于建立各分片的数据目录以及对应的日志记录位置[^4]。 --- #### 3. 启动Config Server (CSRS) Config server 是整个分片架构中的核心组件之一,负责保存元数据信息。可以按照以下方式启动它: ```bash mongod --replSet csrs \ --dbpath /data/test2/config/db \ --logpath /logs/test2/config/log/mongodb.log \ --port 21004 \ --bind_ip localhost \ --fork ``` 此命令会以`csrs`名称初始化副本集,并绑定到端口 `21004` 上工作。 --- #### 4. 初始化Replica Set 对于每一个 Shard Config Server 的实例都需要单独执行初始化过程。例如,在第一个 shard 中可以通过下面的方式实现: ```javascript // 连接到该节点 mongo --host localhost --port 21001 // 执行初始化脚本 rs.initiate({ _id: "shardA", members: [ { _id : 0, host : "localhost:21001" } ] }); ``` 重复上述流程针对其他 shards (`shardB`, `shardC`) 及其对应成员列表进行相同处理[^5]。 --- #### 5. 启动Route Node (Mongos) 最后一步就是部署路由服务器(即 Mongos),它是客户端访问分布式系统的入口点。通过下列参数定义它的行为模式: ```bash mongos --configdb csrs/localhost:21004 \ --logpath /logs/test2/mongs/log/mongodb.log \ --port 21005 \ --fork ``` 这里指定了 config db 地址为 `localhost:21004` 并监听于 `21005` 端口号之上[^2]。 连接到刚启动好的 mongos 实例之后就可以继续添加各个实际存在的物理 shards 到逻辑上的全局视图里去了: ```javascript use admin; sh.addShard("localhost:21001"); sh.addShard("localhost:21002"); sh.addShard("localhost:21003"); ``` 至此为止已经完成了基本的 MongoDB Sharding 架构搭建[^3]。 --- #### 6. 设置读写偏好 当应用层面对副本集中不同角色间如何分配请求流量有所需求时,则可通过调整 readPreference 参数达成目的。可选值包括但不限于以下几个选项:primary、secondary、nearest等等[^5]。 例如如果希望优先从次级节点获取查询结果的话可以在驱动程序或者 shell 命令行工具里面这样设定: ```javascript db.getMongo().setReadPref('secondary'); ``` 这使得后续所有的只读型操作都会被导向可用的 Secondary 成员上去执行从而减轻 Primary 的负担。 --- ### 总结 综上所述,本文介绍了基于头歌环境下的 MongoDB Replication Sets and Sharding Configuration 方法论及其实践指南。涵盖了从基础软件准备到最后高级功能调优等多个方面内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值