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日

相关文章

  • 详解三分钟快速搭建分布式高可用的Redis集群

    详解三分钟快速搭建分布式高可用的Redis集群 1. 准备工作 在开始之前,我们需要做好以下的准备工作: 一台或多台 Linux 主机 安装 Docker 和 Docker Compose 下载 Redis 的 Docker 镜像 2. 搭建集群 第一步:编写 docker-compose 文件 我们可以通过 docker-compose 的方式简单快速创建…

    人工智能概览 2023年5月25日
    00
  • 详解Node.js模块间共享数据库连接的方法

    详解Node.js模块间共享数据库连接的方法 在Node.js项目中,数据库连接通常是需要共享的。不同的模块可能需要访问同一个数据库,因此需要实现数据库连接的共享。本文将详细介绍如何实现模块间共享数据库连接的方法。本文的代码将基于MongoDB数据库进行演示。 初始化数据库连接 首先,我们需要在项目的入口文件中初始化数据库连接,并将连接实例保存到全局对象中。…

    人工智能概览 2023年5月25日
    00
  • 漫谈架构之微服务

    漫谈架构之微服务 随着互联网技术的不断发展,软件系统规模不断增大,单一的架构已经无法满足业务的需要。于是,微服务架构应运而生。 什么是微服务架构? 微服务架构是将一个庞大的系统拆分成多个相对独立的小服务,每个小服务都拥有自己的独立部署、独立维护、独立扩展的能力。这样可以让整个系统更加灵活、高效、容错。相对于传统的单体应用架构,微服务架构可以提高开发效率、降低…

    人工智能概览 2023年5月25日
    00
  • 一次nginx崩溃事件的实战记录

    下面是关于“一次nginx崩溃事件的实战记录”的完整攻略,其中包含了两个示例说明。 一、前言 这是一篇记录Nginx崩溃事件的实战记录,旨在与大家分享如何通过日志分析和排查问题的过程,排除Nginx崩溃的问题。 在此之前,需要对Nginx的主要配置文件有一定的了解,并且对Linux系统的基本操作熟悉。如果您不知道这些,建议先学习相关知识再来阅读本文。 二、问…

    人工智能概览 2023年5月25日
    00
  • 详解Java分布式系统中session一致性问题

    详解Java分布式系统中session一致性问题 什么是session一致性问题 在分布式系统中,由于业务系统的扩展和部署,往往会存在多个应用实例,此时用户的请求可能会被路由到不同的应用实例上,而应用实例之间并不共享服务器内存,因此需要在不同的应用实例之间保证Session数据的一致性,即Session共享。如果没有解决Session共享问题,可能会导致用户…

    人工智能概览 2023年5月25日
    00
  • memset函数的使用分析

    memset函数的使用分析 什么是memset函数? memset函数是C标准库中的函数,用于对内存数组进行初始化赋值操作。通过一次性对数组的所有元素进行赋值操作,可以提高程序的执行效率和代码可读性。在头文件string.h中定义,函数原型为: void* memset(void* ptr, int value, size_t num); 该函数的三个参数含…

    人工智能概论 2023年5月25日
    00
  • mongoDB 多重数组查询(AngularJS绑定显示 nodejs)

    关于“mongoDB 多重数组查询(AngularJS绑定显示 nodejs)”这个问题,我可以给出以下的完整攻略: 1. mongoDB 多重数组查询 首先,mongoDB 支持多重数组的查询,可以通过以下的方式进行查询: db.collection.find({ "array1.array2.value": "query_v…

    人工智能概论 2023年5月25日
    00
  • python目标检测IOU的概念与示例

    下面我将为您详细讲解“python目标检测IOU的概念与示例”的完整攻略。 什么是IOU 在目标检测中,IOU(Intersection Over Union)是一种度量两个边界框重叠度的指标。IOU的计算方法如下: IOU = Intersection / Union 其中,Intersection是两个边界框的交集面积,Union是两个边界框的并集面积。…

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