MongoDB复制集
MongoDB复制集概述
复制集(Replica Sets)是额外的数据副本,是跨多个服务器同步数据的过程,复制集提供了冗余并增加了数据可用性,通过复制集可以对硬件故障和中断的服务进行恢复
复制集的优势:
- 让数据更安全
- 数据高可用性
- 灾难恢复
- 无停机维护(备份、索引重建、故障转移)
- 读缩放(额外的副本读取)
- 副本集对应用程序是透明的
复制集工作原理
MongoDB的复制集至少需要两个节点。其中一个是主节点(Primary),负责处理客户端的请求,其余的都是从节点(Secondary),负责复制主节点上的数据。
- 主节点记录所有变化到oplog日志,从节点复制主节点的oplog并将这些日志在从节点重做,各个节点之间会定期发送心跳信息,一旦主机宕机,则触发选举出一个新的主节点,剩余从节点指向新的主节点
- 集群存活节点小于等于二分之一时集群不可写,只可读,是否能选举出新的主节点,是由当前复制集成员存活数量来决定的
- 三类节点
- 标准(host)节点:存储数据,可能被选为活跃(primary)节点,有选举权
- 被动(passive)节点:被动节点有完整副本,不可能成为活跃节点,有选举权
- 仲裁(arbiter)节点:负责选举,不存储数据,不能充当主从节点
复制集特点:
- N个节点的集群
- 任何节点可作为主节点
- 所有写入操作都在主节点上
- 自动故障转移
- 自动恢复
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