详解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日

相关文章

  • 使用go在mangodb中进行CRUD操作

    下面是使用Go在MongoDB中进行CRUD操作的完整攻略: 安装MongoDB和Go驱动程序 首先需要安装MongoDB和Go的驱动程序。可以在MongoDB官方网站上下载和安装MongoDB,Go的驱动程序可以使用go get命令进行下载和安装: go get go.mongodb.org/mongo-driver/mongo 连接MongoDB 在Go…

    MongoDB 2023年5月16日
    00
  • 利用MongoDB中oplog机制实现准实时数据的操作监控

    一、什么是oplog oplog是MongoDB中的操作日志,其全称为operations log,主要用于记录MongoDB数据中的操作,并且按照操作的顺序将这些操作以文档的形式记录在一个特殊的集合中,这个集合就是oplog。 oplog包含了MongoDB中所有的写操作,如插入、更新和删除,并且在MongodB的分布式系统中,oplog的作用是同步数据,…

    MongoDB 2023年5月16日
    00
  • MongoDB查询性能优化验证及验证

    这里是“MongoDB查询性能优化验证及验证”的完整攻略,包含两条示例说明。 验证查询性能 为了验证查询性能,我们可以使用MongoDB自带的性能分析功能。在MongoDB shell中启用分析功能,然后执行查询,最后检查分析数据。 启用性能分析功能: db.setProfilingLevel(2) 执行查询: db.collection.find({fie…

    MongoDB 2023年5月16日
    00
  • MongoDB的chunk详解

    MongoDB是一个支持自动分片的分布式数据库,它将数据水平划分为多个Chunk,并将这些Chunk分布在不同的服务器上。本文将详细介绍MongoDB的chunk,并提供了两个示例说明。 什么是Chunk? 一个Chunk是MongoDB中的一个数据范围,它是对数据的划分。每个Chunk分别由主键范围和Shard Key范围组成。 在MongoDB中,主键是…

    MongoDB 2023年5月16日
    00
  • php+mongodb判断坐标是否在指定多边形区域内的实例

    针对“php+mongodb判断坐标是否在指定多边形区域内”的实现,我们需要按照以下步骤进行: 1.准备工作 首先,需要安装MongoDB和PHP的扩展库MongoDB driver。在此不再赘述。 其次,需要安装一个支持geoJSON数据的MongoDB插件,geoJSON数据是一种用于表示地球上任意一个二维平面片的JSON格式数据,可以更加准确地表示地理…

    MongoDB 2023年5月16日
    00
  • golang语言中for循环语句用法实例

    下面是“golang语言中for循环语句用法实例”的完整攻略: 1. 基础语法 for循环是用于重复执行相同的代码块,可以控制循环次数或循环条件,基本语法如下: for 初始化语句; 条件语句; 修饰语句 { 循环体语句 } 初始化语句:在循环开始前执行一次,通常是用来设置循环变量的初始值; 条件语句:在每次循环开始前判断条件是否成立,如果成立则执行循环体语…

    MongoDB 2023年5月16日
    00
  • MongoDB数据库基本概念解析

    MongoDB数据库基本概念解析 MongoDB是一个开源、文档型数据库管理系统,无模式设计,用于存储和管理大量的非结构化数据。在使用MongoDB之前,需要了解一些基本概念。 集合(Collection) 在MongoDB中,集合是一组相关的文档,类似于RDBMS中的表。不同的是,MongoDB中的集合是无模式的,即可以随时动态添加或删除字段。示例: db…

    MongoDB 2023年5月16日
    00
  • Python操作mongodb的9个步骤

    下面我将详细讲解Python操作mongodb的9个步骤的完整攻略。整个过程中包含两条示例说明。 1. 安装pymongo 在Python中,使用PyMongo库来操作MongoDB。安装方式如下: pip install pymongo 2. 导入pymongo库 安装好后,在Python中使用Pymongo的方法是先导入Pymongo库。 import …

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