shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库

shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库

  • 背景
  • 相关原理
  • 相关环境配置
  • shardingsphere-ui部署运行
  • proxy编译打包
    • 编译运行
    • 打包zip
    • 制作镜像
  • 测试

背景

由于项目需要,需对项目中数据进行数据隔离,调研shardingsphere并进行测试部署

相关原理

官网

相关环境配置

  1. 正常的java开发环境(我这边有java、maven的环境变量,java版本1.8)
  2. 配置antlr(应该要,我是安装了的)
    参考教程
    另外:antlr的下载可以到antlr官网
    我这里给个下载地址,我用的是4.9.1
    idea也需要配置个插件
    shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库_第1张图片
  3. zookeeper
    k8s启动个最新的在这里插入图片描述,也没有配置需要改动
  4. shardingsphere-ui

shardingsphere-ui部署运行

我没找到镜像,不知道有没有,所以自己制作的registry.cn-chengdu.aliyuncs.com/qinjie/sharding-ui:1.0,如果我没删的话,可以直接用。
镜像制作流程

  1. 下载发布版的tar
    在这里插入图片描述
  2. 解压tar -zxvf XXXXX.tar.gz
  3. 到解压目录的bin下,编辑start.sh
    它默认输入到文件,改成java直接运行输出到控制台,改日志配置应该也可以但是我没试过
最后3行改成
java ${JAVA_OPTS} -classpath ${CLASS_PATH} ${MAIN_CLASS} 
  1. 压缩,tar -zcvf xxxxx.tar.gz xxxxx
  2. 把这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
  1. k8s拉取镜像,也不改啥配置直接运行,默认端口8088,默认账户密码admin admin
  2. 配置连接zk
    shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库_第2张图片
  3. 配置proxy的分库配置,确定后即可
    shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库_第3张图片
名称: 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

shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库_第4张图片

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上配置时的shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库_第5张图片
namespace:对应到shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库_第6张图片

编译后应该可以运行了,否则就看报什么错在解决。注:pom中红色可以不管,我也是大部分红色的
这里就是proxy启动时连接zk获取配置,然后先前配置通过ui已经写进去了,所以理论上是可以启动成功的

本地启动成功后,可以通过localhost:3307 账户:sharding 密码:sharding 连接,数据库sharding_db,对应shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库_第7张图片

打包zip

修改shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库_第8张图片最后3行改成,也是保证直接运行,保证k8s启动时别后台运行这个

java ${JAVA_OPTS} ${JAVA_MEM_OPTS} -classpath ${CLASS_PATH} ${MAIN_CLASS}

同时改动该目录下conf下面的server.xml的配置,也去配置zk的地址shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库_第9张图片执行:可以参考官网教程

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中加的,暂时还不知道咋加。
shardingsphere4.x源码打包镜像+k8s安装proxy、ui、zookeeper并配置分库_第10张图片

制作镜像

官网提供了直接打包镜像的方法和直接的镜像(由于某种原因我是自己手动打包制作改动的),可以参考官网教程
我还是像ui那样,把这个tar.gz直接制作镜像,推送阿里仓库,然后k8s拉取运行
(在制作镜像前需要把mysql的jar复制到tar.gz解压包中的lib下面,默认打包出来不会有mysql的连接jar,然后重写压缩成tar.gz在制作镜像即可)
注意:

  1. 官方有镜像可直接用参考
  2. 官方镜像直接外挂配置目录即可
    只要启动完成就表示没问题,不然就看哪出了问题
    可能: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')

你可能感兴趣的:(Java,插件,shardingsphere,分库分表,mysql)