sql server 中间件支持读写分离

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

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

一. 使用方法

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

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

[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。sqlserver

2)若是readSlave为true,则必须配置passwordseparate为true。spa

若是不想使用密码分离功能,则一样也不能使用读写分离功能。.net

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

[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

须要注意点:server

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项目

相关文章
相关标签/搜索