栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

docker

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker

docker_compose搭建shardingSphereProxyMysql主从读写分离
版本负责人备注说明
v1.0Kevin.xu

密级: 公开

文档说明

基于docker-compose快速搭建shardingSphereProxyMysql主从读写分离。

场景说明

mysql 数据量级增大后,需要对mysql 进行主从复制。降低单服务器IO负载。但由于业务逻辑已经很多,从API层面去实现,需要进行代码重构,为了简化,使用sharding-sphere-proxy 进行主从读写分离的代理。此处暂时未进行分库分表操作。但shardingsphere 可支持分库分表操作.

环境准备
  1. Centos8

  2. Docker version 19.03.13, build 4484c46d9d

  3. docker-compose: 1.29.2

  4. docker-compose 搭建mysql主从 完成

mysql主从复制参考

配置方法 目录结构

[root@ibeeServer shardingSphere]# tree
.
├── docker-compose.yml
└── sharding_proxy
├── Dockerfile
└── mysql-connector-java-8.0.27.jar

2 directories, 3 files

配置说明

docker-compose.yml

version: '3'
services:
  sharding_proxy:
    environment:
      TZ: "Asia/Shanghai" 						#设置时区
    build:
      context: ./sharding_proxy/				#构建目录
    container_name: sharding_proxy				#容器名称
    ports:
      - "6306:3307"								#对外端口映射
    networks:
      - shardingSphere
    volumes:
      - "/data/dockerData/config/shardingProxyConfig/conf:/opt/shardingsphere-proxy/conf"   #Shardingsphere config文件挂载
      - "/data/dockerData/shardingProxy/logs:/opt/shardingsphere-proxy/logs"				#Sharding日志文件
    restart: always
networks:
  shardingSphere:
    driver: bridge
ShardingProxy 配置及说明 目录结构

[root@ibeeServer sharding_proxy]# tree
.
├── Dockerfile
└── mysql-connector-java-8.0.27.jar

0 directories, 2 files

mysql-connector-java-8.0.27.jar 来源及说明

下载MySQL驱动依赖
5版本:
https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar
8版本:
https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.27/mysql-connector-java-8.0.27.jar
其他版本:
https://repo1.maven.org/maven2/mysql/mysql-connector-java/

具体下哪个版本呢?

在mysql 连接完后使用select version() 来确认mysql 的版本,后找对应的mysql-connector 驱动

Dockerfile 说明
FROM apache/sharding-proxy:latest										#使用最新版本的镜像
COPY mysql-connector-java-8.0.27.jar /opt/shardingsphere-proxy/ext-lib/ #拷贝mysql连接依赖包(sharding 使用JDBC 的连接驱动)
CMD ["start.sh"]														#启动服务
config文件说明

读写分离只使用server.yaml config-readwrite-splitting.yaml 两个配置文件。

[root@ibeeServer conf]# tree
.
├── config-database-discovery.yaml			#动态数据库接入配置
├── config-encrypt.yaml						#加密及连接授权配置
├── config-readwrite-splitting.yaml			#读写分离配置
├── config-shadow.yaml						#影子库配置
├── config-sharding.yaml					#表分片配置
├── logback.xml								#日志相关配置(路径)
└── server.yaml								#Sharding-Proxy的一些基础配置,比如:账号、密码、注册中心等。

0 directories, 7 files
server.yaml 说明

​ server 主要配置外部连接shardingProxy的用户名和密码

rules:
  - !AUTHORITY
    users:
     # 用于登录计算节点的用户名,授权主机和密码的组合。格式:@:,hostname 为 % 或空字符串表示不限制授权主机
      - root@%:qwer1234
      - test@:123456
    provider:
     # 存储节点数据授权的权限提供者类型
      type: NATIVE   
	#NATIVE	基于后端数据库(主表)存取 server.yaml 中配置的权限信息。如果用户不存在,则自动创建用户并默认赋予最高权限。(启动时会连接数据库节点)
	#ALL_PRIVILEGES_PERMITTED	默认授予所有权限(不鉴权),不会与实际数据库交互。
	#SCHEMA_PRIVILEGES_PERMITTED	通过属性 user-schema-mappings 配置的权限。
props:
  max-connections-size-per-query: 1
  executor-size: 16  # Infinite by default.
  proxy-frontend-flush-threshold: 128  # The default value is 128.
    # LOCAL: Proxy will run with LOCAL transaction.
    # XA: Proxy will run with XA transaction.
    # base: Proxy will run with B.A.S.E transaction.
  proxy-transaction-type: LOCAL
  xa-transaction-manager-type: Atomikos #数据库XA实现算法
  proxy-opentracing-enabled: false
  proxy-hint-enabled: false
  sql-show: false
  check-table-metadata-enabled: false
  lock-wait-timeout-milliseconds: 50000 # The maximum time to wait for a lock 
config-readwrite-splitting.yaml 说明

​ config-readwrite-splitting.yaml 配置逻辑数据库与真实数据库的读写分离关联关系

schemaName: test_db

dataSources:
  write_ds:
  	#配置写库(Master)的地址
    url: jdbc:mysql://192.168.147.133:4306/test_db?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
    username: root  	#数据库连接密码,如果使用 NATIVE 需要使用访问数据库的root 及密码。此处需要查询mysql.user 表
    password: qwer1234
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50 	#连接池最大值
    minPoolSize: 1  	#连接池最小值
    maintenanceIntervalMilliseconds: 30000
  read_ds_0:
  	#配置写库(Salver)的地址
    url: jdbc:mysql://192.168.147.133:5306/test_db?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true
    username: root		#数据库连接密码,如果使用 NATIVE 需要使用访问数据库的root 及密码。此处需要查询mysql.user 表
    password: qwer1234
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50		#连接池最大值
    minPoolSize: 1		#连接池最小值
    maintenanceIntervalMilliseconds: 30000

rules:  #规则配置
- !READWRITE_SPLITTING
  dataSources:
    pr_ds:
      writeDataSourceName: write_ds
      readDataSourceNames:
        - read_ds_0
验证测试:

使用mysql 命令进行连接主库与从库。

Proxy连接参数为:

host:xxx.xxx.x.x

port: 6306

user: root

passwd: qwer1234

step1. 在主机Proxy 中对数据操作

step2. 查看mysql 的Master 节点与Slaver 节点上的数据变化

FAQ:
  1. Server configuration file server.yaml is invalid.

原因:

​ 容器内 /opt/shardingsphere-proxy/conf 的server.yaml 没有进行配置。

解决:

​ 新建/data/dockerData/config/shardingProxyConfig/conf

​ 将如上修改的server.yaml 放入/data/dockerData/config/shardingProxyConfig/conf

​ 并进行容器数据卷挂载

重新进行构建

2.Cannot determine value type from string ‘Y’

原因:server.yaml 版本与docker 使用的版本未对齐

解决:

/data/dockerData/config/shardingProxyConfig/conf 来源于docker 容器

可使用docker cp xxx: /opt/shardingsphere-proxy/conf /data/dockerData/config/shardingProxyConfig/

并对要修改的yaml 进行修改

重新进行构建

3.SELECT command denied to user ‘test’@‘172.23.0.1’ for table ‘user’

原因:

#NATIVE 基于后端数据库(主表)存取 server.yaml 中配置的权限信息。如果用户不存在,则自动创建用户并默认赋予最高权限。(启动时会连接数据库节点)

解决:使用带有root 权限(能访问mysql.user 表)的帐户和密码给config-readwrite-splitting.yaml 连接数据库使用

4.sharding proxy no database selected(navicat/dbeaver等)

原因:

sharding proxy 对可视化工具的支持不够完善

解决:

建议使用mysql 命令进行操作

5.pymsql migrate 时sqlalchemy.exc.InternalError: (pymysql.err.InternalError) (1999, ‘Unknown exception: [SQL checking failed. Error message: .]’)

原因:暂时未查明

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572556.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号