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:官方已经不建议使用主从配置