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 代码中,需要增加 MongoClient
和 MongoTemplate
的 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技术站