MongoDB——MongoDB复制集

MongoDB复制集概述

复制集(Replica Sets)是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复

复制集的优势:

  • 让数据更安全
  • 数据高可用性
  • 灾难恢复
  • 无停机维护(备份、索引重建、故障转移)
  • 读缩放(额外的副本读取)
  • 副本集对应用程序是透明的

复制集工作原理

MongoDB的复制集至少需要两个节点。其中一个是主节点(Primary),负责处理客户端的请求,其余的都是从节点(Secondary),负责复制主节点上的数据。

  • 主节点记录所有变化到oplog日志,从节点复制主节点的oplog并将这些日志在从节点重做,各个节点之间会定期发送心跳信息,一旦主机宕机,则触发选举出一个新的主节点,剩余从节点指向新的主节点
  • 集群存活节点小于等于二分之一时集群不可写,只可读,是否能选举出新的主节点,是由当前复制集成员存活数量来决定的
  • 三类节点
    • 标准(host)节点:存储数据,可能被选为活跃(primary)节点,有选举权
    • 被动(passive)节点:被动节点有完整副本,不可能成为活跃节点,有选举权
    • 仲裁(arbiter)节点:负责选举,不存储数据,不能充当主从节点

复制集特点:

  1. N个节点的集群
  2. 任何节点可作为主节点
  3. 所有写入操作都在主节点上
  4. 自动故障转移
  5. 自动恢复

MongoDB复制集部署

配置复制集

准备工作 创建数据文件和日志文件存储路径
并且更改不同实例的配置文件
因为工作重复度高 因此写一个脚本

#!/bin/bash
CONF=/usr/local/mongodb/bin
DATA=/data
LOGS=/data/logs/mongodb
NUM1=27017
echo 'export PATH=$PATH:/usr/local/mongodb/bin' >> /etc/profile
source /etc/profile

mkdir -p $DATA &>/dev/null
mkdir -p $LOGS &>/dev/null

menu() {
   
   
cat <<-EOF
        #########################
        #    1.创建实例         #
        #    2.开启所有实例     #
        #    3.关闭所有实例     #
        #########################
        EOF
}
menu
read -p '想创建几个实例:' NUM2
read -p '请输入Mongodb服务器的ip地址:' IP
NUM=$[ $NUM1 + $NUM2 ]
for ((i=$NUM1;i<$NUM;i++))
do
        mkdir -p $DATA/mongodb-$i
        touch $LOGS/mongodb-$i.log
        chmod -R 777 $LOGS/mongodb-$i.log
        cat /etc/mongod.conf |grep -v '^#' |grep -v '^$' > $CONF/mongod-$i.conf
        sleep 1
        sed -ri "/path/c \  path: $LOGS/mongodb-$i.log" $CONF/mongod-$i.conf &>/dev/null
        sed -ri "/dbPath/c \  dbPath: $DATA/mongodb-$i" $CONF/mongod-$i.conf &>/dev/null
        sed -ri "/port:/c \  port: $i" $CONF/mongod-$i.conf &>/dev/null
        sed -ri "/bindIp:/c \  bindIp: $IP" $CONF/mongod-$i.conf &>/dev/null
        
done    
}

kai() {
   
   
        read -p '开启几个实例:' NUM2
        NUM=$[ $NUM1 + $NUM2 ]
        for ((i=$NUM1;i<=$NUM;i++))
        do
                mongod -f $CONF/mongod-$i.conf
        done
        ss -ntl
}

guan() {
   
   
        read -p '关闭几个实例:' NUM2
        NUM=$[ $NUM1 + $NUM2 ]
        for 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值