当前位置:网站首页>MongoDB——副本集与分片
MongoDB——副本集与分片
2022-06-28 20:25:00 【hyk今天写算法了吗】
MongoDB 复制(副本集)
介绍
MongoDB复制是将数据同步在多个服务器的过程。
复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。
什么是复制
1保障数据的安全性
2数据高可用性 (24*7)
3灾难恢复
4无需停机维护(如备份,重建索引,压缩)
5分布式读取数据
6MongoDB复制原理
7mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。
mongodb各个节点常见的搭配方式
mongodb各个节点常见的搭配方式为:一主一从、一主多从
主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。
MongoDB复制结构图如下所示:

标题副本集特征
1、N 个节点的集群
2、任何节点可作为主节点
3、所有写入操作都在主节点上
4、自动故障转移
5、自动恢复
6、MongoDB副本集设置
主要操作步骤
1、关闭正在运行的MongoDB服务器。
现在我们通过指定 --replSet 选项来启动mongoDB。–replSet 基本语法格式如下:
mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
实例
mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
以上实例会启动一个名为rs0的MongoDB实例,其端口号为27017。
启动后打开命令提示框并连接上mongoDB服务。
在Mongo客户端使用命令rs.initiate()来启动一个新的副本集。
我们可以使用rs.conf()来查看副本集的配置
查看副本集状态使用 rs.status() 命令
2、副本集添加成员
添加副本集的成员,我们需要使用多台服务器来启动mongo服务。进入Mongo客户端,并使用rs.add()方法来添加副本集的成员。
语法
rs.add() 命令基本语法格式如下:
>rs.add(HOST_NAME:PORT)
实例
假设你已经启动了一个名为mongod1.net,端口号为27017的Mongo服务。 在客户端命令窗口使用rs.add() 命令将其添加到副本集中,命令如下所示:
>rs.add("mongod1.net:27017")
>
MongoDB中你只能通过主节点将Mongo服务添加到副本集中, 判断当前运行的Mongo服务是否为主节点可以使用命令db.isMaster() 。
MongoDB的副本集与我们常见的主从有所不同,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况。
MongoDB 分片
介绍
在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
为什么使用分片
1、复制所有的写入操作到主节点
2、延迟的敏感数据会在主节点查询
3、单个副本集限制在12个节点
4、当请求量巨大时会出现内存不足。
5、本地磁盘不足
6、垂直扩展价格昂贵
MongoDB分片集群结构分布
下图展示了在MongoDB中使用分片集群结构分布:

上图中主要有如下所述三个主要组件:
Shard:
用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障
Config Server:
mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
Query Routers:
前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
分片实例
分片结构端口分布如下:
Shard Server 1:27020
Shard Server 2:27021
Shard Server 3:27022
Shard Server 4:27023
Config Server :27100
Route Process:40000
步骤一:启动Shard Server
[root@100 /]# mkdir -p /www/mongoDB/shard/s0
[root@100 /]# mkdir -p /www/mongoDB/shard/s1
[root@100 /]# mkdir -p /www/mongoDB/shard/s2
[root@100 /]# mkdir -p /www/mongoDB/shard/s3
[root@100 /]# mkdir -p /www/mongoDB/shard/log
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27020 --dbpath=/www/mongoDB/shard/s0 --logpath=/www/mongoDB/shard/log/s0.log --logappend --fork
....
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27023 --dbpath=/www/mongoDB/shard/s3 --logpath=/www/mongoDB/shard/log/s3.log --logappend --fork
步骤二: 启动Config Server
[root@100 /]# mkdir -p /www/mongoDB/shard/config
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27100 --dbpath=/www/mongoDB/shard/config --logpath=/www/mongoDB/shard/log/config.log --logappend --fork
注意:这里我们完全可以像启动普通mongodb服务一样启动,不需要添加—shardsvr和configsvr参数。因为这两个参数的作用就是改变启动端口的,所以我们自行指定了端口就可以。
步骤三: 启动Route Process
/usr/local/mongoDB/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500
mongos启动参数中,chunkSize这一项是用来指定chunk的大小的,单位是MB,默认大小为200MB.
步骤四: 配置Sharding
接下来,我们使用MongoDB Shell登录到mongos,添加Shard节点
[root@100 shard]# /usr/local/mongoDB/bin/mongo admin --port 40000
MongoDB shell version: 2.0.7
connecting to: 127.0.0.1:40000/admin
mongos> db.runCommand({
addshard:"localhost:27020" })
{
"shardAdded" : "shard0000", "ok" : 1 }
......
mongos> db.runCommand({
addshard:"localhost:27029" })
{
"shardAdded" : "shard0009", "ok" : 1 }
mongos> db.runCommand({
enablesharding:"test" }) #设置分片存储的数据库
{
"ok" : 1 }
mongos> db.runCommand({
shardcollection: "test.log", key: {
id:1,time:1}})
{
"collectionsharded" : "test.log", "ok" : 1 }
步骤五: 程序代码内无需太大更改,直接按照连接普通的mongo数据库那样,将数据库连接接入接口40000
边栏推荐
- 方 差 分 析
- Is it safe for CICC fortune to open an account? Let's talk about CICC fortune
- oracle delete误删除表数据后如何恢复
- 输入分隔符
- Employee salary management system
- 员工薪资管理系统
- Racher add / delete node
- Lecture 30 linear algebra Lecture 4 linear equations
- [algorithm] I brushed two big factory interview questions and learned array again with tears in my eyes“
- Windows 64 bit download install my SQL
猜你喜欢
随机推荐
Pyinstaller打包pikepdf失败的问题排查
Comparisonchain file name sort
SQL server2019 create a new SQL server authentication user name and log in
Past blue bridge cup test questions ants catch cold
rsync远程同步
Pyinstaller打包pikepdf失败的问题排查
The principle and source code analysis of Lucene index construction
压缩与解压缩命令
【学习笔记】主成分分析法介绍
Ali open source (easyexcel)
2. 整合 Filter
Fix the simulator that cannot be selected by flutter once
wc命令的使用
Quaternion quaternion and Euler angle transformation in ROS
2788.Cifera
Data standardization processing
Input and output character data
ThreadLocal principle
grep文本搜索工具
CNN-LSTM的flatten








