文章目录
一、ShardingProxy快速使用
ShardingProxy的功能同样是分库分表,但是它是一个独立部署的服务端,提供统一的数据库代理服务。
注意,ShardingProxy目前只支持MySQL和PostgreSQL。并且,客户端连接ShardingProxy时,最好使用MySQL的JDBC客户端。下面我们来部署一个ShardingProxy服务。
1、ShardingProxy部署
【注意】ShardingSphere是用java写的,所以环境需要安装JDK!
ShardingProxy在windows和Linux上提供了一套统一的部署发布包。我们可以从ShardingSphere官网下载4.1.1版本的ShardingProxy发布包apache-shardingsphere-4.1.1-sharding-proxy-bin.tar.gz,解压到本地目录。
下载连接:https://archive.apache.org/dist/shardingsphere/
我们将下载后的zip包解压上传到linux服务器上,然后解压:
// yum install zip unzip
unzip apache-shardingsphere-4.1.1-sharding-proxy-bin-test.zip
// 重命名
mv ./apache-shardingsphere-4.1.1-sharding-proxy-bin ./sharding_proxy
解压完成之后,我们执行以下几个步骤来完成安装。
Step 1:
因为我们之前安装的mysql版本都是8.0.20,所以我们需要把MySQL的JDBC驱动包mysql-connector-java-8.0.20.jar手动复制到ShardingProxy的lib目录下。ShardingProxy默认只附带了PostgreSQL的JDBC驱动包,而不包含MySQL的JDBC驱动包。
注意,其实shardingproxy的lib包下是有一个自带的mysql驱动包的,我们上传完和自己版本复合的驱动包后,需要把自带的8.0.13的这个驱动包删除掉,否则后面启动proxy的时候会报错:
[root@localhost bin]# sh start.sh 3316
Starting the Sharding-Proxy ...
The port is 3316
The classpath is /usr/software/sharding_sphere/sharding_proxy/conf:.:..:/usr/software/sharding_sphere/sharding_proxy/lib/*:/usr/software/sharding_sphere/sharding_proxy/lib/*:/usr/software/sharding_sphere/sharding_proxy/ext-lib/*
Please check the STDOUT file: /usr/software/sharding_sphere/sharding_proxy/logs/stdout.log
Step 2:
我们修改conf目录下的config-sharding.yaml,这个配置文件就是shardingProxy关于分库分表部分的配置。整个配置和之前我们使用ShardingJDBC时的配置大致相同,我们在最下面按照自己的数据库环境增加以下配置:
schemaName: sharding_db
dataSources:
m1:
url: jdbc:mysql://192.168.131.171:3306/ShardingJdbcDemo?serverTimezone=GMT%2B8&useSSL=false
username: root
password: 123456
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 50
shardingRule:
tables:
course:
actualDataNodes: m1.course_$->{1..2}
tableStrategy:
inline:
shardingColumn: cid
algorithmExpression: course_$->{cid%2+1}
keyGenerator:
type: SNOWFLAKE
column: cid
这一段就是按照我们之前的application01-split-tables.properties文件中的规则配置的。可以看到,整个配置其实是大同小异的。
注意,shardingproxy中还要一个配置文件:server.yaml。里面有一些关于认证的信息,我们来看一下:
authentication:
users:
root:
password: root
sharding:
password: sharding
authorizedSchemas: sharding_db
props:
max.connections.size.per.query: 1
acceptor.size: 16 # The default value is available processors count * 2.
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
proxy.opentracing.enabled: false
proxy.hint.enabled: false
query.with.cipher.column: true
sql.show: false
allow.range.query.with.inline.sharding: false
可以看到登录shardingproxy的用户名是root,密码是root。这个如果有需要,我们也可以自己去修改!之后连接客户端的时候的用户名密码,就要使用这个配置文件中的!
Step 3:
还一个小问题要注意,我们进入ShardingProxy的Lib目录,里面会有些jar包因为名字太长了,导致有些文件的后缀被截断了,我们要手动把他们的文件后缀给修改过来。
【注意】在linux下我没发现这个问题,所以可以忽略这一步。
Step 4:
最后,我们就可以启动ShardingProxy的服务了。启动脚本在bin目录下。其中,windows平台对应的脚本是start.bat,Linux平台对应的脚本是start.sh和stop.sh。
启动时,我们可以直接运行start.bat脚本,这时候,ShardingProxy默认占用的是3307端口。为了不跟我们之前搭建的多个MySQL服务端口冲突,我们定制下启动端口,改为3316端口。
sh start.sh 3317
启动后查看stdout.log这个文件:
[INFO ] 15:10:27.727 [main] ShardingSphere-metadata - Loading 1 logic tables' meta data.
[INFO ] 15:10:27.858 [main] ShardingSphere-metadata - Loading 7 tables' meta data.
[INFO ] 15:10:28.442 [nioEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0x88b9b306] REGISTERED
[INFO ] 15:10:28.449 [nioEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0x88b9b306] BIND: 0.0.0.0/0.0.0.0:3317
[INFO ] 15:10:28.452 [nioEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0x88b9b306, L:/0.0.0.0:3317] ACTIVE
看到这样的信息就说明启动成功了。
2、ShardingProxy使用
这样,我们就可以像连接一个标准MySQL服务一样连接ShardingProxy了。
我们进入到任意一个mysql的docker容器中,执行如下命令进行连接:
root@10d0c721d326:/# mysql -uroot -p -h192.168.131.172 -P3317
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'172.17.0.4' (using password: YES)
root@10d0c721d326:/# mysql -uroot -p -h192.168.131.172 -P3317
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.20-Sharding-Proxy 4.1.0
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+-------------+
| Database |
+-------------+
| sharding_db |
+-------------+
1 row in set (0.02 sec)
mysql> use sharding_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------------------+
| Tables_in_ShardingJdbcDemo |
+----------------------------+
| course |
| t_dict |
| t_user_1 |
| t_user_2 |
| t_ustatus_1 |
| t_ustatus_2 |
+----------------------------+
6 rows in set (0.02 sec)
mysql> select * from course;
+---------------------+----------------+---------+---------+
| cid | cname | user_id | cstatus |
+---------------------+----------------+---------+---------+
| 202109211007481711 | shardingsphere | 1000 | 1 |
| 202109211007483972 | shardingsphere | 1001 | 1 |
| 202109211007484223 | shardingsphere | 1002 | 1 |
| 202109211007484494 | shardingsphere | 1003 | 1 |
| 202109211007484735 | shardingsphere | 1004 | 1 |
| 202109211007485046 | shardingsphere | 1005 | 1 |
| 202109211007485677 | shardingsphere | 1006 | 1 |
| 202109211007486008 | shardingsphere | 1007 | 1 |
| 202109211007486669 | shardingsphere | 1008 | 1 |
| 645951089950068736 | shardingsphere | 1000 | 1 |
| 645951090923147264 | shardingsphere | 1002 | 1 |
| 645951091007033344 | shardingsphere | 1004 | 1 |
| 645951091099308032 | shardingsphere | 1006 | 1 |
| 645951091187388416 | shardingsphere | 1008 | 1 |
| 2021092110074870210 | shardingsphere | 1009 | 1 |
| 202109211007481711 | shardingsphere | 1000 | 1 |
| 202109211007483972 | shardingsphere | 1001 | 1 |
| 202109211007484223 | shardingsphere | 1002 | 1 |
| 202109211007484494 | shardingsphere | 1003 | 1 |
| 202109211007484735 | shardingsphere | 1004 | 1 |
| 202109211007485046 | shardingsphere | 1005 | 1 |
| 202109211007485677 | shardingsphere | 1006 | 1 |
| 202109211007486008 | shardingsphere | 1007 | 1 |
| 202109211007486669 | shardingsphere | 1008 | 1 |
| 2021092110074870210 | shardingsphere | 1009 | 1 |
+---------------------+----------------+---------+---------+
25 rows in set (0.08 sec)
我们还可以使用Navicat进行连接:
可以看到,对于那些已经配置了分片策略的表,比如上面的course表,shardingproxy会自动根据真实表构建出一个逻辑表。而对于没有配置分片策略的表,依然展示真实表。
这和MyCat非常像,此时我们就像在操作一个mysql服务一样,感受不到分库分表的存在。
之前在ShardingJDBC部分完成了的其他几种分库分表策略以及读写分离策略,可以验证了。
3、ShardingProxy的服务治理
从ShardingProxy的server.yaml中看到,ShardingProxy还支持非常多的服务治理功能。
在server.yaml配置文件中的orchestration部分属性就演示了如何将ShardingProxy注册到Zookeeper当中。
orchestration:
orchestration_ds:
orchestrationType: registry_center,config_center,distributed_lock_manager
instanceType: zookeeper
serverLists: localhost:2181
namespace: orchestration
props:
overwrite: false
retryIntervalMilliseconds: 500
timeToLiveSeconds: 60
maxRetries: 3
operationTimeoutMilliseconds: 500
比如我们要做shardingproxy的主从,那么这两个服务中的配置文件就应该一模一样。但是如果让我们自己来维护,可能会出现问题。所以我们就可以将配置文件统一的放到zookeeper中。
3.1 配置发布到zookeeper
我们配置好zk之后,启动zookeeper,然后进入到客户端中:
发现shardingproxy已经成功注册到zk了。
那我们看下这个注册的信息是什么:
可以看到,此时的配置信息已经被放到了zk中。那如果我再启动一台shardingproxy服务,并且配置的zk是同一台的话,就可以拉取到上面的配置信息了!
### 3.2 服务治理介绍 ShardingSphere在服务治理这一块主要有两个部分:
一方面是数据接入以及弹性伸缩。简单理解就是把MySQL或者其他数据源的数据快速迁移进ShardingSphere的分片库中。并且能够快速的对已有的ShardingShere分片库进行扩容以及减配。这一块由ShardingSphere-scaling产品来提供支持。只是这个功能在目前的4.1.1版本中,还处于Alpha测试阶段。
另一方面,ShardingSphere支持将复杂的分库分表配置上传到统一的注册中心中集中管理。目前支持的注册中心有Zookeeper和Etcd。而ShardingSphere也提供了SPI扩展接口,可以快速接入Nacos、Apollo等注册中心。在ShardingProxy的server.yaml中我们已经看到了这一部分的配置示例。
另外,ShardingSphere针对他的这些生态功能,提供了一个ShardingSphere-UI产品来提供页面支持。ShardingSphere-UI是针对整个ShardingSphere的一个简单有用的Web管理控制台。它用于帮助用户更简单的使用ShardingSphere的相关功能。目前提供注册中心管理、动态配置管理、数据库编排管理等功能。
4、Shardingproxy的其他功能
4.1 影子库
这部分功能主要是用于进行压测的。通过给生产环境上的关键数据库表配置一个影子库,就可以将写往生产环境的数据全部转为写入影子库中,而影子库通常会配置成跟生产环境在同一个库,这样就可以在生产环境上直接进行压力测试,而不会影响生产环境的数据。
在conf/config-shadow.yaml中有配置影子库的示例。其中最核心的就是下面的shadowRule这一部分。
#schemaName: sharding_db
#
#dataSources:
# ds:
# url: jdbc:postgresql://127.0.0.1:5432/demo_ds_0?serverTimezone=UTC&useSSL=false
# username: postgres
# password: postgres
# connectionTimeoutMilliseconds: 30000
# idleTimeoutMilliseconds: 60000
# maxLifetimeMilliseconds: 1800000
# maxPoolSize: 50
# shadow_ds:
# url: jdbc:postgresql://127.0.0.1:5432/demo_ds_1?serverTimezone=UTC&useSSL=false
# username: postgres
# password: postgres
# connectionTimeoutMilliseconds: 30000
# idleTimeoutMilliseconds: 60000
# maxLifetimeMilliseconds: 1800000
# maxPoolSize: 50
#
#shadowRule:
# column: shadow
# shadowMappings:
# ds: shadow_ds
#
#
######################################################################################################
#
# If you want to connect to MySQL, you should manually copy MySQL driver to lib directory.
#
######################################################################################################
#
#schemaName: sharding_db
#
#dataSources:
# ds:
# url: jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
# username: root
# password:
# connectionTimeoutMilliseconds: 30000
# idleTimeoutMilliseconds: 60000
# maxLifetimeMilliseconds: 1800000
# maxPoolSize: 50
# shadow_ds:
# url: jdbc:mysql://127.0.0.1:3306/demo_ds_1?serverTimezone=UTC&useSSL=false
# username: root
# password:
# connectionTimeoutMilliseconds: 30000
# idleTimeoutMilliseconds: 60000
# maxLifetimeMilliseconds: 1800000
# maxPoolSize: 50
#
#shadowRule:
# column: shadow
# shadowMappings:
# 绑定shadow_ds为ds的影子库
# ds: shadow_ds
4.2 数据加密
在conf/config-encrypt.yaml中还演示了ShardingProxy的另一个功能,数据加密。默认集成了AES对称加密和MD5加密。还可以通过SPI机制自行扩展更多的加密算法。
######################################################################################################
#
# If you want to connect to MySQL, you should manually copy MySQL driver to lib directory.
#
######################################################################################################
#
#schemaName: encrypt_db
#
#dataSource:
# url: jdbc:mysql://127.0.0.1:3306/demo_ds?serverTimezone=UTC&useSSL=false
# username: root
# password:
# connectionTimeoutMilliseconds: 30000
# idleTimeoutMilliseconds: 60000
# maxLifetimeMilliseconds: 1800000
# maxPoolSize: 50
#
#encryptRule:
# encryptors:
# encryptor_aes:
# type: aes
# props:
# aes.key.value: 123456abc
# encryptor_md5:
# type: md5
# tables:
# t_encrypt:
# columns:
# user_id:
# plainColumn: user_plain
# cipherColumn: user_cipher
# encryptor: encryptor_aes
# order_id:
# cipherColumn: order_cipher
# encryptor: encryptor_md5
4.3 主从配置
######################################################################################################
#
# If you want to connect to MySQL, you should manually copy MySQL driver to lib directory.
#
######################################################################################################
#schemaName: master_slave_db
#
#dataSources:
# master_ds:
# url: jdbc:mysql://127.0.0.1:3306/demo_ds_master?serverTimezone=UTC&useSSL=false
# username: root
# password:
# connectionTimeoutMilliseconds: 30000
# idleTimeoutMilliseconds: 60000
# maxLifetimeMilliseconds: 1800000
# maxPoolSize: 50
# slave_ds_0:
# url: jdbc:mysql://127.0.0.1:3306/demo_ds_slave_0?serverTimezone=UTC&useSSL=false
# username: root
# password:
# connectionTimeoutMilliseconds: 30000
# idleTimeoutMilliseconds: 60000
# maxLifetimeMilliseconds: 1800000
# maxPoolSize: 50
# slave_ds_1:
# url: jdbc:mysql://127.0.0.1:3306/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
# username: root
# password:
# connectionTimeoutMilliseconds: 30000
# idleTimeoutMilliseconds: 60000
# maxLifetimeMilliseconds: 1800000
# maxPoolSize: 50
#
#masterSlaveRule:
# name: ms_ds
# masterDataSourceName: master_ds
# slaveDataSourceNames:
# - slave_ds_0
# - slave_ds_1
5、ShardingProxy的SPI扩展-主键生成
上一部分提到了ShardingSphere保留了大量的SPI扩展接口,对主流程封闭、对SPI开放。这在ShardingJDBC中还体现不出太大的作用,但是在ShardingProxy中就能极大程度提高服务的灵活性了。
在ShardingProxy中,只需要将自定义的扩展功能按照SPI机制的要求打成jar包,就可以直接把jar包放入lib目录,然后就配置使用了。
例如如果想要扩展一个新的主键生成策略,只需要自己开发一个主键生成类:
/**
* 利用SPI, 自定义主键生成策略
*/
public class MyKeyGen implements ShardingKeyGenerator {
private AtomicLong atomicLong = new AtomicLong(0);
@Override
public Comparable<?> generateKey() {
// 可以使用redis生成, 这里为了简单, 我们使用当前时间
LocalDateTime dateTime = LocalDateTime.now();
String timeStamps = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").format(dateTime);
// 为了保证再高并发的情况下不重复, 加一个原子类
return Long.parseLong("" + timeStamps + atomicLong.incrementAndGet());
}
@Override
public String getType() {
return "MYKEY";
}
@Override
public Properties getProperties() {
return null;
}
@Override
public void setProperties(Properties properties) {
}
}
然后增加一个META-INF\services\org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator文件:
com.jihu.sharding.spiextention.MyKeyGen
测试完成主键生成类可以正常工作之后,我们就需要将这个类打包成一个jar包。
我们需要将扩展类和这个SPI服务文件一起打成jar包,就可以直接放到ShardingProxy的lib目录下。
具体实现方式:
我们打开IDEA的project structure,再点击Artifacts,点击“+”,选择JAR==>Empty。
进入Artifacts界面后,name框中可以输入你的目的jar包的名称,也可以不动,系统默认是unnamed。后面的type选择框选择JAR;下面一行Output directory为jar包存放路径。在output Layout菜单下有加号,点击它,会出现几个下拉选项,选择File ,然后添加扩展类和SPI服务文件。如图所示
将文件添加完之后,找到idea第一行菜单的build,在下拉菜单中,选择Build Artfacts ,在弹出的框中选择build即可。
最后在输出路径下,找打的jar包。如下图
如果想改名可以直接rename。
然后我们可以直接将这个jar包放到ShardingProxy的lib目录下。
接下来就可以在config-sharding.yaml中以类似下面这种配置方式引入了。
【注意】配置之前注释掉zookeeper的配置。因为如果开启的话会从zk中读取配置,这样读取的是旧的配置。
shardingRule:
tables:
course:
actualDataNodes: m1.course_$->{1..2}
tableStrategy:
inline:
shardingColumn: cid
algorithmExpression: course_$->{cid%2+1}
keyGenerator:
# type: SNOWFLAKE
type: MYKEY # 自定义的主键生成器
column: cid
然后我们可以重新启动ShardingProxy,试试我们自定义的主键生成器。
mysql> select * from course;
+---------------------+----------------+---------+---------+
| cid | cname | user_id | cstatus |
+---------------------+----------------+---------+---------+
| 202109211007481711 | shardingsphere | 1000 | 1 |
| 202109211007483972 | shardingsphere | 1001 | 1 |
| 202109211007484223 | shardingsphere | 1002 | 1 |
| 202109211007484494 | shardingsphere | 1003 | 1 |
| 202109211007484735 | shardingsphere | 1004 | 1 |
| 202109211007485046 | shardingsphere | 1005 | 1 |
| 202109211007485677 | shardingsphere | 1006 | 1 |
| 202109211007486008 | shardingsphere | 1007 | 1 |
| 202109211007486669 | shardingsphere | 1008 | 1 |
| 645951089950068736 | shardingsphere | 1000 | 1 |
| 645951090923147264 | shardingsphere | 1002 | 1 |
| 645951091007033344 | shardingsphere | 1004 | 1 |
| 645951091099308032 | shardingsphere | 1006 | 1 |
| 645951091187388416 | shardingsphere | 1008 | 1 |
| 647705352472625152 | java2 | 1002 | 1 |
| 647707283668598784 | test-key-gen1 | 9991 | 1 |
| 2021092110074870210 | shardingsphere | 1009 | 1 |
| 202109211007481711 | shardingsphere | 1000 | 1 |
| 202109211007483972 | shardingsphere | 1001 | 1 |
| 202109211007484223 | shardingsphere | 1002 | 1 |
| 202109211007484494 | shardingsphere | 1003 | 1 |
| 202109211007484735 | shardingsphere | 1004 | 1 |
| 202109211007485046 | shardingsphere | 1005 | 1 |
| 202109211007485677 | shardingsphere | 1006 | 1 |
| 202109211007486008 | shardingsphere | 1007 | 1 |
| 202109211007486669 | shardingsphere | 1008 | 1 |
| 2021092110074870210 | shardingsphere | 1009 | 1 |
+---------------------+----------------+---------+---------+
27 rows in set (0.11 sec)
mysql> insert into course(cname,user_id,cstatus) values ('test-key-gen2',9992,'2');
Query OK, 1 row affected (0.01 sec)
mysql> insert into course(cname,user_id,cstatus) values ('test-key-gen3',9993,'3');
Query OK, 1 row affected (0.01 sec)
mysql> select * from course;
+---------------------+----------------+---------+---------+
| cid | cname | user_id | cstatus |
+---------------------+----------------+---------+---------+
| 2009473292 | test-key-gen3 | 9993 | 3 |
| 202109211007481711 | shardingsphere | 1000 | 1 |
| 202109211007483972 | shardingsphere | 1001 | 1 |
| 202109211007484223 | shardingsphere | 1002 | 1 |
| 202109211007484494 | shardingsphere | 1003 | 1 |
| 202109211007484735 | shardingsphere | 1004 | 1 |
| 202109211007485046 | shardingsphere | 1005 | 1 |
| 202109211007485677 | shardingsphere | 1006 | 1 |
| 202109211007486008 | shardingsphere | 1007 | 1 |
| 202109211007486669 | shardingsphere | 1008 | 1 |
| 645951089950068736 | shardingsphere | 1000 | 1 |
| 645951090923147264 | shardingsphere | 1002 | 1 |
| 645951091007033344 | shardingsphere | 1004 | 1 |
| 645951091099308032 | shardingsphere | 1006 | 1 |
| 645951091187388416 | shardingsphere | 1008 | 1 |
| 647705352472625152 | java2 | 1002 | 1 |
| 647707283668598784 | test-key-gen1 | 9991 | 1 |
| 2021092110074870210 | shardingsphere | 1009 | 1 |
| 2007214401 | test-key-gen2 | 9992 | 2 |
| 202109211007481711 | shardingsphere | 1000 | 1 |
| 202109211007483972 | shardingsphere | 1001 | 1 |
| 202109211007484223 | shardingsphere | 1002 | 1 |
| 202109211007484494 | shardingsphere | 1003 | 1 |
| 202109211007484735 | shardingsphere | 1004 | 1 |
| 202109211007485046 | shardingsphere | 1005 | 1 |
| 202109211007485677 | shardingsphere | 1006 | 1 |
| 202109211007486008 | shardingsphere | 1007 | 1 |
| 202109211007486669 | shardingsphere | 1008 | 1 |
| 2021092110074870210 | shardingsphere | 1009 | 1 |
+---------------------+----------------+---------+---------+
29 rows in set (0.04 sec)
从结果可以看到,插入的两条记录,自动生成的CID分别为2007214401 、2009473292 。这样我们就很快的完成了一个自定义的主键生成策略。
【注意】在真实项目中我们不会这样使用。因为将整个项目都打成jar包,包含了太多无用的东西。在真实使用中,我们需要使用maven打包插件,只将主键生成类和创建的SPI扩展点的文件一起打包。
6、ShardingProxy-UI界面使用
ShardingProxy-UI是一个springboot项目,下载之后运行即可。
1、下载
wget https://mirror.bit.edu.cn/apache/shardingsphere/shardingsphere-ui-4.1.0/apache-shardingsphere-4.1.0-shardingsphere-ui-bin.tar.gz
2、解压
tar -zxvf apache-shardingsphere-4.1.0-shardingsphere-ui-bin.tar.gz
3、修改名称
mv apache-shardingsphere-4.1.0-shardingsphere-ui-bin ./sharding_proxy_ui
4、查看配置文件
application.properties文件:
server.port=8088
user.admin.username=admin
user.admin.password=admin
5、启动
sh start.sh
6、服务测试
启动后我们来访问:ip:8088
用户名密码默认都是admin。
可以添加注册中心:
还可以添加分配规则:
还在完善中,目前还不是很成熟…线上很少使用…
二、ShardingSphere总结
我们现在已经学完了ShardingSphere除了Sharding-SideCar以外的所有产品了,整个sharding + proxy的所有这些功能,本质上其实都只解决了一个问题,就是单机数据库容量的问题。在软件层面对硬件资源进行管理,从而便于对数据库的横向扩展。
但是,我们也要意识到他带来的很多问题。
例如对业务的侵入大。业务系统写的SQL将不再是纯粹的能在服务器上运行的SQL了,对大量跨维度的JOIN、聚合、子查询、排序等功能在业务上很难进行验证。这必然会弱化数据库的功能。
并且,使用ShardingSphere管理后,数据库之间变成了结合非常紧密的依赖关系,对整个集群的扩容也会带来相当大的难度。
另外,ShardingSphere这种方式实际上将原本由业务管理SQL的工作方式,转化成了由业务管理逻辑SQL,而运维管理实际SQL的混合工作模式,再加上一大堆服务的引入,整个服务运维的维护工作量以及工作难度也上升了非常多。
当然,相信随着ShardingSphere后续版本的不断升级优化,这些问题都会得到不同程度的改善。