设为首页 加入收藏

TOP

MongoDB 副本集搭建与管理详解
2019-05-23 14:40:02 】 浏览:87
Tags:MongoDB 副本 搭建 管理 详解

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


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


副本集的节点角色:


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


MongoDB 副本集搭建与管理详解


MongoDB 副本集搭建与管理详解


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


MongoDB 副本集搭建与管理详解


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


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


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


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


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


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


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


搭建架构选择


三个节点都需要执行


主节点操作


当我们完成上面的操作的时,我们主节点更改的数据已经是会自动同步到次节点的。


次节点操作


fymongodb002次节点(Secondary)设置允许读写操作。


测试数据的同步,我们在主节点创建一个集合test 并添加一条数据 'age':38 ,我们可以看到次节点也同步了该数据。



测试一


模拟主???点 fymongodb001 宕机了,然后查看次节点 fymongodb002 是否会被选举成为主节点。



我们可以看到 fymongodb002 选举为主节点.


测试二


fymongodb002 选举为主节点后,fymongodb001 恢复了,fymongodb001 会作为次节点加入。



测试三


测试在次节点(Secondary)进行数据删除。是删除不了的。


副本集配置用户和密码,登录主节点,添加admin 用户。


在主节点生成 keyflie 并复制到其它两个节点


更改三个节点的 keyFile 文件权限和所有者


更改三个节点的 mongodb_rep.yaml 配置文件,将 security 的参数 authorization 设置为 enabled,并配置


keyFile 的路径。


然后依次重启 fymongodb001fymongodb002fymongodb003


登陆 fymongodb001,我们使用 db.auth() 进行登陆验证。


副本集当做单节点启动需要更改配置文件,主要的配置文件有以下几点:


然后我们执行维护完后,关闭节点


然后还原原来的配置,然后作为副本集成员加入副本集。


如果我们想让某个节点成为主节点,或者是当主节点 down 了后,你想指定某个节点 优先级更高地成为 次节点。


当副本集的数据量比较大的时候,我们添加新的节点的时候,如果使用初始化同步的话,会给主节点造成比较大的压力。我们有以下选择:


延迟节点在此未记录,详细见官方文档。


建议将副本集至少部署在3个可用区。


配置副本集成员,使用的是主机名而不是 ip,因为 ip 可能变动。


副本集包含奇数个投票成员。


报错内容:


storage 参数 indexBuildRetry 不能与 副本集共存,当开启 副本集的时候,就需要将indexBuildRetry 参数注释。官网链接


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Oracle 中的SELECT 关键字(查询.. 下一篇MongoDB Oplog深入理解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目