文档章节

sql server 中间件支持读写分离

harris2016
 harris2016
发布于 2016/11/08 14:21
字数 836
阅读 1444
收藏 6

    经过一段时间艰苦的奋斗,终于把sql server的读写分离搞定了。大家可以下载oneproxy-for-sqlserver来使用此功能。更多消息,可以访问平民软件官网获取。或者加入群 数据库监控 521095285,或者关注oneproxy-monitor框架项目(oneproxy-for-sqlserver是在此项目下开发的,会同步更新此框架)

    下面说说oneproxy-for-sqlserver读写分离的使用方法和开发中遇到的有趣问题。

一. 使用方法

为了支持读写分离,需要修改[oneproxy]标签的数据和增加[database_xxx]标签的数据以及数据库组的信息。详细如下所示:

1) 在[oneproxy]标签下面增加:passwordseparate = true和readslave=true。增加后的配置如下所示:

[oneproxy]
logfile = oneproxy_log.log
pidfile = oneproxy_pid.pid
listen_addr = 0.0.0.0
listen_port = 9999,7777,6666
httpserver_addr = 0.0.0.0
httpserver_port = 8080
log_level = error
data_dump = false
log_sql = false
clientusername = admin
clientpassword = 0000
passwordseparate = true
readSlave = true

需要注意的是:

1)如果不配置,默认情况下这两个选项也是为true。

2)如果readSlave为true,则必须配置passwordseparate为true。

如果不想使用密码分离功能,则同样也不能使用读写分离功能。

2) 在数据库配置组标签[sqlserver_9999]下面增加主数据库和从数据库的信息,比如:

[database_1433]
host = 127.0.0.1
port = 1433
username = sa
password = 0000

[database_1434]
host = 127.0.0.1
port = 1434
username = sa
password = 0000

[sqlserver_9999]
dbmastergroup = database_1433
dbslavegroup = database_1434
classname = SSProtocol
frontport = 0

需要注意点:

1)数据库的信息必须放置在[database_xxx]标签下面。这个标签必须以database开头。

2)数据库组信息放到其他名称的标签(不能是[oneproxy]和[database_xxx]的标签)下,如上配置中的[sqlserver_9999]标签。

3)主数据库配置在dbmastergroup上,从数据库配置在dbslavegroup上。

4)允许不存在从数据库,如果没有从数据库,则读写分离的功能被禁止。

完成上面的配置后,直接启动程序即可。

二. 读写分离效果

1)事务中的操作全部在主数据库执行

2)非事务中的select语句在从数据库执行(不管是statement下的还是preparedstatement下的)

三. 读写分离的故事

在开发读写分离的过程中,遇到很多问题。比如:

1) 当在同一个session中,从不同数据库得到的spid可能不同,则需要根据发送到不同的数据库重写spid。

2) 怎么透明的处理游标和prepared句柄。

3) 在事务中怎么处理非事务中创建的statement或者preparedstatement.

4) 怎么处理在事务中创建的statement和preparedstatement在非事务中使用的问题。

5)怎么处理包中的事务描述符等数据。

在开发的过程中,遇到由于没有重写事务描述符,导致一直提示不能新开始一个事务的异常。针对这个问题,我研究了很长时间,同时直连和读写分离的包数据的比较查找数据包的差异点,以及读MSDN文档等众多艰苦的过程。终于明白了处理方法。

四,关注方式

1)数据库监控 521095285

2)平民软件官网

3)oneproxy-monitor项目

 

 

© 著作权归作者所有

harris2016
粉丝 10
博文 54
码字总数 30661
作品 0
杭州
程序员
私信 提问
oneproxy-monitor 支持读写分离功能

oneproxy-for-sqlserver是在oneproxy-monitor框架下面开发的sql server中间件项目。 目前sql server中间件oneproxy-for-sqlserver在前面支持的前后端密码分离的基础上面完成了读写分离的支持...

harris2016
2016/11/08
1K
4
JDBC技术预研选型依据【转】

http://songwie.com/articlelist/44 mycat分布式mysql中间件(mysql中间件研究) 发表回复 mysql中间件研究( Atlas,cobar,TDDL,mycat,heisenberg,Oceanus,vitess,OneProxy ) mysql-prox......

强子哥哥
2016/03/08
170
0
架构设计:系统存储(12)——MySQL主从方案业务连接透明化(中)

接上文《架构设计:系统存储(11)——MySQL主从方案业务连接透明化(上)》 4、改进方式三:MyCat数据库中间件 在上文中我们介绍了MySQL读写分离集群的持续优化方式。按照这样的方式,集群中...

yinwenjie
2016/11/10
0
0
amoeba数据库中间件透明实现MYSQL读写分离

Amoeba(变形虫)项目,该开源框架于2008年 开始发布一款 Amoeba for Mysql软件。这个软件致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的 时候充当SQL路由功能,专注于分布式...

我想去看一看大海
2016/07/03
94
0
独家揭秘:SQL Server AlwaysOn在阿里云的突破

作者介绍 王方铭,阿里巴巴技术专家,从DBA到产品研发,伴随阿里云数据库产品成长至今,对数据库技术、后端技术平台建设有深刻的理解,目前主要负责RDS SQLServer产品研发工作。 早在2015年的...

王方铭
2018/10/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Android Camera原理之camera service与camera provider session会话与capture request轮转

上层调用CameraManager.openCamera的时候,会触发底层的一系列反应,之前我们分享过camera framework到camera service之间的调用,但是光看这一块还不够深入,接下来我们讨论一下camera serv...

天王盖地虎626
17分钟前
0
0
科技赋能成效显著!金融壹账通两大赋能项目荣获IDC大奖

7月19日,2019IDC中国未来金融论坛曁颁奖典礼于北京举办。由金融壹账通赋能的长春农商银行多人视频面审智能风控系统、包头农商银行互联网银行SaaS服务两大项目因在项目的创新性、技术领先性、...

IFTNews
昨天
1
0
HTTP协议

HTTP简介 HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。 HTTP是一个基于TCP/IP通信协议来传递数据...

Eappo_Geng
昨天
1
0
聊聊spring cloud consul的TtlScheduler

序 本文主要研究一下spring cloud consul的TtlScheduler TtlScheduler spring-cloud-consul-discovery-2.1.2.RELEASE-sources.jar!/org/springframework/cloud/consul/discovery/TtlSchedule......

go4it
昨天
1
0
内存狂挤牙膏Intel跪了!10nm玩出6种花样

不同于CPU处理器等逻辑芯片的制造工艺都精确到具体数值,闪存、内存工艺一直都是很模糊的叫法,比如10nm-class(10nm级别),只是介于20nm和10nm之间,然后又分为1xnm、1ynm、1znm等不同版本,...

linuxCool
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部