由于项目需要,需对项目中数据进行数据隔离,调研shardingsphere并进行测试部署
官网
我没找到镜像,不知道有没有,所以自己制作的registry.cn-chengdu.aliyuncs.com/qinjie/sharding-ui:1.0,如果我没删的话,可以直接用。
镜像制作流程
最后3行改成
java ${JAVA_OPTS} -classpath ${CLASS_PATH} ${MAIN_CLASS}
# This is a JDK servic docker
# jdk请自行替换
FROM registry.cn-chengdu.aliyuncs.com/qinjie/jdk1.8
MAINTAINER qinjie
ADD apache-shardingsphere-4.1.0-shardingsphere-ui-bin.tar.gz /
WORKDIR /apache-shardingsphere-4.1.0-shardingsphere-ui-bin
RUN chmod u+x bin/start.sh
ENTRYPOINT ./bin/start.sh
EXPOSE 8088
名称: sharding_db
分片配置规则:
bindingTables:
- app_rong_bi_user_label_d
defaultDatabaseStrategy:
inline:
algorithmExpression: ds_${application_id}
shardingColumn: application_id
defaultTableStrategy:
none: ''
tables:
app_rong_bi_user_label_d:
actualDataNodes: ds_${['hyrs', 'jjqrs']}.app_rong_bi_user_label_d
数据源配置规则
ds_hyrs: !!org.apache.shardingsphere.orchestration.core.configuration.YamlDataSourceConfiguration
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
properties:
jdbcUrl: jdbc:mysql://XXXXXX/fmcm_rong?serverTimezone=UTC&useSSL=false
username: XXXXXX
password: XXXXXX
connectionTimeout: 30000
idleTimeout: 60000
maxLifetime: 1800000
maxPoolSize: 50
minPoolSize: 1
maintenanceIntervalMilliseconds: 30000
readOnly: false
ds_jjqrs: !!org.apache.shardingsphere.orchestration.core.configuration.YamlDataSourceConfiguration
dataSourceClassName: com.zaxxer.hikari.HikariDataSource
properties:
jdbcUrl: jdbc:mysql://XXXXXX/fmcm_picture?serverTimezone=UTC&useSSL=false
username: XXXXXX
password: XXXXXX
connectionTimeout: 30000
idleTimeout: 60000
maxLifetime: 1800000
maxPoolSize: 50
minPoolSize: 1
maintenanceIntervalMilliseconds: 30000
readOnly: false
users:
sharding:
authorizedSchemas: sharding_db
password: sharding
解释:相当于给proxy指定了个sharding_db数据库,账户:sharding 密码:sharding
该sharding_db数据库中app_rong_bi_user_label_d表会按照application_id进行分库,就是说通过proxy查询的时候
不通的租户id会查询不同的数据库,这就是我们需要的数据隔离效果。数据插入的时候按照application_id插入不同的数据库,名称对应上数据源配置规则的配置ds_jjqr,后面的jjqr就是我的租户名称,有几个租户就配置几个数据源
到下载ui的地方,继续下载源码,idea打开项目后,执行,可以参考教程进行本地运行debug
mvn install -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Drat.skip=true -Djacoco.skip=true -DskipITs -DskipTests -Prelease
编译完成后,改动server.xml
orchestration:
orchestration_ds:
orchestrationType: registry_center,config_center,distributed_lock_manager
instanceType: zookeeper
serverLists: localhost:2181
namespace: orchestration
props:
overwrite: false
retryIntervalMilliseconds: 5000
timeToLiveSeconds: 60
maxRetries: 3
operationTimeoutMilliseconds: 5000
serverLists:zk的地址
orchestration_ds: 对应到ui上配置时的
namespace:对应到
编译后应该可以运行了,否则就看报什么错在解决。注:pom中红色可以不管,我也是大部分红色的
这里就是proxy启动时连接zk获取配置,然后先前配置通过ui已经写进去了,所以理论上是可以启动成功的
本地启动成功后,可以通过localhost:3307 账户:sharding 密码:sharding 连接,数据库sharding_db,对应
修改最后3行改成,也是保证直接运行,保证k8s启动时别后台运行这个
java ${JAVA_OPTS} ${JAVA_MEM_OPTS} -classpath ${CLASS_PATH} ${MAIN_CLASS}
同时改动该目录下conf下面的server.xml的配置,也去配置zk的地址执行:可以参考官网教程
mvn clean install -Prelease -T1C -DskipTests -Djacoco.skip=true -Dcheckstyle.skip=true -Drat.skip=true -Dmaven.javadoc.skip=true -B
然后会生成一个tar.gz,这个就是可直接运行的压缩包了。该压缩包不包含mysql的jar,我这边是解压后加进去在压缩回来,┑( ̄Д  ̄)┍,应该也是可以在pom中加的,暂时还不知道咋加。
官网提供了直接打包镜像的方法和直接的镜像(由于某种原因我是自己手动打包制作改动的),可以参考官网教程
我还是像ui那样,把这个tar.gz直接制作镜像,推送阿里仓库,然后k8s拉取运行
(在制作镜像前需要把mysql的jar复制到tar.gz解压包中的lib下面,默认打包出来不会有mysql的连接jar,然后重写压缩成tar.gz在制作镜像即可)
注意:
连接地址:proxy运行地址
账户:sharding
密码:sharding
数据库:sharding_db
执行,发现数据按照租户id到不同的库中了
CREATE TABLE `app_rong_bi_user_label_d` (`application_id` varchar(22) NOT NULL);
insert into app_rong_bi_user_label_d(application_id) value('hyrs')
insert into app_rong_bi_user_label_d(application_id) value('jjqrs')