详解mongodb搭建Replica Set的方法

详解Mongodb搭建Replica Set的方法

Mongodb的Replica Set是实现高可用和数据冗余的常见方法,本篇文章将详细介绍在linux系统下搭建mongodb Replica Set的方法。

1. 安装Mongodb

在搭建Replica Set之前,需要先在服务器上安装Mongodb。在ubuntu操作系统中,可使用以下命令进行安装:

sudo apt-get update
sudo apt-get install mongodb

2. 配置Mongodb

Mongodb的配置文件可在/etc/mongodb.conf中进行编辑。以下是常见的配置项:

dbpath=/var/lib/mongodb                    # 数据库文件存储位置
logpath=/var/log/mongodb/mongodb.log       # 日志文件存储位置
logappend=true                              # 日志文件是否追加
bind_ip=127.0.0.1,123.123.123.123           # 绑定的IP地址
port=27017                                  # 监听的端口号

在无需设置认证的情况下,此时您已成功完成mongodb的安装和配置。

3.设置Replica Set

3.1 配置集群节点

在搭建Replica Set之前需要先确定节点的角色,分别是Primary、Secondary 和 Arbiter。

  1. Primary:每个Replica Set中只有一个Primary节点,提供唯一的写入操作,如索引和修改操作。

  2. Secondary:提供读取操作,从Primary节点复制数据,并参与选举成为Primary.

  3. Arbiter:只参与选举过程,不参与写入或复制数据。最小搭建方式的配置是一主一从一裁判,也可以多一个从节点,甚至裁判节点也可以多个。

在配置节点之前,首先需要设置Replica Set名称,可通过以下配置项完成:

replSetName=rs0    # 配置Replica Set名称

在各个节点的Mongodb配置文件中添加此项配置。

3.2 启动节点

在每个节点上使用以下命令启动Mongodb服务

mongod --config /etc/mongodb.conf

3.3 初始化Replica Set

操作任何一个节点,使用Mongo Shell连接并初始化Replica Set。Replica Set只需初始化一次。以下操作均在Mongo Shell中进行:

mongo

初始化Replica Set:

rs.initiate(
{
    _id : "rs0",
    members: [
        {_id:0, host:"ip:port"},
        {_id:1, host:"ip:port"},
        {_id:2, host:"ip:port", arbiterOnly:true}
    ]
})

其中,rs0为Replica Set的名称,members为节点列表,_id为节点在列表中的唯一标识,host为节点的ip地址和端口号,arbiterOnly表示该节点为裁判节点。

3.4 添加节点到Replica Set

在Mongodb的Replica Set运行过程中,还可以随时添加新的节点(Secondary或Arbiter)进入集群。

  1. 添加Secondary节点

在主节点上使用Mongo Shell连接,在MongoDB Shell中执行以下命令:

rs.add("ip:port") # 将ip:port添加为Secondary节点
  1. 添加Arbiter节点

在主节点上使用Mongo Shell连接,在MongoDB Shell中执行以下命令:

rs.addArb("ip:port") # 将ip:port添加为Arbiter节点

示例一:搭建一主一从一裁判的Replica Set

每个节点都应该安装mongodb。节点IP及端口如下:

主节点 从节点 裁判节点
123.123.123.1:27017 123.123.123.2:27017 123.123.1233:27017

1. 在每个节点上配置Mongodb

在节点上的配置项如下:

dbpath=/var/lib/mongodb
logpath=/var/log/mongodb/mongodb.log
logappend=true
bind_ip=123.123.123.1 # 主节点和从节点修改此项
port=27017
replSetName=rs0

主节点配置和从节点配置应该相同,只需修改bind_ip即可。

2. 在每个节点上启动Mongodb服务

在每个节点上使用以下命令启动Mongodb服务:

mongod --config /etc/mongodb.conf

3. 在主节点上初始化Replica Set

在主节点上执行以下命令:

mongo
rs.initiate(
{
    _id : "rs0",
    members: [
        {_id:0, host:"123.123.123.1:27017"},
        {_id:1, host:"123.123.123.2:27017"},
        {_id:2, host:"123.123.123.3:27017", arbiterOnly:true}
    ]
})

4. 添加从节点和裁判节点

在主节点上分别添加从节点和裁判节点:

rs.add("123.123.123.2:27017") 
rs.addArb("123.123.123.3:27017") 

Replica Set搭建完成,您可以通过以下命令查看集群状态:

mongo
rs.status()   # 查看集群状态

示例二:添加客户端访问的用户认证

上文中介绍了如何搭建一个基本的Replica Set,但在实际应用中,还需要配置客户端访问的用户认证,以下是配置步骤。

1. 创建用户及角色

在administration数据库中创建用户和角色,以下实例创建了两个角色:

  1. ReplicaSetAdmin:用于管理集群

  2. ReplicaSetUser:用于重写数据

use admin
db.createUser(
   {
     user: "admin",
     pwd: "passw0rd",
     roles: [ { role: "root", db: "admin" } ]
   }
)
use admin
db.createRole(
   {
     role: "ReplicaSetAdmin",
     privileges: [ { resource: { cluster: true }, actions: [ "addShard", "shardCollection", "listShards", "removeShard", "enableSharding", "disableSharding" ] } ],
     roles: []
   }
)
db.createRole(
   {
     role: "ReplicaSetUser",
     privileges: [ { resource: { db: "mydb", collection: "" }, actions: [ "find", "insert", "update", "remove" ] } ],
     roles: []
   }
)

其中,admin为Mongodb的系统管理数据库,mydb为自定义的业务数据库。

2. 配置Mongodb

在每个节点的配置文件中添加以下配置项:

auth=true
security.authorization = enabled

然后在主节点的Mongo Shell中执行以下操作:

use admin
db.createUser(
   {
     user: "ReplicaSetAdmin",
     pwd: "adminPassword",
     roles: [ { role: "ReplicaSetAdmin", db: "admin" } ]
   }
)
db.auth('ReplicaSetAdmin', 'adminPassword')

3. 在Replica Set中启用用户认证

使用主节点的Mongo Shell连接到Replica Set,并随机选择集群中一个从节点:

mongo --host "123.123.123.1:27017,123.123.123.2:27017,123.123.123.3:27017" --authenticationDatabase "admin" -u "ReplicaSetAdmin" -p "adminPassword"
rs.slaveOk()  # 切换到一个从节点上

在从节点上执行以下操作:

use admin
db.createUser(
   {
     user: "ReplicaSetUser",
     pwd: "password",
     roles: [ { role: "ReplicaSetUser", db: "mydb" } ]
   }
)
use admin
db.auth('ReplicaSetUser', 'password')
use mydb
db.createUser(
   {
     user: "mydb",
     pwd: "password",
     roles: [ { role: "readWrite", db: "mydb" } ]
   }
)

其中,mydb为自定义的业务数据库。

4. 客户端访问

在客户端连接Mongodb时,需要提供认证信息:

mongo --host "123.123.123.1:27017,123.123.123.2:27017,123.123.123.3:27017" --authenticationDatabase "mydb" -u "mydb" -p "password"

完成了以上操作,您可以通过以下命令查看集群状态:

mongo --host "123.123.123.1:27017,123.123.123.2:27017,123.123.123.3:27017" --authenticationDatabase "admin" -u "ReplicaSetAdmin" -p "adminPassword"
rs.status()   # 查看集群状态

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解mongodb搭建Replica Set的方法 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • java连接mongoDB并进行增删改查操作实例详解

    Java连接MongoDB并进行增删改查操作实例详解 介绍 MongoDB是最常用的NoSQL数据库之一,用于存储和处理大量非结构化的数据。Java是一种广泛使用的编程语言,很多企业和开发者使用Java来开发应用程序。在本篇攻略中,我们将介绍如何使用Java连接MongoDB,并执行增删改查操作。 环境准备 在开始之前,我们需要做一些准备工作: 安装好Jav…

    MongoDB 2023年5月16日
    00
  • PHP数据库操作四:mongodb用法分析

    PHP数据库操作四:mongodb用法分析 在本文中,将会介绍如何在PHP中使用mongodb数据库。我们将会探讨一系列相关的内容,比如: 1.什么是mongodb2.mongodb的应用场景3.mongodb的基本概念4.mongodb的安装和配置5.mongodb的数据库基本操作6.PHP中如何连接和操作mongodb数据库 什么是mongodb Mon…

    MongoDB 2023年5月16日
    00
  • Mongodb读数据操作

    下面是Mongodb读数据操作的完整攻略: 选择数据库和集合 要进行读数据操作之前,首先需要选择要读取的数据库和集合。 要选择数据库,可以使用以下命令: use <database-name> 要选择集合,可以使用以下命令: db.<collection-name> 查询所有文档 要查询所有文档,可以使用以下命令: db.<co…

    MongoDB 2023年5月16日
    00
  • MongoDB实现问卷/考试设计功能

    挑战:MongoDB实现问卷/考试设计功能 在本文中,我们将讨论如何使用MongoDB数据库实现问卷/考试设计功能。我们将介绍如何设计数据模型,如何使用Mongoose库将数据模型映射到MongoDB集合,以及如何编写基本的CRUD操作。同时,我们还将提供两个示例: 创建一个简单的问卷,它包含多个选择题,以及从答案中获取结果的逻辑。 设计一个考试系统,它支持…

    MongoDB 2023年5月16日
    00
  • mongodb 随机获取一条记录的方法

    获取 MongoDB 中的随机文档有许多种方式,但以下是几种常见的方法。 方法一:使用 $sample 操作符 MongoDB 3.2 及以上版本支持使用 $sample 操作符从集合中获取随机文档。$sample 操作符通过使用随机采样算法来获取指定数量的随机文档,然后返回它们作为游标中的单个批次。下面是使用 $sample 操作符的语法: db.coll…

    MongoDB 2023年5月16日
    00
  • Mongo DB增删改查命令

    MongoDB是一款著名的NoSQL数据库,其具有高可用、高可扩展性、高性能、灵活性和支持海量数据等特点,受到广泛关注。MongoDB的增删改查命令是基本的操作,也是学习和使用MongoDB的重要部分,以下是完整的MongoDB增删改查命令攻略。 MongoDB连接命令 首先,需要连接MongoDB数据库,连接命令如下: mongo [host:port/d…

    MongoDB 2023年5月16日
    00
  • NoSQL是什么?

    NoSQL是指“非关系型数据库”(Not only SQL),是一类数据库管理系统的统称。相对于传统的关系型数据库(SQL),NoSQL数据库不依赖固定的表格模式,通常以键-值对、文档、列族或者图形结构来存储数据。 NoSQL数据库被广泛应用于Web应用程序、大数据和实时分析等领域,因为它们能够处理大量的非结构化数据,并具有可扩展性和高可用性等优点。 NoS…

    2023年3月13日
    00
  • PHP实现动态创建XML文档的方法

    实现动态创建XML文档的方法,一般可以使用PHP的DOM(Document Object Model)扩展来完成。下面详细讲解如何使用DOM扩展创建XML文档。 步骤一:创建一个XML文档对象 在PHP中,可以通过调用DOMDocument类的构造函数来创建一个XML文档对象。代码示例如下: $doc = new DOMDocument(‘1.0’, ‘ut…

    MongoDB 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部