MongoDB 副本集

MongoDB 副本集 一、副本集概念

单节点的 MongoDB 在数据的安全和冗余方面是比较低的,在生产环境中,我们为 MongoDB 配置副本集,这样可以提高数据的高可用性和安全性。

副本集 :是一组 Mongod 维护相同数据集的实例。副本集可以包含多个数据承载点和多个仲裁点。在承载数据的节点中,仅有一个节点被视为主节点,其他节点称为次节点。

副本集的节点角色:

Primary 主节点,用于承担

Secondary 次节点

Arbiter 仲裁节点,也是属于次节点

主节点接收所有的数据写入操作,主节点记录数据的所有更改,即oplog。

副本集架构图

一个 主节点 两个次节点(Secondary )

MongoDB 副本集搭建与管理详解

一个主节点两个次节点(一个Secondary 节点,一个Arbiter 节点)

MongoDB 副本集搭建与管理详解

将一个额外的实例添加到副本集作为 仲裁节点。仲裁节点不维护数据集。仲裁节点的目的是通过响应其他副本集成员的心跳和选举请求来维护副本集中的选举。因为它们不存储数据集,所以仲裁节点可以是提供副本集仲裁功能的好方法,其资源成本比具有数据集的全功能副本集成员更低。如果您的副本集具有偶数个成员,请添加仲裁者以避免脑裂出现。

主节点故障后重新选举主节点

MongoDB 副本集搭建与管理详解

在主节点未与配置中的其它成员通信超过 10s(默认为10s)的话,则符合条件的次节点将推选自己为主节点。

在选举成功完成之前,副本集无法处理写入操作。

默认值为10000(10s) ,我们可以根据自己的项目情况来升高或者降低该值,我们在更改该值的时候需要考虑到网络延迟等因素。

默认情况下,副本集在选取新的主节点的等待时间不超过12秒(主要用于将原有主节点标记为不可用,并选举出新的主节点),

副本集数据同步

为了保持次节点与主节点的数据同步,MongoDB 使用两种方式进行数据的同步:

初始同步, 用于同步主节点的所有数据

初始同步将所有的数据从副本集的一个成员复制到另外一个成员

增量同步,在初始同步后不断复制新的数据

在初始同步后不断复制数据,次节点从主节点中同步复制 Oplog,并在异步过程中应用这些操作

Oplog 详解

MongoDB-Oplog详解

注意

副本集在部署前需要确定成员数据,副本集最多能有50个节点,但是只能有7个节点拥有被选举权,副本集需要具有奇数个投票成员,如果有偶数个的话,可以添加一个 仲裁者,来保证有奇数个成员,避免脑裂情况发生,

尽量使用 主机名 来寻找对应的节点,而不是使用 ip 地址,避免 ip 改变导致配置需要更改。

二、副本集部署 部署准备

部署需要更改 /etc/hosts 文件,将主机名和 ip 地址对应好,不应该使用ip。
使用统一的端口。
创建数据储存的位置和配置文件的位置。
确定好副本集的名称

搭建架构选择

三节点,一个主节点,一个次节点,一个仲裁节点

MongoDB 副本集

副本集部署 基本环境: 系统 CentOS 7 MongoDB 版本 4.0.8 3个节点 fymongodb001 内网IP:172.18.186.161 公网ip: 47.112.129.2 # 主节点 fymongodb002 内网IP: 172.18.186.162 公网ip: 47.112.131.231 # 次节点 fymongodb003 内网IP: 172.18.186.163 公网ip: 47.112.98.64 # 仲裁节点 副本集名称: fymongodb

三个节点都需要执行

# 下载mongodb cat <<EOF >>/etc/hosts 172.18.186.161 fymongodb001 172.18.186.162 fymongodb002 172.18.186.163 fymongodb003 EOF cd /tmp && wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.8.tgz tar -zxf mongodb-linux-x86_64-4.0.8.tgz mv mongodb-linux-x86_64-4.0.8 /opt/mongodb mkdir /opt/mongodb/{data,logs} useradd mongodb # 我们这里使用的配置文件 是YAML 格式的 wget https://raw.githubusercontent.com/tobewithyou1996/LinuxGuide/master/MongoDB/mongodb_rep.yaml -P /opt/mongodb/ chown -R mongodb:mongodb /opt/mongodb/ cat <<EOF >>/usr/lib/systemd/system/mongodb.service [Unit] Description= mongodb service manager [Service] # Other directives omitted # (file size) LimitFSIZE=infinity # (cpu time) LimitCPU=infinity # (virtual memory size) LimitAS=infinity # (locked-in-memory size) LimitMEMLOCK=infinity # (open files) LimitNOFILE=64000 # (processes/threads) LimitNPROC=64000 Type=forking User=mongodb Group=mongodb PIDFile=/opt/mongodb/logs/mongod.pid ExecStart= /opt/mongodb/bin/mongod -f /opt/mongodb/mongodb_rep.yaml ExecStop= /opt/mongodb/bin/mongod --shutdown --dbpath /opt/mongodb/data Restart=always [Install] WantedBy=multi-user.target EOF # 添加环境变量 echo "export PATH=$PATH:/opt/mongodb/bin" >>/etc/profile source /etc/profile # 启动 systemctl start mongodb

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5b57ab8d4f4723c3236b77c4f930147a.html