MongoDB副本集+使用Mongotemplate连接

创建MongoDB副本集

MongoDB副本集实现故障自动切换至少需要以下配置为:
1.一个主节点,两个从节点
2.一个主节点,一个从节点一个仲裁节点。
如果只有一主一从节点,故障时无法选举出主节点从而实现切换。

安装

在三台服务器上安装MongoDB,同时在主节点数据库上提前创建好有副本集权限的用户。
当然你也可以选择安装在同一台服务器上(除了测试用,不然意义不大)。
安装部分请自行搜索网上资料,在此不再赘述。

配置

修改三个Mongo配置文件,都加入以下配置
第一个参数是指定副本集
第二个参数是使用key进行安全认证

replSet=test_resplset
keyFile=/usr/local/mongodb/conf/mongodb_key

如果配置中有auth=on项,请删除,否则会造成节点没有权限连接。副本集使用key文件进行安全认证。

生成key

> openssl rand -base64 102 /usr/local/mongodb/conf/mongodb_key

生成key文件

> chmod 600 /usr/local/mongodb/conf/mongodb_key

赋600权限

启动MongoDB

正常启动三个Mongo服务即可

> /usr/local/mongodb/bin/mongod -f /usr/local/mongodb/conf/mongodb.conf

然后连接一台你想使其成为主节点的数据库。

创建集群

连接主节点后,输入:

> config = {
           "_id" : "test_resplset",
           "members" : [
                   {
                           "_id" : 0,
                           "host" : "192.168.1.123:27020",
                           "priority" : 99
                   },
                   {
                           "_id" : 1,
                           "host" : "192.168.1.124:27021"
                   },
                   {
                           "_id" : 2,
                           "host" : "192.168.1.125:27022",
                           "arbiterOnly" : true
                   }
           ] }

arbiterOnly: true指这个节点为仲裁节点。
这里无论你的三个服务是否在同一个服务器上,都不要使用127.0.0.1地址,否则稍后连接数据库的时候会连接不上(域名我没测试过,各位可以自己尝试)。

> rs.initiate(config)

初始化集群。这两步只需要在主节点上操作一次即可。
出现{"ok":1}代表配置成功。
如果此处报没有权限认证的错误,请先使用有副本集权限的用户进行权限认证。

> use admin
> db.auth("user","pwd")
</
### 配置 Spring 与 MongoDB 副本连接 在 Spring 中配置与 MongoDB 副本连接,可以通过 `MongoClient` 和 `MongoTemplate` 来实现。以下是一个完整的配置示例,使用 Java 配置方式完成: ```java import com.mongodb.MongoClientSettings; import com.mongodb.ServerAddress; import com.mongodb.connection.ClusterSettings; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.mongodb.core.MongoTemplate; import java.util.Collections; @Configuration public class MongoConfig { @Bean public com.mongodb.client.MongoClient mongoClient() { // 定义副本中的服务器地址 ServerAddress server1 = new ServerAddress("localhost", 27017); ServerAddress server2 = new ServerAddress("localhost", 27018); ServerAddress server3 = new ServerAddress("localhost", 27019); // 配置群设置以支持副本 ClusterSettings clusterSettings = ClusterSettings.builder() .hosts(Collections.singletonList(server1)) .requiredReplicaSetName("my-replica-set") // 替换为实际的副本名称 .build(); // 创建 MongoClientSettings MongoClientSettings settings = MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.applySettings(clusterSettings)) .build(); // 返回 MongoClient 实例 return com.mongodb.client.MongoClients.create(settings); } @Bean public MongoTemplate mongoTemplate(com.mongodb.client.MongoClient mongoClient) { return new MongoTemplate(mongoClient, "testDatabase"); // 替换为实际的数据库名称 } } ``` 上述代码中,通过 `ClusterSettings` 配置了 MongoDB 副本的多个服务器地址,并指定了副本名称[^1]。此外,`MongoTemplate` 被用来简化对 MongoDB 的操作。 如果需要使用 XML 配置方式,则可以参考以下示例: ```xml <mongo:replica-set id="mongoClient" host="localhost:27017,localhost:27018,localhost:27019" replica-set="my-replica-set" /> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoClient" ref="mongoClient" /> <constructor-arg name="databaseName" value="testDatabase" /> </bean> ``` 在上述 XML 配置中,`mongo:replica-set` 元素定义了副本的多个服务器地址和副本名称[^1]。 #### 注意事项 - 确保所有副本成员的地址和端口正确无误。 - 替换 `my-replica-set` 和 `testDatabase` 为实际的副本名称和数据库名称。 - 如果需要身份验证,请在 `MongoClientSettings` 或 XML 配置中添加相应的认证信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值