一、安装
docker安装
docker run -d \
-v /opt/shardingsphere-proxy/server/proxy/conf:/opt/shardingsphere-proxy/conf \
-v /opt/shardingsphere-proxy/server/proxy/ext-lib:/opt/shardingsphere-proxy/ext-lib \
-v /opt/shardingsphere-proxy/server/proxy/logs:/opt/shardingsphere-proxy/logs \
-e ES_JAVA_OPTS="-Xmx256m -Xms256m -Xmn128m" \
-p 3321:3307 \
--name server-proxy \
apache/shardingsphere-proxy:5.1.1
说明:
- -v路径映射,宿主机路径(自定义):容器路径(不能改)。
- conf文件夹是配置文件位置,所有的配置文件都放到这个位置。
- ext-lib文件夹是扩展包,用来放数据库连接驱动使用。
- logs文件夹是用来查看日志的。
- -e配置环境变量用,用来设置JVM参数。
- -p 端口映射 宿主机端口 :容器端口。
设置驱动
根据实际数据库将需要的驱动放到对应的路径下(ext-lib)
官网说明:
修改配置文件
修改conf/server.yaml
rules:
- !AUTHORITY
# 客户端连接的用户名密码,@%的意思是不限制连接IP
users:
- root@%:root
provider:
# 所有权限
type: ALL_PRIVILEGES_PERMITTED
props:
# sql是否显示
sql-show: true
重启容器
docker restart server-proxy
实时查看日志
# 第一种方式,通过docker容器查看
docker exec -it server-proxy env LANG=C.UTF-8 /bin/bash
tail -f /opt/shardingsphere-proxy/logs/stdout.log
# 第二种方式,通过映射出来的文件夹查看
打开映射的日志文件夹即可:/opt/shardingsphere-proxy/logs/stdout.log
客户端登录
# -h 指定sharding-proxy安装的服务器IP
# -P 指定sharding-proxy安装的端口
# -u 指定sharding-proxy配置文件指定的用户名
# -p 指定sharding-proxy配置文件指定的用户密码
mysql -h 192.168.1.102 -P 3321 -u root -p
显示上面的结果就是连接成功。
二、使用
垂直分片
修改配置文件config-sharding.yaml并上传到conf下并重启服务
# 对应sharding-proxy映射出来的数据库名称
schemaName: sharding_test
dataSources:
ds_0:
url: jdbc:mysql://192.168.1.102:3306/db_1?serverTimezone=UTC&useSSL=false
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds_1:
url: jdbc:mysql://192.168.1.102:3306/db_2?serverTimezone=UTC&useSSL=false
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
rules:
- !SHARDING
tables:
t_user:
actualDataNodes: ds_0.t_user
t_school:
actualDataNodes: ds_1.t_school
select * from t_user;
select * from t_order;
从上面的结果可以不同的表分不到了不同的数据库,实现了垂直分片。
水平分片
修改配置文件config-sharding.yaml并上传到conf目录下:
schemaName: sharding_test
dataSources:
ds_user:
url: jdbc:mysql://192.168.1.102:3306/db_1?serverTimezone=UTC&useSSL=false
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds_school0:
url: jdbc:mysql://192.168.1.102:3306/db_1?serverTimezone=UTC&useSSL=false
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
ds_school1:
url: jdbc:mysql://192.168.1.102:3306/db_2?serverTimezone=UTC&useSSL=false
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
minPoolSize: 1
rules:
- !SHARDING
tables:
t_user:
actualDataNodes: ds_user.t_user
t_school:
actualDataNodes: ds_school${0..1}.t_school${0..1}
databaseStrategy:
standard:
shardingColumn: id
shardingAlgorithmName: alg_hash_mod
tableStrategy:
standard:
shardingColumn: id
shardingAlgorithmName: alg_hash_mod
shardingAlgorithms:
alg_hash_mod:
type: HASH_MOD
props:
sharding-count: 2
测试,分别插入不同的ID数据,查看数据分布:
偶数数取模入到db_1库的表中
奇数取模入到db_2库的表中