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

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 本文倒腾目前大热的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,大致掌握了副本集的核心特性:


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


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


相关文章
|
Kubernetes 容器 Perl
在K8S中,Replica Set和Replication Controller之间有什么区别?
在K8S中,Replica Set和Replication Controller之间有什么区别?
|
存储 NoSQL MongoDB
mongodb搭建Replica Set
mongodb搭建Replica Set 简单高效
362 0
|
存储 NoSQL 测试技术
MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题
MongoDB复制集(replica set):MongoDB复制集维护相同数据集的一组mongod进程,复制集是生产部署的基础,具有数据冗余以及高可用性。
558 0
MongoDB系列-解决面试中可能遇到的MongoDB复制集(replica set)问题
|
NoSQL MongoDB Docker
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
271 0
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(1)
|
存储 NoSQL 网络协议
MongoDB系列-复制集(Replica Set)应用部署(生产、测试、开发环境)
通过在不同的计算机上托管mongod实例来尽可能多地保持成员之间的分离。将虚拟机用于生产部署时,应将每个mongod实例放置在由冗余电源电路和冗余网络路径提供服务的单独主机服务器上,而且尽可能的将副本集的每个成员部署到自己的计算机绑定到标准的MongoDB端口27017。
771 0
|
NoSQL Java MongoDB
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(3)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(3)
242 0
|
NoSQL MongoDB Docker
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(2)
基于docker容器下mongodb 4.0.0 的Replica Sets+Sharded Cluster集群(2)
267 0
|
4月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
4月前
|
缓存 NoSQL Linux
在CentOS 7系统中彻底移除MongoDB数据库的步骤
以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
407 79
|
4月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
265 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉

推荐镜像

更多