spring mongodb 复制集配置(实现读写分离)
Posted ExplorerMan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring mongodb 复制集配置(实现读写分离)相关的知识,希望对你有一定的参考价值。
注:mongodb当前版本是3.4.3
spring连接mongodb复制集的字符串格式:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
- mongodb:// 前缀,代表这是一个Connection String
- username:password@ 如果启用了用户认证,需要指定用户密码
- hostX:portX 复制集成员的ip:port信息,多个成员以逗号分割
- /database 认证时,用户帐号所属的数据库
- ?options 指定额外的连接选项
我们这里暂时没有启用用户认证;在options里添加readPreference=secondaryPreferred可以实现读写分离,读请求优先到Secondary节点。
mongodb数据库配置:
![](https://image.cha138.com/20210524/fa8e975db13346b987d03735b61b2f8a.jpg)
spring配置mongo数据源:
![](https://image.cha138.com/20210524/0371c077167d4995b05040647a286951.jpg)
实体类,通过注解@Document(collection = "user")指定collection名称:
![](https://image.cha138.com/20210524/d65233007b1044139eb5ae8c3606271e.jpg)
执行插入数据的测试用例:
![](https://image.cha138.com/20210524/789163e0b6e949aba24a7d172106955f.jpg)
控制台显示成功连接复制集,192.168.168.129:27017为Primary,192.168.168.130:27017和192.168.168.131:27017为Secondary:
执行insert操作时,连接的是主复制集:
![](https://image.cha138.com/20210524/4227cc1f444f45f8bd808e22e7e00b86.jpg)
从数据库查看主复制集信息:
![](https://image.cha138.com/20210524/9aa7d8e87bd24659a0a095df81ff6701.jpg)
同时可以看见一下两个从复制集已自动完成数据备份:
![](https://image.cha138.com/20210524/b5f3d7ce20684913974c8b28a88b6e98.jpg)
![](https://image.cha138.com/20210524/d45246ceea7749dd87a3fcfef98a082d.jpg)
执行读数据的测试用例:
![](https://image.cha138.com/20210524/d8d55a2ca37940a2b90cd26112d10f72.jpg)
执行读操作时,连接的是从复制集:
![](https://image.cha138.com/20210524/a42e9297583541cc85cbb32bf1643538.jpg)
模拟主复制集宕机:
![](https://image.cha138.com/20210524/8fd63d7357544871a86105449bf809fa.jpg)
通过rs.status()可以看到从复制集192.168.168.130:27017变成了主复制集:
![](https://image.cha138.com/20210524/a9b65b9dba5b4e5d81cbd9b3946c7afe.jpg)
再次执行插入数据的测试用例,这时候就可以看到执行插入操作时,连接的是新的主复制集192.168.168.130
![](https://image.cha138.com/20210524/87cda939b0d74e3b873b4d59a7fbfb6b.jpg)
数据库数据变化:
![](https://image.cha138.com/20210524/df5692fb60fb4e5bb25342db8478fdd1.jpg)
![](https://image.cha138.com/20210524/c11f993198d54398b8ac9f72713e2035.jpg)
读写分离详细说明:
mongodb复制集对读写分离的支持是通过Read Preferences特性进行支持的,这个特性非常复杂和灵活。
应用程序驱动通过read reference来设定如何对复制集进行读写操作,默认客户端驱动所有的读操作都是直接访问primary节点的,从而保证了数据的严格一致性。
支持五种 read preference模式:
1.primary:主节点,默认模式,读操作只在主节点,如果主节点不可用,报错或者抛出异常。
2.primaryPreferred:首选主节点,大多情况下读操作在主节点,如果主节点不可用,如故障转移,读操作在从节点。
3.secondary:从节点,读操作只在从节点,如果从节点不可用,报错或者抛出异常。
4.secondaryPreferred:首选从节点,大多情况下读操作在从节点,特殊情况(如单主节点架构)读操作在主节点。
5.nearest:最邻近节点,读操作在最邻近的成员,可能是主节点或者从节点,关于最邻近的成员请参考。
注意:2.2版本之前的mongodb对Read Preference支持还不完全。
参看地址:http://www.mongoing.com/archives/2642
以上是关于spring mongodb 复制集配置(实现读写分离)的主要内容,如果未能解决你的问题,请参考以下文章