• ShardingSphere-Proxy基本使用


    一、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
    
    • 1

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    配置详解:
    -!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
    
    • 1

    step6:访问测试

    show databases;
    
    • 1

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    spte4:重启容器

    docker restart server-proxy-a
    
    • 1

    step5:远程连接ShardingSphere-Proxy

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

    mysql -h192.168.80.130 -P3307 -uroot -p
    
    • 1

    step6:访问测试

    show databases;
    
    • 1

    在这里插入图片描述
    常见问题: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 
    
    • 1
    • 2
    • 3

    二、ShardingSphere-Proxy使用

    1.创建项目

    项目类型:Spring Initializr

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

    项目名:sharding-proxy-demo

    SpringBoot版本:2.3.7.RELEASE

    2.添加依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
    
        <dependency>
            <groupId>org.apache.shardingspheregroupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starterartifactId>
            <version>5.1.1version>
        dependency>
    
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <scope>runtimescope>
        dependency>
    
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-boot-starterartifactId>
            <version>3.3.1version>
        dependency>
    
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <optional>trueoptional>
        dependency>
        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintagegroupId>
                    <artifactId>junit-vintage-engineartifactId>
                exclusion>
            exclusions>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    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> {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51

    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);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    单链表的递归详解 (leetcode习题+ C++实现)
    idea快捷键 | 代码整体左移或右移(PyCharm)
    react context原理
    [附源码]计算机毕业设计JAVA星期八酒店管理系统
    C#进阶09——值类型和引用类型2
    (附源码)springboot公益慈善管理系统 毕业设计 281454
    uni-app开发常用操作速查记录
    javaweb论坛网站源码
    浅谈逻辑选择器 -- 父选择器它来了!
    Git操作
  • 原文地址:https://blog.csdn.net/qq_45003354/article/details/138155242