Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍

Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍:

搭建副本集

准备工作

  • 在三台服务器上安装 MongoDB,建议都使用相同的版本
  • 为每台服务器创建并开放 MongoDB 的端口(默认端口为 27017)
  • 配置每台服务器的主机名并添加到 /etc/hosts 文件中,例如:
192.168.1.101 mongo1
192.168.1.102 mongo2
192.168.1.103 mongo3

创建数据目录

在每台服务器上创建数据目录,例如:

mkdir -p /data/mongodb/rs1
mkdir -p /data/mongodb/rs2
mkdir -p /data/mongodb/rs3

创建副本集

在一个节点上先创建一个配置文件:

# /data/mongodb/rs1/mongodb.conf

# 数据库路径
dbpath=/data/mongodb/rs1

# 端口号
port=27017

# 日志文件
logpath=/data/mongodb/rs1/mongodb.log
logappend=true

# 主机名
hostname=mongo1

# 副本集配置
# 注意:在搭建副本集过程中,容易犯错的地方之一就是没有正确配置副本集的三个成员及优先级
# 这里只配置了一个成员,实际应用中需要配置三个成员,分别为 PRIMARY、SECONDARY 和 ARBITER
replication:
  replSetName: rs0

然后依次启动三个节点,注意,一定要按照顺序启动节点,否则会出现副本集搭建失败的情况:

# 第一个节点
mongod --config /data/mongodb/rs1/mongodb.conf

# 第二个节点
mongod --config /data/mongodb/rs2/mongodb.conf

# 第三个节点
mongod --config /data/mongodb/rs3/mongodb.conf

初始化副本集

启动配置完成后进入任意一个节点,进入 mongo shell 执行初始化副本集命令:

rs.initiate()

上述命令会配置当前节点的角色为 PRIMARY,此时只有一个节点是 PRIMARY,其他节点都是 SECONDARY。PRIMARY 节点是负责数据写入的,而 SECONDARY 节点只是在执行数据同步的工作。如果 PRIMARY 节点出现故障,其他 SECONDARY 节点会自动切换到 PRIMARY 角色,保证数据可用性。

在 PRIMARY 节点上创建一个测试用的数据库及集合:

use test
db.createCollection('user')
db.user.insert({"name": "admin"})

接着在 SECONDARY 节点上查询该集合,会发现数据已经同步过来了:

rs.slaveOk()
use test
db.user.find()

spring和java连接副本集配置

在 Spring Boot 中使用 MongoDB,需要添加以下依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

配置文件中,需要增加以下配置:

spring:
  data:
    mongodb:
      uri: mongodb://mongo1:27017,mongo2:27017,mongo3:27017/test?replicaSet=rs0

其中,uri 对应的是副本集的连接字符串,test 是数据库名称,rs0 是副本集名称。

Java 代码中,需要增加 MongoClientMongoTemplate 的 bean:

@Bean
public MongoClient mongo() {

    List<ServerAddress> serverAddresses = new ArrayList<>();
    serverAddresses.add(new ServerAddress("mongo1", 27017));
    serverAddresses.add(new ServerAddress("mongo2", 27017));
    serverAddresses.add(new ServerAddress("mongo3", 27017));

    MongoClientOptions options = MongoClientOptions.builder()
            .readPreference(ReadPreference.secondaryPreferred())
            .build();

    return new MongoClient(serverAddresses, options);
}

@Bean
public MongoTemplate mongoTemplate() throws Exception {
    return new MongoTemplate(mongo(), "test");
}

其中,MongoClient 中的 readPreference 指定了读取数据时的偏好,这里是指向 SECONDARY 的节点优先。MongoTemplate 中的第一个参数是 MongoClient 实例,第二个参数是数据库名称。

使用以上配置后,即可在 Java 代码中使用 MongoTemplate 进行数据操作。

示例1

在 Java 代码中,可以使用 MongoTemplate 进行数据插入操作:

@Autowired
private MongoTemplate mongoTemplate;

public void insertUser(String name, int age) {
    Document document = new Document("name", name).append("age", age);
    mongoTemplate.insert(document, "user");
}

在 MongoDB 中,会自动根据文档结构创建对应的集合和索引。

示例2

使用 Spring Boot 开发 RESTful API,在控制器中可以注入 MongoTemplate 进行数据查询操作:

@Autowired
private MongoTemplate mongoTemplate;

@GetMapping("/users")
public List<Document> getAllUsers() {
    return mongoTemplate.findAll(Document.class, "user");
}

以上代码中,使用 findAll 方法获取 user 集合中的所有文档,并以 Document 对象的形式返回。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍 - Python技术站

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

相关文章

  • 浅析Tencent Analytics腾讯网站分析系统的架构

    浅析Tencent Analytics腾讯网站分析系统的架构 简介 Tencent Analytics腾讯网站分析系统是一种专门用于收集、分析网站数据的系统,它可以帮助网站管理员进行数据分析、优化和改进,提升网站访问量和用户体验。 该系统的架构包括数据采集、数据存储、数据分析和数据呈现四个部分。下面我们将对这四个部分进行详细分析。 数据采集 Tencent …

    人工智能概览 2023年5月25日
    00
  • Nginx防盗链与服务优化配置的全过程

    下面我将详细讲解“Nginx防盗链与服务优化配置的全过程”的完整攻略。本攻略分为以下几个步骤: 安装Nginx 首先需要安装Nginx。如果你是使用Linux系统,则可以使用该系统的包管理器进行安装;如果你正在使用Windows,则可以从Nginx官网下载安装包进行安装。 配置Nginx 在安装完成后,需要对Nginx进行配置。这里主要分为两个部分:防盗链和…

    人工智能概览 2023年5月25日
    00
  • 利用Python提取PDF文本的简单方法实例

    下面是“利用Python提取PDF文本的简单方法实例”的完整攻略。 一、引言 PDF(Portable Document Format)是一种常用的文档格式,它不仅可以在不同操作系统上使用,而且通常保留了其原始布局和格式。然而,在进行文本处理、数据分析和文本挖掘等任务时,需要从PDF文件中提取文本。在这篇文章中,我们将介绍利用Python提取PDF文本的简单…

    人工智能概论 2023年5月25日
    00
  • Python 读取位于包中的数据文件

    Python 读取位于包中的数据文件,具体攻略如下: 1.将数据文件添加到包中 首先我们需要将数据文件添加到Python包中,这可以通过按照下列步骤完成。 在Python包的根目录下新建一个命名为data的文件夹,用于存放数据文件。 将需要读取的数据文件复制到该文件夹中。 这样就完成了向Python包中添加数据文件的步骤。 2.确定数据文件的路径 接下来,我…

    人工智能概览 2023年5月25日
    00
  • Django动态随机生成温度前端实时动态展示源码示例

    以下是详细的讲解“Django动态随机生成温度前端实时动态展示源码示例”的完整攻略。 简介 本攻略将通过Django框架实现动态随机生成温度并通过前端实时动态展示,主要包含以下步骤: 创建Django项目并创建渲染模板 后端实现动态随机生成温度并将结果传递至渲染模板 前端实现实时动态展示温度 步骤一:创建Django项目及模板 首先需要创建一个Django项…

    人工智能概览 2023年5月25日
    00
  • python爬虫数据保存到mongoDB的实例方法

    让我为您介绍一下Python爬虫数据保存到MongoDB的实例方法。 1. 安装MongoDB的Python库 要保存数据到MongoDB,我们需要安装pymongo的Python库。可以通过以下命令进行安装: pip install pymongo 2. 连接MongoDB数据库 在保存数据之前,我们需要先连接到MongoDB数据库。可以使用以下代码: i…

    人工智能概论 2023年5月25日
    00
  • Django项目uwsgi+Nginx保姆级部署教程实现

    Django项目的uwsgi+Nginx部署是一种高效而稳定的部署方式。本教程将为您提供一步步的操作说明,以实现Django项目的uwsgi+Nginx保姆级部署。 一、安装uwsgi 使用pip安装uwsgi: pip install uwsgi 使用pip安装uwsgi后,需要在Django项目的根目录下创建uwsgi配置文件,以便启动uwsgi服务。 …

    人工智能概览 2023年5月25日
    00
  • C#如何自动识别文件的编码

    C#如何自动识别文件的编码 在 C# 中,我们可以使用 System.Text.Encoding 类中的 DetectXXX 方法来自动识别文件的编码。 该类提供了以下方法来检测文件的编码: Detect(byte[] buffer):检测字节数组的编码。 Detect(Stream stream):检测流的编码。 DetectFile(String pat…

    人工智能概论 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部