当前位置: 首页 > news >正文

使用shardingsphere-proxy读写分离

本文介绍使用apache shardingsphere-proxy对mysql数据库做读写分离的配置过程。shardingsphere-proxy是一个中间件产品,可以模拟一个mysql服务,我们通过连接这个模拟的mysql服务,操作实际的mysql数据。

在配置shardingsphere-proxy前,你需要先配置好mysql主从复制。可以参考我之前的文章:
Ubuntu下mysql主从复制搭建。

0、环境

  • shardingsphere proxy: 5.4.0
  • mysql: 8.4
  • mysql connector/j: 8.0.11

1、说明

  • ${shardingsphere.home}: shardingsphere-proxy保存的目录,下文说到shardingsphere-proxy 目录时,用这个变量代替。

2、shardingsphere-proxy配置

2.1、mysql驱动

复制mysql驱动到${shardingsphere.home}/lib。注意版本,过高版本的mysql jdbc驱动是不起作用的。

2.2、配置连接shardingsphere-proxy的用户

${shardingsphere.home}/conf/server.yaml,找到authority段,都注释掉了,放开注释,并修改。下面是我修改的实例:

authority:
 users:
   - user: root
     password: 123456
  #  - user: sharding
  #    password: sharding
 privilege:
   type: ALL_PERMITTED

这样修改后,就可以通过root/123456连接shardingsphere-proxy了。

2.3、配置config-readwrite-splitting.yaml

见名知意,这个文件就是用来配置读写分离的。位于${shardingsphere.home}/conf下。找到mysql的配置,按照我们的规划(一主一从,已经通过虚拟机配置完成)修改。

databaseName: readwrite_splitting_db

dataSources:
 write_ds:
   url: jdbc:mysql://192.168.99.100:3306/db2?serverTimezone=UTC&useSSL=false
   username: root
   password: 123456
   connectionTimeoutMilliseconds: 30000
   idleTimeoutMilliseconds: 60000
   maxLifetimeMilliseconds: 1800000
   maxPoolSize: 50
   minPoolSize: 1
 read_ds_0:
   url: jdbc:mysql://192.168.99.120:3306/db2?serverTimezone=UTC&useSSL=false
   username: root
   password: 123456
   connectionTimeoutMilliseconds: 30000
   idleTimeoutMilliseconds: 60000
   maxLifetimeMilliseconds: 1800000
   maxPoolSize: 50
   minPoolSize: 1

rules:
- !READWRITE_SPLITTING
 dataSources:
   readwrite_ds:
     writeDataSourceName: write_ds
     readDataSourceNames:
       - read_ds_0
      #  - read_ds_1
     loadBalancerName: random
 loadBalancers:
   random:
     type: RANDOM

到这里,shardingsphere-proxy就配置完成了,默认端口是3307,咱们启动一下试试。进入bin目录,有win和linux的启动脚本。我用 ./start.sh启动。

在这里插入图片描述
根据提示,可以在stdout.log文件查看shardingsphere-proxy的运行情况。我们可以通过第三方工具连接它,并执行sql,当然你用jdbc操作也可。

3、sql操作

连接上shardingsphere-proxy后,我们能看到他有一个数据库,就是上面配置文件中配置的名称,但是没有表。
在这里插入图片描述
咱们打开sql编辑器,先创建一张表。

CREATE TABLE `t_user2` (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

创建完成后,刷新实际的mysql,发现他们都有了t_user2这张表。大家可以再加几条数据看看。

INSERT into t_user2(name) values('张三');
INSERT into t_user2(name) values('李四');
select * from t_user2;

下面是执行sql是我从控制台截的图,能够明显看到达到了我们预期的效果。

在这里插入图片描述
注意:要看到控制台输出sql的效果,需要配置sql-show: true,在server.yaml文件中。
//~~

相关文章:

  • Java网络编程封装
  • 如果二者隔离级别不一致,以哪个为主。例如@Transactional 隔离级别是RC,mysql是RR
  • MySQL安装
  • Docker 与 CI/CD:自动化构建和部署
  • MySQL数据库——索引结构之B+树
  • flowable 全生命周期涉及到的api及mysql表
  • nextjs项目搭建——头部导航
  • 【数论】—— 快速幂与扩展欧拉定理
  • 【Web开发】PythonAnyWhere免费部署Django项目
  • 第六次作业
  • python类型转换深浅拷贝
  • 了解Pipx:一个轻量但强大的Python工具
  • 如何在 SpringBoot 项目创建并使用 Redis 的详细介绍
  • 【漫话机器学习系列】103.学习曲线(Learning Curve)
  • 蓝桥杯之阶段考核
  • 跟李沐学AI:InstructGPT论文精读(SFT、RLHF)
  • 《Mycat核心技术》第17章:实现MySQL的读写分离
  • 网络安全入门 | TCP/IP协议栈核心协议详解(附攻防案例)
  • 基于AT89C51单片机的教室智能照明控制系统
  • 软件工程和系统分析与设计
  • 那里有学做网站的/站长之家关键词挖掘
  • 重庆官方网站建设/百度网盘在线观看资源
  • 常州模板网站建设企业/免费个人网站建站
  • 重庆市官网首页/杭州最好的seo公司
  • php网站后台开发/百度平台app下载
  • 建设通app免费版/搜索引擎优化seo怎么做