概念
Sharding Sphere Proxy定位為透明化的數(shù)據(jù)庫(kù)代理端急凰,可實(shí)現(xiàn)橫向分表分庫(kù)、讀寫(xiě)分離吃粒,向應(yīng)用程序完全透明巧娱,可直接當(dāng)做 MySQL/PostgreSQL 服務(wù)端使用。
官網(wǎng):https://shardingsphere.apache.org/index_zh.html
Sharding讀寫(xiě)分離支持項(xiàng)
- 提供一主多從的讀寫(xiě)分離配置日缨,可獨(dú)立使用钱反,也可配合數(shù)據(jù)分片使用;
- 事務(wù)中的數(shù)據(jù)讀寫(xiě)均用主庫(kù)匣距;
- 基于 Hint 的強(qiáng)制主庫(kù)路由面哥。
Sharding讀寫(xiě)分離不支持項(xiàng)
- 主庫(kù)和從庫(kù)的數(shù)據(jù)同步(應(yīng)使用MySql本身的主從同步);
- 主庫(kù)和從庫(kù)的數(shù)據(jù)同步延遲導(dǎo)致的數(shù)據(jù)不一致毅待;
- 主庫(kù)多寫(xiě)尚卫;
- 主從庫(kù)間的事務(wù)一致性。主從模型中尸红,事務(wù)中的數(shù)據(jù)讀寫(xiě)均用主庫(kù)吱涉。
使用Docker搭建Sharding Sphere Proxy
前言
搭建基于Docker上的Sharding Sphere Proxy 很簡(jiǎn)單刹泄,大概分為以下幾步:
- 配置MySql JDBC驅(qū)動(dòng)
- 配置權(quán)限 和 運(yùn)行模式
- 配置邏輯數(shù)據(jù)庫(kù)(由Sharding Sphere Proxy虛擬的數(shù)據(jù)庫(kù))和物理數(shù)據(jù)庫(kù)
- 運(yùn)行Sharding Sphere Proxy Docker容器
配置MySql JDBC驅(qū)動(dòng)
- 新建一個(gè)文件夾用于存放插件,如:/home/sharding/ext-lib
- 下載MySql驅(qū)動(dòng)并放入插件目錄怎爵,地址:https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.11/mysql-connector-java-8.0.11.jar
配置權(quán)限
- 新建一個(gè)文件夾用于存放配置文件特石,如:/home/sharding/conf
- 新建文件 server.yaml,并寫(xiě)入以下內(nèi)容:
# 參考 鳖链,參考: https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-proxy/yaml-config/authentication/
# 運(yùn)行模式姆蘸,演示為了簡(jiǎn)單,使用內(nèi)存模式
mode:
type: Memory
# 建立邏輯數(shù)據(jù)庫(kù) 和 連接用戶名
rules:
- !AUTHORITY
users:
# 格式為: 用戶名@域名:密碼芙委,以下格式為 root 用戶的密碼為 root逞敷,并且所有主機(jī)可訪問(wèn),所有邏輯數(shù)據(jù)庫(kù)
- root@%:root
provider:
type: ALL_PRIVILEGES_PERMITTED
props:
sql-show: true
sql-simple: true
配置邏輯數(shù)據(jù)庫(kù) 和 物理數(shù)據(jù)庫(kù)
- 在上一步的配置文件夾中新建文件 config-test.yaml(可放置多個(gè)文件灌侣,代表多個(gè)邏輯庫(kù))推捐,并寫(xiě)入以下內(nèi)容:
# 配置邏輯數(shù)據(jù)庫(kù)名
schemaName: test
# 配置物理數(shù)據(jù)庫(kù)參數(shù)
dataSources:
# 主庫(kù),其中服務(wù)器名"master"應(yīng)該換成數(shù)據(jù)庫(kù)真實(shí)IP或域名
write_ds:
url: jdbc:mysql://master/test?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
username: root
password: root
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 100
minPoolSize: 1
# 從庫(kù)0侧啼,其中服務(wù)器名"slave"應(yīng)該換成數(shù)據(jù)庫(kù)真實(shí)IP或域名
read_ds_0:
url: jdbc:mysql://slave/test?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
username: root
password: root
connectionTimeoutMilliseconds: 30000
idleTimeoutMilliseconds: 60000
maxLifetimeMilliseconds: 1800000
maxPoolSize: 1000
minPoolSize: 1
# 從庫(kù)1
# read_ds_1:
# url: jdbc:mysql://slave2/test?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
# 配置主從規(guī)則
rules:
- !READWRITE_SPLITTING
dataSources:
pr_ds:
writeDataSourceName: write_ds
readDataSourceNames:
- read_ds_0
# - read_ds_1
啟動(dòng)Docker容器
# 啟動(dòng) Sharding Sphere Proxy 5.0.0
# 關(guān)鍵點(diǎn)1: 如果需要連接容器里的數(shù)據(jù)庫(kù)可使用--link牛柒,此處連接了另外兩個(gè)容器,如果不需要可去除參數(shù)
# 關(guān)鍵點(diǎn)2: Sharding Sphere Proxy 使用3308對(duì)外提供服務(wù),可直接當(dāng)做普通MySql服務(wù)器使用
# 注意!!: IDEA的數(shù)據(jù)庫(kù)插件連接Sharding Sphere Proxy服務(wù)有些小問(wèn)題痊乾,需要勾選 Advanced -> Introspect using JDBC metadata
docker run -d --restart=always --name mysql-proxy -v /home/sharding/conf:/opt/shardingsphere-proxy/conf -v /home/sharding/ext-lib:/opt/shardingsphere-proxy/ext-lib --link mysql-master:master --link mysql-slave:slave -e PORT=3306 -p3308:3306 apache/shardingsphere-proxy:5.0.0
結(jié)語(yǔ)
讀寫(xiě)分離的MySql搭建完成焰络,并且會(huì)根據(jù)事務(wù)自動(dòng)選擇主庫(kù)或從庫(kù),業(yè)務(wù)層幾乎0修改符喝,豈一個(gè)爽字了得闪彼!
參考: