mongodb(三)的副本集和主从配置

原创
2018/01/16 13:20
阅读数 349
AI总结

1.mongodb复制

MongoDB复制是将数据同步在多个服务器的过程。复制提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。复制还允许您从硬件故障和服务中断中恢复数据。

2.mongodb复制原理

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

MongoDB复制结构图如下所示:

 

以上结构图中,客户端从主节点读取数据,在客户端写入数据到主节点时, 主节点与从节点进行数据交互保障数据的一致性。

副本集特征:

·         N 个节点的集群

·         任何节点可作为主节点

·         所有写入操作都在主节点上

·         自动故障转移

·         自动恢复

 

3.mongodb副本集配置

(1).在所有的机器上的配置文件中加入replSet=replset

(2).登陆任意一台mongodb

 

#使用admin数据库

use admin

#定义副本集配置,这里的 _id:”replset” 和上面命令参数要保持一样。

 

      

    

         

config = { _id:"repset", members:[

{_id:0,host:"192.168.1.136:27017"},

{_id:1,host:"192.168.1.137:27017"},

{_id:2,host:"192.168.1.138:27017"}]

}

 

(3).初始化副本集配置

rs.initiate(config);

(4). 查看集群节点的状态

rs.status()

(5).添加/删除副本

先配置新MongoDB的replSet为repset

rs.add(“192.168.1.139:27017”);

rs.remove(“192.168.1.139:27017”)

4.java客户端连接

maven依赖:

<dependency>

    <groupId>org.springframework.data</groupId>

    <artifactId>spring-data-mongodb</artifactId>

     <version>1.8.4.RELEASE</version>

</dependency>

<dependency>

     <groupId>org.immutables</groupId>

     <artifactId>mongo</artifactId>

     <version>2.1.3</version>

  </dependency>

属性文件

#mongodb

#连接地址,集群副本,一个IP就可以

mongo.hostport=172.17.194.80:27017

#每个host允许链接的最大链接数,这些链接空闲时会放入池中,如果链接被耗尽,任何请求链接的操作会被阻塞等待链接可用,推荐配置10

mongo.connectionsPerHost=10

#线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值。如果连接线程排满了队列就会抛出“Out of semaphores to get db”错误。

mongo.threadsAllowedToBlockForConnectionMultiplier=5

#连接超时时间

mongo.connectTimeout=1000

#等待时间

mongo.maxWaitTime=1500

#这个控制是否在一个连接时,系统会自动重试

mongo.autoConnectRetry=true

#scoket保持活动

mongo.socketKeepAlive=true

#Socket超时时间

mongo.socketTimeout=1500

#读写分离

mongo.slaveOk=true

#数据库名字

mongo.dbname=test

 

spring配置

  <?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"

    xmlns:mongo="http://www.springframework.org/schema/data/mongo"

    xsi:schemaLocation="http://www.springframework.org/schema/beans 

            http://www.springframework.org/schema/beans/spring-beans.xsd 

            http://www.springframework.org/schema/data/mongo  

       http://www.springframework.org/schema/data/mongo/spring-mongo.xsd

            http://code.alibabatech.com/schema/dubbo 

            http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

 <!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->

    <mongo:mongo id="mongo" replica-set="${mongo.hostport}">

        <!-- 一些连接属性的设置 -->   

        <mongo:options

             connections-per-host="${mongo.connectionsPerHost}"

             threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"

             connect-timeout="${mongo.connectTimeout}"

             max-wait-time="${mongo.maxWaitTime}"

             auto-connect-retry="${mongo.autoConnectRetry}"

             socket-keep-alive="${mongo.socketKeepAlive}"

             socket-timeout="${mongo.socketTimeout}"

             slave-ok="${mongo.slaveOk}"

             write-number="1"

             write-timeout="0"

             write-fsync="true"/>       

    </mongo:mongo>

    <mongo:db-factory dbname="database" mongo-ref="mongo" />

   

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">

        <constructor-arg ref="mongo" />

        <constructor-arg name="databaseName" value="${mongo.dbname}" />

    </bean>

</beans>

5.mongodb主从配置

主配置:

master=true

oplogSize=2048

从配置:

slave=true

source=192.168.xxx.xx:27017

autoresync=true

ps:官方已经不建议使用主从配置

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
AI总结
返回顶部
顶部