基于nginx的TCP Proxy实现数据库读写分离

nginx非常早就支持tcp proxy。可是一直不知道其使用,近期在nginx blog上看见了。一些实践者将其运用到数据库訪问的负载均衡以及实现读写分离,来提高数据库的吞吐量,这里我不会讲详细的搭建实现。仅仅是最一些理论上的设计猜想。

直接上图

db集群。分为读db和写db。写db向读db同步数据。

读db仅仅能读,写db仅仅能写。图中读写各一个,仅仅是一个样例,实际须要依据业务来配置读写server比例。

nginx tcp proxy实现读写分离。提供仅仅读的port和仅仅写的port。

db connection pool维护两个数据库连接池,一个读一个写,可是对于使用db connection pool的service来说。他们能够直接读写。

db connection pool须要实现读写操作分离。

这个系统的一些瓶颈:

db connection pool须要维护的tcp 连接过多。

db connection pool与nginx tcp proxy的连接限制。

数据同步不及时。导致数据一致,比方我一写就读,还没同步。

时间: 2024-10-05 03:26:20

基于nginx的TCP Proxy实现数据库读写分离的相关文章

MariaDB数据库读写分离实现(二):amoeba的使用

本文接上一篇博客:MariaDB数据库读写分离实现(一):mysql-proxy的使用 http://sohudrgon.blog.51cto.com/3088108/1608605 我们将mysql-proxy停止,在节点node5上安装amoeba,测试实现数据库的读写分离. 一.amoeba的简介     Amoeba for MySQL致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当query 路由功能,专注分布式数据库 proxy 开发.座落于Clien

基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上)

基于Mysql-Proxy实现Mysql的主从复制以及读写分离(上) 上周BOSS给分配任务让实现一下Mysql数据库的主从复制以及读写分离,然后花了一盏茶的功夫进行了调研,发现主从复制数据库进行一番配置直接可以实现,而读写分离则需要一些软件的支持,基本上读写分离的实现有两种: Amoeba(变形虫):是由前阿里员工实现的一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy.但是由于没人维护了,而且据说作者也不再回答开发者的问题,所以不予考虑. Mysql-Proxy:是一

MySQL Proxy 实现MySQLDB 读写分离

一.简述 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载平衡,故障.查询分析,查询过滤和修改等等. MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负 载平衡.对于应用来说,MySQL Proxy是完全透明的,应用

基于Mysql-Proxy实现Mysql的主从复制以及读写分离(下)

基于Mysql-Proxy实现Mysql的主从复制以及读写分离(下) 昨天谈到了Mysql实现主从复制,但由于时间原因并未讲有关读写分离的实现,之所以有读写分离,是为了使数据库拥有双机热备功能,至于双机热备,特指基于高可用系统中的两台服务器的热备(或高可用),因两机高可用在国内使用较多,故得名双机热备,双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式),主-备方式即指的是一台服务器处于某种业务的激活状态(即Active状

利用amoeba(变形虫)实现mysql数据库读写分离

关于mysql的读写分离架构有很多,百度的话几乎都是用mysql_proxy实现的.由于proxy是基于lua脚本语言实现的,所以网上不少网友表示proxy效率不高,也不稳定,不建议在生产环境使用:amoeba是阿里开发的一款数据库读写分离的项目(读写分离只是它的一个小功能),由于是基于java编写的,所以运行环境需要安装jdk: 前期准备工作:1.两个数据库,一主一从,主从同步:master: 172.22.10.237:3306 :主库负责写入操作:slave: 10.4.66.58:330

spring+mybatis利用interceptor(plugin)兑现数据库读写分离

使用spring的动态路由实现数据库负载均衡 系统中存在的多台服务器是“地位相当”的,不过,同一时间他们都处于活动(Active)状态,处于负载均衡等因素考虑,数据访问请求需要在这几台数据库服务器之间进行合理分配, 这个时候,通过统一的一个DataSource来屏蔽这种请求分配的需求,从而屏蔽数据访问类与具体DataSource的耦合: 系统中存在的多台数据库服务器现在地位可能相当也可能不相当,但数据访问类在系统启动时间无法明确到底应该使用哪一个数据源进行数据访问,而必须在系统运行期间通过某种条

Spring + Mybatis项目实现数据库读写分离

主要思路:通过实现AbstractRoutingDataSource类来动态管理数据源,利用面向切面思维,每一次进入service方法前,选择数据源. 1.首先pom.xml中添加aspect依赖 <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.8.9</version> </depen

mysql数据库读写分离

1.检查程序依赖lua语言环境 [[email protected] ~]# rpm -qa |grep lua lua-5.1.4-4.1.el6.x86_64 2.安装proxy软件包 [[email protected] ~]# tar -zxvf mysql-proxy-0.8.3-linux-rhel5-x86-64bit.tar.gz   //解压软件 [[email protected] ~]# mv mysql-proxy-0.8.3-linux-rhel5-x86-64bit 

Spring+MyBatis实现数据库读写分离方案

方案1通过MyBatis配置文件创建读写分离两个DataSource,每个SqlSessionFactoryBean对象的mapperLocations属性制定两个读写数据源的配置文件.将所有读的操作配置在读文件中,所有写的操作配置在写文件中. 优点:实现简单缺点:维护麻烦,需要对原有的xml文件进行重新修改,不支持多读,不易扩展实现方式 <bean id="abstractDataSource" abstract="true" class="com