ShardingSphere-Proxy基本使用

本文详细介绍了ShardingSphere-Proxy的安装过程,包括二进制包和Docker方式,以及如何在SpringBoot项目中集成并实现读写分离和负载均衡。通过步骤和配置示例,展示了如何配置数据源和启用SQL日志。
摘要由CSDN通过智能技术生成

一、ShardingSphere-Proxy安装

1.概念及使用结构

概念: ShardingSphere-Proxy 定位为透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持。 目前提供 MySQL 和 PostgreSQL 协议,透明化数据库操作,对 DBA 更加友好。
在这里插入图片描述

2.二进制包安装

二进制包既可以Linux系统运行,又可以在windows系统运行

step1:解压二进制包

apache-shardingsphere-5.1.1-shardingsphere-proxy-bin.tar.gz

windows:使用解压软件解压文件

Linux:将文件上传至/opt目录,并解压

tar -zxvf apache-shardingsphere-5.1.1-shardingsphere-proxy-bin.tar.gz

step2:MySQL驱动

mysql-connector-java-8.0.22.jar

将MySQl驱动放至解压目录中的ext-lib目录

spte3:修改配置conf/server.yaml

rules:
  - !AUTHORITY
    users:
      - root@%:root
    provider:
      type: ALL_PRIVILEGES_PERMITTED

props:
  sql-show: true

配置详解:
-!AUTHORITY
users:
-root@%:root:连接proxy时开启权限认证,用户名密码为root/root

spte4:启动ShardingSphere-Proxy

Linux 操作系统请运行 bin/start.sh

Windows 操作系统请运行 bin/start.bat

指定端口号和配置文件目录:bin/start.bat ${proxy_port} ${proxy_conf_directory}

step5:远程连接ShardingSphere-Proxy

远程访问

mysql -h192.168.80.93 -P3307 -uroot -p

step6:访问测试

show databases;

在这里插入图片描述

3.docker安装

step1:启动Docker容器

docker run -d \
-v /app/server/proxy-a/conf:/opt/shardingsphere-proxy/conf \
-v /app/server/proxy-a/ext-lib:/opt/shardingsphere-proxy/ext-lib \
-e ES_JAVA_OPTS="-Xmx256m -Xms256m -Xmn128m" \
-p 3307:3307 \
--name server-proxy-a \
apache/shardingsphere-proxy:5.1.1

step2:上传MySQL驱动

将MySQl驱动上传至/app/server/proxy-a/ext-lib目录

spte3:修改配置server.yaml

rules:
  - !AUTHORITY
    users:
      - root@%:root
    provider:
      type: ALL_PRIVILEGES_PERMITTED

props:
  sql-show: true

将配置文件上传至/app/server/proxy-a/conf目录

spte4:重启容器

docker restart server-proxy-a

step5:远程连接ShardingSphere-Proxy

ShardingSphere-Proxy容器中默认情况下没有mysql命令行客户端的安装,因此需要远程访问

mysql -h192.168.80.130 -P3307 -uroot -p

step6:访问测试

show databases;

在这里插入图片描述
常见问题:docker容器无法远程连接

容器可以成功的创建并启动,但是无法远程连接。排除防火墙和网络等问题后,看看是不是因为容器内存不足导致。

原因:容器可分配内存不足

查看办法:进入容器后查看ShardingSphere-Proxy的日志,如有有cannot allocate memory,则说明容器内存不足

docker exec -it server-proxy-a env LANG=C.UTF-8 /bin/bash
cd /opt/shardingsphere-proxy/logs
tail stdout.log 

二、ShardingSphere-Proxy使用

1.创建项目

项目类型:Spring Initializr

SpringBoot脚手架:http://start.aliyun.com

项目名:sharding-proxy-demo

SpringBoot版本:2.3.7.RELEASE

2.添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.shardingsphere</groupId>
        <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
        <version>5.1.1</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>

    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.1</version>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

3.java代码

@TableName("t_user")
@Data
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String uname;
}

@Mapper
public interface UserMapper extends BaseMapper<User> {
}

4.配置

application.properties:

# 应用名称
spring.application.name=sharging-proxy-demo
# 开发环境设置
spring.profiles.active=dev
# 内存模式
spring.shardingsphere.mode.type=Memory

# 配置真实数据源
spring.shardingsphere.datasource.names=master,slave1,slave2

# 配置第 1 个数据源
spring.shardingsphere.datasource.master.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.master.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.master.jdbc-url=jdbc:mysql://192.168.80.1:3306/db_user
spring.shardingsphere.datasource.master.username=root
spring.shardingsphere.datasource.master.password=123456

# 配置第 2 个数据源
spring.shardingsphere.datasource.slave1.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.slave1.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.slave1.jdbc-url=jdbc:mysql://192.168.80.2:3306/db_user
spring.shardingsphere.datasource.slave1.username=root
spring.shardingsphere.datasource.slave1.password=123456

# 配置第 3 个数据源
spring.shardingsphere.datasource.slave2.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.slave2.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.slave2.jdbc-url=jdbc:mysql://192.168.80.3:3306/db_user
spring.shardingsphere.datasource.slave2.username=root
spring.shardingsphere.datasource.slave2.password=123456

# 读写分离类型,如: Static,Dynamic
spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.type=Static
# 写数据源名称
spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.props.write-data-source-name=master
# 读数据源名称,多个从数据源用逗号分隔
spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.props.read-data-source-names=slave1,slave2

# 负载均衡算法名称
spring.shardingsphere.rules.readwrite-splitting.data-sources.myds.load-balancer-name=alg_round

# 负载均衡算法配置
# 负载均衡算法类型
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_round.type=ROUND_ROBIN
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_random.type=RANDOM
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_weight.type=WEIGHT
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_weight.props.slave1=1
spring.shardingsphere.rules.readwrite-splitting.load-balancers.alg_weight.props.slave2=2

# 打印SQl
spring.shardingsphere.props.sql-show=true

5.测试

@SpringBootTest
class ReadwriteTest {

    @Autowired
    private UserMapper userMapper;

    /**
     * 写入数据的测试
     */
    @Test
    public void testInsert(){

        User user = new User();
        user.setUname("张三丰");
        userMapper.insert(user);
    }


	/**
	     * 读数据测试
	     */
	@Test
	public void testSelectAll(){
	    List<User> users = userMapper.selectList(null);
	    List<User> users = userMapper.selectList(null);//执行第二次测试负载均衡
	    users.forEach(System.out::println);
	}
}
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我很高兴为您介绍Shardingsphere-ProxyShardingsphere-Proxy是为数据库读写分离和数据库多集群而设计的代理中间件,它可以帮助您更轻松地实现数据库分片,提高数据库性能和可用性。 我了解Shardingsphere-Proxy,它是一个用于提供高性能和高可用性的分布式数据库中间件。ShardingSphere ProxyShardingSphere的一个子项目,它是一个基于MySQL协议实现的数据库代理,可以实现对数据库的读写分离、分片等功能。ShardingSphere Proxy支持MySQL、PostgreSQL、Oracle和SQLServer等多种数据库,并且可以和Spring、MyBatis等常见的Java框架无缝集成。使用ShardingSphere Proxy可以提升数据库的性能和可扩展性,同时也可以减少业务代码的复杂度。 ### 回答2: ShardingSphere-ProxyShardingSphere的子项目之一,它是一个轻量级、易扩展的数据库中间件,可以将多个数据库组织成逻辑上的一个单一数据库ShardingSphere-Proxy的主要作用是在数据库集群上提供统一的访问点,并提供一些通用的功能,例如路由、负载均衡、语句解析、分片故障转移等。 ShardingSphere-Proxy主要的特点是高可用性、高性能、易扩展,它支持多种数据源类型,例如MySQL、Oracle、SQLServer等,可以进行水平扩展,以满足更高的并发处理能力要求。此外,ShardingSphere-Proxy还支持对SQL语句进行解析,并在其中动态注入表路由条件、分表算法、分库算法等,从而实现分布式数据库的规划和管理。 ShardingSphere-Proxy还支持读写分离、分片事务等高级特性,用户可以通过读写分离实现读写分离,并通过分片事务维护分布式事务的一致性。ShardingSphere-Proxy还支持对SQL语句进行监控和统计,可以对数据库进行一些性能调优和问题定位。 总之,ShardingSphere-Proxy是一个非常实用的数据库中间件,它可以帮助用户快速搭建分布式数据库,并提供了一些高级特性和管理功能,可以极大地简化分布式数据库的开发和维护工作。同时,ShardingSphere-Proxy还在不断地完善和优化中,未来有望成为分布式数据库领域的佼佼者。 ### 回答3: ShardingSphere Proxy是一种数据中间层的解决方案,可以帮助应用程序实现高性能、高可用和分布式数据库的访问和管理。它提供了一个统一的入口,用于处理对多个数据库的请求,并使应用程序可以无感知地访问多个不同类型的数据库,包括MySQL、Oracle、SQL Server和PostgreSQL等。ShardingSphere Proxy的核心功能包括: 1. 数据分片:可以将业务数据分散到多个数据库实例中,以便对大型数据进行水平划分和分散负载。 2. 读/写分离:以提高负载处理能力和性能为目的,将读操作负载均衡到多个从数据库实例中,而写操作则集中在主数据库实例上。 3. 透明的数据访问:ShardingSphere Proxy提供了一种透明的数据访问方式,应用程序可以采用常规方式访问多个底层数据库,而不必担心如何管理和协调数据库的访问。 4. 数据库路由:根据预定义的路由规则,将请求路由到相应的数据库实例上,并执行相应的操作。 5. 动态配置和管理:ShardingSphere Proxy提供了一组API和控制台,可让管理员动态地管理和配置它所监管的数据库实例。 总之,ShardingSphere Proxy是一个解决分布式数据库访问和管理的强大工具,它帮助企业提高了性能,可扩展性和可用性,同时还降低了复杂性和成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值