Sharding-Proxy——分库分表+读写分离

一、简介

sharding-proxy定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。 目前先提供MySQL/PostgreSQL版本,它可以使用任何兼容MySQL/PostgreSQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作数据,对DBA更加友好。

  • 向应用程序完全透明,可直接当做MySQL/PostgreSQL使用。
  • 适用于任何兼容MySQL/PostgreSQL协议的的客户端。
    在这里插入图片描述
Sharding-JDBCSharding-Proxy
数据库任意MySQL
连接消耗数
异构语言JAVA任意
性能损耗低损耗略高
无中心化高是
静态入口

——摘自官方文档

二、实现分库分表和读写分离

(一)准备工作

服务器名称数据库角色
192.168.30.130server1ordersorders独立
192.168.30.131server2ordersorders,user独立
192.168.30.132server3testt_user
192.168.30.133server4testt_user从(只读)

目标:

  • user表全部存储到server2的orders数据库。
  • orders表根据customer_id进行判断,偶数存放在server1中,奇数存放在server2中
  • t_user表存储到主从server3和server4的test数据库中,其中server3的test为主库,server4的test为从库(只读),实现读写分离。

(二)安装配置

官方网站下载sharding-jdbc的二进制安装包,本例使用4.1.1版本。

在/opt目录解压。
修改conf文件夹下面的配置文件:
server.yaml:

 authentication:
   users:
     root:
       password: 123456
     sharding:
       password: sharding
       authorizedSchemas: sharding_db

config-sharding.yaml:

######################################################################################################
#
# If you want to connect to MySQL, you should manually copy MySQL driver to lib directory.
#
######################################################################################################
schemaName: sharding_db
#
dataSources:
# server1
  ds_0:
    url: jdbc:mysql://192.168.30.130:3306/orders?serverTimezone=GMT%2B8&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
  #server2
  ds_1:
    url: jdbc:mysql://192.168.30.131:3306/orders?serverTimezone=GMT%2B8&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
 # server3 主
  ds_m_0:
    url: jdbc:mysql://192.168.30.132:3306/test?serverTimezone=GMT%2B8&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
  # server4 从
  ds_s_0:
    url: jdbc:mysql://192.168.30.133:3306/test?serverTimezone=GMT%2B8&useSSL=false
    username: root
    password: root
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50

shardingRule:
  tables:
  # orders表,根据customer_id判断分表的策略
    orders:
      actualDataNodes: ds_${0..1}.orders
      databaseStrategy:
        inline:
          shardingColumn: customer_id
          algorithmExpression: ds_${customer_id % 2}
# user表,存放在ds_1即server2的user表中
    user:
      actualDataNodes: ds_$->{1}.user
 # t_user,使用读写分离进行读和写操作,规则命名为m_s_0(见下面读写分离规则配置)
    t_user:
      actualDataNodes: m_s_$->{0}.t_user
#读写分离规则
  masterSlaveRules:
    m_s_0:
      masterDataSourceName: ds_m_0
      slaveDataSourceNames: [ds_s_0]
  • 按照提示,需要将mysql驱动放到lib目录下,本人放置了mysql-connector-java-5.1.47.jar,但是还是无法在shell窗口访问sharding-proxy,使用图形化客户端工具可以访问。。。待查

在bin目录下,启动sharding-proxy:

[root@server3 bin]# ./start.sh 
Starting the Sharding-Proxy ...
The classpath is .:..:/opt/sharding-proxy-4.1.1/lib/*:/opt/sharding-proxy-4.1.1/lib/*:/opt/sharding-proxy-4.1.1/ext-lib/*
Please check the STDOUT file: /opt/sharding-proxy-4.1.1/logs/stdout.log
[root@server3 bin]# pwd
/opt/sharding-proxy-4.1.1/bin

默认端口为3307

(三)验证

使用客户端访问:
在这里插入图片描述

1. 分库
insert  into user (id, name) values (1,'a');
insert  into user (id, name) values (2,'b');

全部存储在server2的orders库的user表中。

2. 分表
insert into orders (id, order_type,customer_id,amount) values (1,100,100,1000);
insert into orders (id, order_type,customer_id,amount) values (2,101,101,2000);
insert into orders (id, order_type,customer_id,amount) values (3,100,102,3000);
insert into orders (id, order_type,customer_id,amount) values (4,101,103,4000);

customer_id为100和102的存储到server1中,customer_id为101和103的存储到server2中

3. 读写分离
insert into t_user (uid,uname) values (1,@@hostname);

server3中的数据为1-server3;server4中的数据为1-server4,写操作通过server3实现(server4只读模式);
查询:

select * from t_user;

获取到server4中的数据,读操作通过server4实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Sharding-Proxy 是一个开源的分库中间件,它可以帮助应用程序实现无感知的分库操作。下面是一个简单的步骤来利用 Sharding-Proxy 进行分库: 1. 安装和配置 Sharding-Proxy:首先,你需要下载 Sharding-Proxy 的安装包,并解压到你的服务器上。然后,根据你的需求修改配置文件,配置数据源和分片规则等信息。 2. 创建数据库和:在进行分库之前,你需要创建相应的数据库和结构。你可以选择手动创建,或者使用 Sharding-Proxy 提供的自动建功能。 3. 配置分片规则:在 Sharding-Proxy 的配置文件中,你需要定义分片规则,指定如何将数据分散到不同的数据库和中。可以使用基于范围、哈希、精确等多种分片算法。 4. 连接到 Sharding-Proxy:在应用程序中,需要修改数据库连接信息,将原来连接数据库的地址改为连接 Sharding-Proxy 的地址。这样应用程序就可以通过 Sharding-Proxy 访问分片后的数据。 5. 进行分库操作:现在你可以在应用程序中执行正常的数据库操作,而无需关心具体的分库细节。Sharding-Proxy 会根据配置的规则自动将数据路由到正确的库和中。 需要注意的是,使用 Sharding-Proxy 进行分库操作需要仔细考虑数据一致性、事务处理、跨库查询等问题。在配置和使用过程中,建议参考官方文档和示例来确保正确性和性能。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值