副本集、分片综合应用(1)

副本集、分片综合应用

1. 副本集的基本概念

什么是副本集?

副本集是一种在多台机器同步数据的进程,副本集体提供了数据冗余,扩展了数据可用性。在多台服务器保存数据可以避免因为一台服务器导致的数据丢失。
也可以从硬件故障或服务中断解脱出来,利用额外的数据副本,可以从一台机器致力于灾难恢复或者备份。

副本集的工作原理

在一个副本集中,有一个主节点和多个从节点。主节点负责处理客户端的所有写操作,这些写操作随后被复制到从节点。如果主节点发生故障,其中一个从节点将被自动提升为新的主节点。

在这里插入图片描述

2. 分片的基本概念

什么是分片?

分片是MongoDB中的数据分布策略,用于处理大数据集的水平扩展。

分片的工作原理

通过将数据分散在多个服务器(称为分片)上,MongoDB可以跨多个机器分布数据和查询负载。每个分片包含数据的一个子集,且整个集群的数据由所有分片 collectively 组成。

在这里插入图片描述

3. 副本集与分片的配置步骤

配置副本集

因为我们要启动三个 mongodb 服务,所以要准备三个数据存放位置,三个日志文件,三个配置文件。

  • 在 /data 路径下创建文件夹 db1、db2 和 db3 来存放三个服务的数据。

    root@hym:~# mkdir /data/db1
    root@hym:~# mkdir /data/db2
    root@hym:~# mkdir /data/db3

  • 在 /logs 路径下创建文件夹 mongo 存放日志文件 mongod1.log、mongod2.log 和
    mongod3.log(文件不用创建,到时候会自动生成,但路径即文件夹必须提前创建好)。

    root@hym:~# mkdir /logs
    root@hym:~# mkdir /logs/mongo

  • 在 /etc/mongod 路径下新建三个配置文件,使用配置文件启动 mongod 服务

    root@hym:~# mkdir /etc/mongod
    root@hym:~# cd /etc/mongod
    root@hym:/etc/mongod# vim mongod1.conf

    mongod1.conf 内容如下:
    
    port=27018 #配置端口号
    
    dbpath=/data/db1 #配置数据存放的位置
    
    logpath=/logs/mongo/mongod1.log #配置日志存放的位置
    
    logappend=true #日志使用追加的方式
    
    fork=true #设置在后台运行
    
    replSet=YOURMONGO #配置副本集名称,该名称要在所有的服务器一致
    

    root@hym:/etc/mongod# vim mongod2.conf

    mongod2.conf 内容如下:
    
    port=27019 #配置端口号
    
    dbpath=/data/db2 #配置数据存放的位置
    
    logpath=/logs/mongo/mongod2.log #配置日志存放的位置
    
    logappend=true #日志使用追加的方式
    
    fork=true #设置在后台运行
    
    replSet=YOURMONGO #配置副本集名称,该名称要在所有的服务器一致
    

    root@hym:/etc/mongod# vim mongod3.conf

    mongod3.conf 内容如下:
    port=27020 #配置端口号
    
    dbpath=/data/db3 #配置数据存放的位置
    
    logpath=/logs/mongo/mongod3.log #配置日志存放的位置
    
    logappend=true #日志使用追加的方式
    
    fork=true #设置在后台运行
    
    replSet=YOURMONGO #配置副本集名称,该名称要在所有的服务器一致
    
  1. 开启服务

    mongod -f /etc/mongod/mongod1.conf
    mongod -f /etc/mongod/mongod2.conf
    mongod -f /etc/mongod/mongod3.conf
    

三个端口的服务全部启动成功后,需要进入其中一个进行配置节点。 设置27019为 arbiter 节点。

  1. 进入端口号为27018的进行配置,连接数据库:mongo --port 27018
  2. 选择数据库 admin;
  3. 输入配置要求如下:
config = {_id:"YOURMONGO",members:[{_id:0,host:'127.0.0.1:27018'},{_id:1,host:'127.0.0.1:27019',arbiterOnly:true},{_id:2,host:'127.0.0.1:27020'}]}

使用 rs.initiate(config)进行初始化:rs.initiate(config)
在这里插入图片描述
如上所示配置成功后,不同端口的数据库登陆后左边的>可能变为如下两种状态:

说明该端口为主节点

YOURMONGO:PRIMARY> 

说明该端口为从节点

YOURMONGO:SECONDARY> 

至此副本集搭建完成,主数据库的数据的更新后,从数据库的数据也会同步更改,一旦主数据库挂掉,从数据库可自动变为主数据库。

配置分片

  • 和复制集一样,要准备目录存放数据和日志
mkdir -p /data/shard1/db
mkdir -p /logs/shard1/log
mkdir -p /data/shard2/db
mkdir -p /logs/shard2/log
mkdir -p /data/shard3/db
mkdir -p /logs/shard3/log
mkdir -p /data/config/db
mkdir -p /logs/config/log
mkdir -p /logs/mongs/log
  • 配置文件 (新建在 /etc/mongo 目录下);

       mongod1.conf 内容如下:   
    
        dbpath=/data/shard1/db
    
        logpath=/logs/shard1/log/mongodb.log
    
        port=10001
    
        shardsvr=true
    
        fork=true
    

    mongod2.conf mongod3.conf 此处省略
    和上面配置文件一样,把1改为2或3

  • 启动服务

     mongod -f /etc/mongo/mongod1.conf
     mongod -f /etc/mongo/mongod2.conf
     mongod -f /etc/mongo/mongod3.conf
    
  • 配置启动节点服务

    mongod --dbpath /data/config/db --logpath /logs/config/log/mongodb.log --port 10004 --configsvr --replSet cs –fork
    
  • 连接 route 节点:mongo localhost:10004

    use admin
    cfg = {_id:'cs',configsvr:true,members:[{_id:0,host:'localhost:10004'}]}
    rs.initiate(cfg)
    

    运行效果如图所示,说明设置成功:
    在这里插入图片描述
    配置启动节点服务:

    mongos --configdb cs/localhost:10004 --logpath /logs/mongs/log/mongodb.log --port 10005 –fork
    
     添加分片:
    
    sh.addShard('localhost:10001')
    sh.addShard('localhost:10002')
    sh.addShard('localhost:10003')
    

    sh.status() 查看状态

    运行效果如图所示,说明设置成功:
    在这里插入图片描述

结论

通过使用副本集和分片,MongoDB可以提供高可用性和良好的扩展性,是面对大规模数据处理需求时的理想选择。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值