专栏首页Dotnet Plus(1)解锁MongoDB replica set核心姿势

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

本文倒腾目前大热的MongoDB Replica Set集群,在倒腾的同时串讲一些 MongoDB特性。

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

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

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

前置

  1. 为创建一个Replica set, 至少需要三个MongoDB实例,请查看官网安装指南.
  2. 本文会始终使用sudo指令,一般情况请为MongoDB服务创建一个标准用户 mongod

配置网络

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

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

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节点,直接查询会报:

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

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

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

db.getMongo().setSlaveOk()

使用shell命令的读取首选项

回过头来

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

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

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

本文分享自微信公众号 - Dotnet Plus(nodotnet),作者:nodotnet

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

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

    小码甲
  • (2)MongoDB副本集自动故障转移 全流程原理

    前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节。

    小码甲
  • MongoDB 副本集运维策略

    本文聊一聊 MongoDB 副本集运维窗口期的操作策略,最大程度地减少主节点不可用的时间。

    小码甲
  • (1)解锁 MongoDB replica set核心姿势

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

    小码甲
  • 纸上谈兵: 图 (graph)

    图(graph)是一种比较松散的数据结构。它有一些节点(vertice),在某些节点之间,由边(edge)相连。节点的概念在树中也出现过,我们通常在节点中储存数...

    Vamei
  • Rafy 领域实体框架 - 树型实体功能(自关联表)

    在 Rafy 领域实体框架中,对自关联的实体结构做了特殊的处理,下面对这一功能进行讲解。 场景 在开发数据库应用程序时,往往会遇到自关联表的场景。例如,分类信息...

    用户1172223
  • 7-2 其余的一些树-排序二叉树-霍夫曼树

    二叉排序树可以通过递归的方法来定义,它或者是空二叉树,或者是具有如下定义的二叉树:

    TeeyoHuang
  • 【董天一】IPFS: BitSwap协议(数据块交换)

    IPFS在BitTorrent的基础上实现了p2p数据交换协议:BitSwap协议

    圆方圆学院
  • 【计算机本科补全计划】图的连通性check by 并查集Union Find

    具体的想法来自一篇写的超好的博客,如果底子不是很好,建议看下面这篇,当然如果可以给我顺手点个赞就更好了!!

    用户1687088
  • java架构之路-(分布式zookeeper)初识zookeeper安装与参数详解

      ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一...

    小菜的不能再菜

扫码关注云+社区

领取腾讯云代金券