docker_compo搭建shardingSphereProxyMysql主从读写分离
docker_compo搭建shardingSphereProxyMysql主从读写分离版本负责⼈备注说明
v1.0Kevin.xu
密级: 公开
⽂档说明
基于docker-compo快速搭建shardingSphereProxyMysql主从读写分离。
场景说明
mysql 数据量级增⼤后,需要对mysql 进⾏主从复制。降低单服务器IO负载。但由于业务逻辑已经很多,从API层⾯去实现,需要进⾏代码重构,为了简化,使⽤sharding-sphere-proxy 进⾏主从读写分离的代理。此处暂时未进⾏分库分表操作。但
shardingsphere 可⽀持分库分表操作.
环境准备
1. Centos8
2. Docker version 19.0
3.13, build 4484c46d9d
3. docker-compo: 1.29.2
4. docker-compo 搭建mysql主从 完成
配置⽅法
⽬录结构
[root@ibeeServer shardingSphere]# tree
.
├── l
└── sharding_proxy
├── Dockerfile
└── mysql-connector-java-8.0.27.jar
2 directories,
3 files
配置说明用什么洗头好
肠绞痛怎么办
version:'3'
rvices:
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 连接完后使⽤lect 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⽂件说明
读写分离只使⽤rver.yaml config-readwrite-splitting.yaml 两个配置⽂件。
[root@ibeeServer conf]# tree
.
├── config-databa-discovery.yaml #动态数据库接⼊配置
├── config-encrypt.yaml #加密及连接授权配置
├── config-readwrite-splitting.yaml #读写分离配置道法自然天人合一
├── config-shadow.yaml #影⼦库配置
├── config-sharding.yaml #表分⽚配置
├── l #⽇志相关配置(路径)
└── rver.yaml #Sharding-Proxy的⼀些基础配置,⽐如:账号、密码、注册中⼼等。
0 directories, 7 files
rver.yaml 说明
rver 主要配置外部连接shardingProxy的⽤户名和密码
rules:
- !AUTHORITY
urs:
# ⽤于登录计算节点的⽤户名,授权主机和密码的组合。格式:<urname>@<hostname>:<password>,hostname 为 % 或空字符串表⽰不限制授权主机 - root@%:qwer1234
- test@:123456
provider:
# 存储节点数据授权的权限提供者类型
type: NATIVE
#NATIVE 基于后端数据库(主表)存取 rver.yaml 中配置的权限信息。如果⽤户不存在,则⾃动创建⽤户并默认赋予最⾼权限。(启动时会连接数据库节点)
#ALL_PRIVILEGES_PERMITTED 默认授予所有权限(不鉴权),不会与实际数据库交互。
#SCHEMA_PRIVILEGES_PERMITTED 通过属性 ur-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: fal
proxy-hint-enabled: fal
sql-show: fal
check-table-metadata-enabled: fal
lock-wait-timeout-milliconds: 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?rverTimezone=UTC&uSSL=fal&allowPublicKeyRetrieval=true urname: root #数据库连接密码,如果使⽤ NATIVE 需要使⽤访问数据库的root 及密码。此处需要查询mysql.ur 表 password: qwer1234
connectionTimeoutMilliconds: 30000
idleTimeoutMilliconds: 60000
maxLifetimeMilliconds: 1800000
maxPoolSize: 50 #连接池最⼤值
minPoolSize: 1 #连接池最⼩值
maintenanceIntervalMilliconds: 30000
read_ds_0:
#配置写库(Salver)的地址
url: jdbc:mysql://192.168.147.133:5306/test_db?rverTimezone=UTC&uSSL=fal&allowPublicKeyRetrieval=true urname: root #数据库连接密码,如果使⽤ NATIVE 需要使⽤访问数据库的root 及密码。此处需要查询mysql.ur 表 password: qwer1234
connectionTimeoutMilliconds: 30000
idleTimeoutMilliconds: 60000
色波波maxLifetimeMilliconds: 1800000
未来作文
maxPoolSize: 50 #连接池最⼤值
minPoolSize: 1 #连接池最⼩值
maintenanceIntervalMilliconds: 30000
rules: #规则配置
-
!READWRITE_SPLITTING
dataSources:
pr_ds:
writeDataSourceName: write_ds
readDataSourceNames:
- read_ds_0
验证测试:
使⽤mysql 命令进⾏连接主库与从库。
Proxy连接参数为:
x
port: 6306
我的校园作文
ur: root
passwd: qwer1234
step1. 在主机Proxy 中对数据操作
step2. 查看mysql 的Master 节点与Slaver 节点上的数据变化
FAQ:
1. Server configuration file rver.yaml is invalid.
原因:
容器内 /opt/shardingsphere-proxy/conf 的rver.yaml 没有进⾏配置。
解决:
新建/data/dockerData/config/shardingProxyConfig/conf
将如上修改的rver.yaml 放⼊/data/dockerData/config/shardingProxyConfig/conf
并进⾏容器数据卷挂载
重新进⾏构建
2.Cannot determine value type from string ‘Y’
原因:rver.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 ur ‘test’@‘172.23.0.1’ for table ‘ur’
原因:
#NATIVE 基于后端数据库(主表)存取 rver.yaml 中配置的权限信息。如果⽤户不存在,则⾃动创建⽤户并默认赋予最⾼权限。(启动时会连接数据库节点)
解决:使⽤带有root 权限(能访问mysql.ur 表)的帐户和密码给config-readwrite-splitting.yaml 连接数据库使⽤
4.sharding proxy no databa lected(navicat/dbeaver等)
原因:
sharding proxy 对可视化⼯具的⽀持不够完善
解决:
建议使⽤mysql 命令进⾏操作
5.pymsql migrate 时InternalError: (InternalError) (1999, ‘Unknown exception: [SQL checking failed. Error message: .]’)
原因:暂时未查明