shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库
shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库
shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库
背景
由于项目需要,需对项目中数据进行数据隔离,调研shardingsphere并进行测试部署
相关原理
相关环境配置
- 正常的java开发环境(我这边有java、maven的环境变量,java版本1.8)
- 配置antlr(应该要,我是安装了的)
参考教程
另外:antlr的下载可以到antlr官网
我这里给个下载地址,我用的是4.9.1
idea也需要配置个插件
- zookeeper
k8s启动个最新的,也没有配置需要改动 - shardingsphere-ui
shardingsphere-ui部署运行
我没找到镜像,不知道有没有,所以自己制作的registry.cn-chengdu.aliyuncs.com/qinjie/sharding-ui:1.0,如果我没删的话,可以直接用。
镜像制作流程
- 下载发布版的tar
- 解压tar -zxvf XXXXX.tar.gz
- 到解压目录的bin下,编辑start.sh
它默认输入到文件,改成java直接运行输出到控制台,改日志配置应该也可以但是我没试过
最后3行改成
java ${JAVA_OPTS} -classpath ${CLASS_PATH} ${MAIN_CLASS}
- 压缩,tar -zcvf xxxxx.tar.gz xxxxx
- 把这zip打包成镜像,并且推送到阿里镜像仓库
# 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
- k8s拉取镜像,也不改啥配置直接运行,默认端口8088,默认账户密码admin admin
- 配置连接zk
- 配置proxy的分库配置,确定后即可
名称: 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就是我的租户名称,有几个租户就配置几个数据源
proxy编译打包
编译运行
到下载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,对应
打包zip
修改最后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在制作镜像即可)
注意:
- 官方有镜像可直接用参考
- 官方镜像直接外挂配置目录即可
只要启动完成就表示没问题,不然就看哪出了问题
可能:zk没连接上;配置可能没有配置正确,上面我提供的配置是目前实测没问题的;
测试
连接地址: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')
更多推荐
所有评论(0)