ShardingSphere-Proxy分库分表以及多租户安装使用
需求:你提供SAAS服務,你有你有2個租戶(商戶),各自的數據進各自的庫,而你不希望你的微服務java里默認配置多個租戶數據源,數據連接池太多,而且后面動態(tài)增加也不方便,諸如此類很多問題。
方案:ShardingSphere-Proxy基于數據庫表有一個租戶字段
1.ShardingSphere-Proxy家族產品簡介
ShardingSphere-Proxy和ShardingSphere-JDBC都是ShardingSphere的不同產品。
ShardingSphere-JDBC是客戶端分庫分表,而ShardingSphere-Proxy是一個中間層,客戶端代碼無需配置修改,定位為透明化的數據庫代理端,提供封裝了數據庫二進制協(xié)議的服務端版本,用于完成對異構語言的支持。 目前提供 MySQL 和 PostgreSQL(兼容 openGauss 等基于 PostgreSQL 的數據庫)版本,它可以使用任何兼容 MySQL/PostgreSQL 協(xié)議的訪問客戶端(如:MySQL Command Client, MySQL Workbench, Navicat 等)操作數據,對 DBA 更加友好。
- 向應用程序完全透明,可直接當做 MySQL/PostgreSQL 使用。
- 適用于任何兼容 MySQL/PostgreSQL 協(xié)議的的客戶端。
2.分庫分表和多租戶
分庫分表一般使用的是hash取模的方式,很多類似產品都是這樣實現的。
ShardingSphere有一個特別的亮點是基于表中某一個字段進行分庫分表。
我們可以利用這個實現多租戶。
至于ShardingSphere-Proxy和ShardingSphere-JDBC配置使用是一樣的,只是一個客戶端一個中間層而已。
3.系統(tǒng)環(huán)境依賴
很多參考信息包括官方網站都不是很友好,導致安裝使用過程中遇到太多問題需要解決,那么我這里就把完整的教程和注意事項寫下來,照著做就行了。
環(huán)境:CentOS7.8
ShardingSphere-Proxy官方網站:ShardingSphere
安裝java
ShardingSphere-Proxy需要基于java,如果已經安裝可以忽略。
另外本機內存需要注意需要4G內存以上,不然Java啟動會報錯內存不足。
我們這邊假設是從阿里云進行購買ECS,自己安裝。
#cd /usr/local
解壓jdk,1.8以上版本皆可
#tar -zxvf jdk-8u221-linux-x64.tar.gz
將jdk配置到/etc/profile
#vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_221
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
export PATH=$PATH:${JAVA_PATH}
通過命令source /etc/profile讓profile文件立即生效
#source /etc/profile
查看是否安裝好
#java -version
只是source /etc/profile如果還報錯nohup: failed to run command ‘java’: No such file or directory
需要重啟才可以生效
#reboot
?
4.下載安裝ShardingSphere-Proxy
下載 :: ShardingSphere
下載地址:Apache Downloads
#cd /usr/local
#wget https://dlcdn.apache.org/shardingsphere/5.0.0/apache-shardingsphere-5.0.0-shardingsphere-proxy-bin.tar.gz
#tar -xzvf apache-shardingsphere-5.0.0-shardingsphere-proxy-bin.tar.gz
解壓好之后目錄結構如下:
conf是配置目錄,bin是啟動目錄,lib是庫目錄。
如果使用mysql需要把mysql對應的jar拷貝到這里。
#cd ./lib
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar?
5.下載安裝配置ShardingSphere-Proxy
回到conf目錄
修改2個文件其他文件暫時不用動
server.xml和config-sharding.yaml
需要注意的是ShardingSphere-Proxy其他版本例如4.0的配置和5.0有些許差異,特別是其他博文是4.0的例子,不能直接拿來就用,會啟動報錯。
5.0的配置默認都給你注釋了,你就用官方給你的就行。
server.xml
rules:- !AUTHORITYusers:- root@%:root- sharding@:shardingprovider:type: ALL_PRIVILEGES_PERMITTED- !TRANSACTIONdefaultType: XAproviderType: Atomikosprops:max.connections.size.per.query: 1acceptor.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: LOCALproxy.opentracing.enabled: falseproxy.hint.enabled: falsequery.with.cipher.column: true# 這個屬性會打印sql 語句sql.show: true
# 該屬性會允許范圍查詢,默認為 false ,要是我們分庫分表是水平切分,可以想得到范圍查詢會像廣播去查每一個表,比較耗性能能。allow.range.query.with.inline.sharding: true
例如你有2個完全一樣的庫,你有2個商戶,各自的數據進各自的庫。
schemaName: sharding_dbdataSources:his95001:url: jdbc:mysql://localhost:3306/order1001?useUnicode=true&characterEncoding=utf8username: rootpassword: rootconnectionTimeoutMilliseconds: 30000idleTimeoutMilliseconds: 60000maxLifetimeMilliseconds: 1800000maxPoolSize: 50minPoolSize: 1his95002:url: jdbc:mysql://localhost:3306/order1002?useUnicode=true&characterEncoding=utf8username: rootpassword: rootconnectionTimeoutMilliseconds: 30000idleTimeoutMilliseconds: 60000maxLifetimeMilliseconds: 1800000maxPoolSize: 50minPoolSize: 1rules:
- !SHARDINGtables:tb_order:actualDataNodes: order1001.tb_order,order1002.tb_ordertb_content:actualDataNodes: order1001.tb_content,order1002.tb_contentdefaultDatabaseStrategy:standard:shardingColumn: tenantidshardingAlgorithmName: database_inlineshardingAlgorithms:database_inline:type: INLINEprops:algorithm-expression: order${tenantid}
需要注意的是數據庫名是? 前綴+租戶id? 不可以有下劃線橫線之類,記得之前的4.0版本會出錯,還有數據庫密碼不能保護#,其他特殊字符我沒注意,如果報錯數據庫連不上也是這些問題。
啟動文件在bin目錄
默認是啟動3307端口,你可以修改為你需要的端口日志位置,如果JVM需要調休可以修改對應配置。
?#./bin/start.sh
需要看日志,如果有異常,一開始主要是配置異常那么你要適當的去修改。
#cat ./stdout.log
例如下面是缺少mysql-connector-java-5.1.49.jar?
?成功啟動會提示:frontend.ShardingSphereProxy - ShardingSphere-Proxy start success
6.使用ShardingSphere-Proxy
啟動好之后可以使用navicat.exe測試連接。
我們可以看到現在我們鏈家我們搭建的ShardingSphere-Proxy的服務器所在的ip+3007端口可以看到代理的數據庫了。
如果你點開其中一個表可以看到數據是聚合的。
實際上你的SQL需要帶對應的租戶id就路由到對應的數據庫了。
7.安裝Zookeeper
https://linuxstyle.blog.csdn.net/article/details/122367289
修改server.yaml? 去掉注釋就行了
#mode:
# type: Cluster
# repository:
# type: ZooKeeper
# props:
# namespace: governance_ds
# server-lists: localhost:2181
# retryIntervalMilliseconds: 500
# timeToLiveSeconds: 60
# maxRetries: 3
# operationTimeoutMilliseconds: 500
# overwrite: true
8.最佳實踐
sharding-jdbc分表查詢優(yōu)化:maxConnectionsSizePerQuery
sharding-jdbc配置maxConnectionsSizePerQuery當存在分表,且查詢語句不包含分表鍵時,每個查詢都需要分解成不同的分表sql查詢數據庫,能夠同時執(zhí)行的sql數量由此參數設置;
這個數據最好=你的分表數量
sharding-jdbc分表查詢優(yōu)化:maxConnectionsSizePerQuery_臨地的博客-CSDN博客_max.connections.size.per.query
總結
以上是生活随笔為你收集整理的ShardingSphere-Proxy分库分表以及多租户安装使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 油麦菜可以煲猪脚粥吗
- 下一篇: android 图片水印处理 文字倾斜处