(1)解锁MongoDB replica set核心姿势

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介: 本文倒腾目前大热的MongoDB Replica Set集群,在倒腾的同时串讲一些 MongoDB特性。

副本集Replica Set是一个术语,定义具有多节点的数据库集群,这些节点具有主从复制(master-slave replication) 且节点之间实现了自动故障转移


这样的结构通常需要具有奇数个成员的成员(无论是否带有Arbiter节点),以确保正确地选择PRIMARY(主)数据库。


选定的DB将处理所有传入的写操作,并将有关它们的信息存储在其oplog,每个辅助(从属)副本成员都可以访问和复制oplog,以应用于它们的数据集。

前置


  1. 为创建一个Replica set, 至少需要三个MongoDB实例,请查看官网安装指南.


  1. 本文会始终使用sudo指令,一般情况请为MongoDB服务创建一个标准用户 mongod

配置网络


为达到数据一致性,每个实例节点需要与集群其他节点通信,以三实例数据传输为例:


f9edc909c453a2b4fa9bd6734bff9126.png


① replica set每个成员都使用私有IP,部署在同一数据中心,这也是推荐方式。

② replica set每个节点使用公网ip,节点部署在不同数据中心(在replication时有网络延迟),这种方式一般用于强灾备部署,如果采用这种方式,需要在主机之间配置SSL/TLS或通过vpn通信


replica set节点认证


本节你会使用openssl创建一个用于在副本集成员之间认证的key文件,MongoDB推荐使用x.509证书加密连接。


① 产生key文件


openssl rand -base64 756 > mongo-keyfile

   将生成的key文件拷贝到复制集的每个成员

② 确保复制集成员都能访问同一路径的key文件:

sudo mkdir /opt/mongo
sudo mv ~/mongo-keyfile /opt/mongo
sudo chmod 400 /opt/mongo/mongo-keyfile


③ 默认安装的MongoDB使用标准账户 mongod ,确保mongod对文件有所有权


sudo chown mongod:mongod /opt/mongo/mongo-keyfile


创建Admin用户


登陆你打算设为Primary的MongoDB节点,进入admin数据库,创建具有root特权的管理员用户

use admin
db.createUser({user: "mongo-admin", pwd: "password", roles:[{role: "root", db: "admin"}]})


配置MongoDB


修改复制集每个成员的mongod.conf:


net:
   port: 27017
   bindIp: 127.0.0.1,192.0.2.1 
security:
   keyFile: /opt/mongo/mongo-keyfile
replication:   replSetName: rs0

指定key文件、replication set名称;


重启服务


sudo systemctl restart mongod


启动集群,添加节点


使用之前创建的管理员账户登陆 Primary MongoDB服务节点:


mongo -u mongo-admin -p --authenticationDatabase admin


初始化集群添加节点


rs.initiate()
rs.add("mongo-repl-2")
rs.add("mongo-repl-3")

以上使用hostsname 代替节点ip地址,需要在节点/etc/hosts添加节点的 hosts映射条目。


② 使用rs.conf() 或 rs.status() 验证集群配置和状态


倒腾Replica Set


完成以上步骤,MongoDB 三实例Replica Set已经搭建好了。

登陆Primary节点做一些常规倒腾 (顺便捡漏一些你意想不到的姿势)


① 输入测试数据

use exampleDB
for (var i = 0; i <= 10; i++)   db.exampleCollection.insert( { x : i } )


将会隐式创建exampleDB 和 文档集合exampleCollection。

请注意, 默认创建的Collection是不封顶的


封顶capped collection:有固定大小的集合,支持高通量操作,这些操作根据插入顺序插入和检索文档, 以循环缓冲区的形式工作(一旦集合达到分配空间,会通过override旧文档来腾挪出新的空间)。


② 观察Secondary节点是否已经同步到插入的数据


使用创建的管理员账户登陆 Secondary节点,直接查询会报:


ded4a6702adfff689701687acb803e64.png


因为默认建立的Replica set读写均发生均在Primary节点Secondary节点的作用是:冗余备份、故障转移);


不过MongoDB replica set支持在客户端设置read preference(读操作首选项),大部分Driver均支持在连接字符串中指定read preference读操作首选项,这个设置可实现真正意义的master-slave读写分离。


对应到shell会话,我们需要为本次Secondary会话 开启可读


db.getMongo().setSlaveOk()



使用shell命令的读取首选项


03cd0592cf8a0d517b75f8820e88c826.png


回过头来


实操本文,你已经可以完整搭建MongoDB Replica Set,大致掌握了副本集的核心特性:


主节点读写、辅助节点冗余备份;


支持对辅助节点开启读操作。


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
10月前
|
存储 NoSQL MongoDB
mongodb搭建Replica Set
mongodb搭建Replica Set 简单高效
161 0
|
NoSQL 算法 容灾
『MongoDB』MongoDB高可用部署架构——复制集篇(Replica Set)
读完这篇文章里你能收获到 1. MongoDB是如何通过复制集实现高可用的 2. 主节点宕机后如何通过选举做到故障恢复 3. 在复制集中常见的可调整参数有哪些 4. 在Linux原生环境搭建MongoDB复制集 5. 在Winodws环境搭建MongoDB复制集
786 1
『MongoDB』MongoDB高可用部署架构——复制集篇(Replica Set)
|
存储 NoSQL 测试技术
MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题
MongoDB复制集(replica set):MongoDB复制集维护相同数据集的一组mongod进程,复制集是生产部署的基础,具有数据冗余以及高可用性。
307 0
MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题
|
存储 NoSQL 网络协议
MongoDB系列-复制集(Replica Set)应用部署(生产、测试、开发环境)
通过在不同的计算机上托管mongod实例来尽可能多地保持成员之间的分离。将虚拟机用于生产部署时,应将每个mongod实例放置在由冗余电源电路和冗余网络路径提供服务的单独主机服务器上,而且尽可能的将副本集的每个成员部署到自己的计算机绑定到标准的MongoDB端口27017。
430 0
|
NoSQL Java MongoDB
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(3)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(3)
158 0
|
NoSQL MongoDB Docker
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(2)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(2)
168 0
|
NoSQL MongoDB Docker
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
146 0
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
|
存储 NoSQL 数据库
mongodb分片集群(sharding with replica set)配置
一共有4台机器,各自挂接一个存储,希望实现: 尽量节约存储 高可用性 存储大量数据 配置方案: 每一台机器做一个分片的主数据库 每一台机器做一个分片的后备数据库 每一台机器做一个分片的仲裁服务 两个两个一组交叉作对方的后备 有三台机器开配置服务 有一台机器开路由服务(生产环境可以在每一台Windows App服务器上开路由服务,App服务器集群做负载均衡) 这样的话,任何一台服务器完全离线(或者交叉的两台服务器离线),都能保证整个系统正常运行。
756 0
|
9天前
|
NoSQL MongoDB 数据库
MongoDB数据恢复—MongoDB数据库文件被破坏的数据恢复案例
服务器数据恢复环境: 一台Windows Server操作系统服务器,服务器上部署MongoDB数据库。 MongoDB数据库故障&检测: 工作人员在未关闭MongoDB数据库服务的情况下,将数据库文件拷贝到其他分区。拷贝完成后将原MongoDB数据库所在分区进行了格式化操作,然后将数据库文件拷回原分区,重新启动MongoDB服务,服务无法启动。
|
12天前
|
NoSQL MongoDB Redis
Python与NoSQL数据库(MongoDB、Redis等)面试问答
【4月更文挑战第16天】本文探讨了Python与NoSQL数据库(如MongoDB、Redis)在面试中的常见问题,包括连接与操作数据库、错误处理、高级特性和缓存策略。重点介绍了使用`pymongo`和`redis`库进行CRUD操作、异常捕获以及数据一致性管理。通过理解这些问题、易错点及避免策略,并结合代码示例,开发者能在面试中展现其技术实力和实践经验。
141 8
Python与NoSQL数据库(MongoDB、Redis等)面试问答