定位為透明化的數(shù)據(jù)庫代理端潘拱,提供封裝了數(shù)據(jù)庫二進制協(xié)議的服務(wù)端版本,用于完成對異構(gòu)語言的支持拧略。 目前先提供MySQL/PostgreSQL版本芦岂,它可以使用任何兼容MySQL/PostgreSQL協(xié)議的訪問客戶端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作數(shù)據(jù),對DBA更加友好垫蛆。
- 向應(yīng)用程序完全透明禽最,可直接當(dāng)做MySQL/PostgreSQL使用。
- 適用于任何兼容MySQL/PostgreSQL協(xié)議的的客戶端袱饭。
1.下載Sharding-Proxy中間件
https://shardingsphere.apache.org/document/legacy/4.x/document/cn/downloads/
完成下載后直接解壓文件夾川无,需要操作主要文件夾為conf中的配置文件
主要操作配置文件為這兩個,讀寫分離部分暫不涉及宁赤,
config-sharding.yaml 主要用來配置邏輯庫舀透,分表規(guī)則
server.yaml 用于配置代理信息
config-sharding.yaml內(nèi)容
broadcastTables字段可配置廣播表,用于不做分頁的表决左,使用此字段前需配置defaultDataSourceName默認(rèn)庫
dataSources: #數(shù)據(jù)源配置愕够,可配置多個data_source_name
<data_source_name>: #<!!數(shù)據(jù)庫連接池實現(xiàn)類> `!!`表示實例化該類
driverClassName: #數(shù)據(jù)庫驅(qū)動類名
url: #數(shù)據(jù)庫url連接
username: #數(shù)據(jù)庫用戶名
password: #數(shù)據(jù)庫密碼
# ... 數(shù)據(jù)庫連接池的其它屬性
shardingRule:
tables: #數(shù)據(jù)分片規(guī)則配置,可配置多個logic_table_name
<logic_table_name>: #邏輯表名稱
actualDataNodes: #由數(shù)據(jù)源名 + 表名組成佛猛,以小數(shù)點分隔惑芭。多個表以逗號分隔,支持inline表達式继找。缺省表示使用已知數(shù)據(jù)源與邏輯表名稱生成數(shù)據(jù)節(jié)點遂跟,用于廣播表(即每個庫中都需要一個同樣的表用于關(guān)聯(lián)查詢,多為字典表)或只分庫不分表且所有庫的表結(jié)構(gòu)完全一致的情況
databaseStrategy: #分庫策略婴渡,缺省表示使用默認(rèn)分庫策略幻锁,以下的分片策略只能選其一
standard: #用于單分片鍵的標(biāo)準(zhǔn)分片場景
shardingColumn: #分片列名稱
preciseAlgorithmClassName: #精確分片算法類名稱,用于=和IN边臼。哄尔。該類需實現(xiàn)PreciseShardingAlgorithm接口并提供無參數(shù)的構(gòu)造器
rangeAlgorithmClassName: #范圍分片算法類名稱,用于BETWEEN柠并,可選岭接。。該類需實現(xiàn)RangeShardingAlgorithm接口并提供無參數(shù)的構(gòu)造器
complex: #用于多分片鍵的復(fù)合分片場景
shardingColumns: #分片列名稱臼予,多個列以逗號分隔
algorithmClassName: #復(fù)合分片算法類名稱鸣戴。該類需實現(xiàn)ComplexKeysShardingAlgorithm接口并提供無參數(shù)的構(gòu)造器
inline: #行表達式分片策略
shardingColumn: #分片列名稱
algorithmInlineExpression: #分片算法行表達式,需符合groovy語法
hint: #Hint分片策略
algorithmClassName: #Hint分片算法類名稱粘拾。該類需實現(xiàn)HintShardingAlgorithm接口并提供無參數(shù)的構(gòu)造器
none: #不分片
tableStrategy: #分表策略窄锅,同分庫策略
keyGenerator:
column: #自增列名稱,缺省表示不使用自增主鍵生成器
type: #自增列值生成器類型半哟,缺省表示使用默認(rèn)自增列值生成器酬滤∏┎停可使用用戶自定義的列值生成器或選擇內(nèi)置類型:SNOWFLAKE/UUID
props: #屬性配置, 注意:使用SNOWFLAKE算法寓涨,需要配置worker.id與max.tolerate.time.difference.milliseconds屬性盯串。若使用此算法生成值作分片值,建議配置max.vibration.offset屬性
<property-name>: 屬性名稱
bindingTables: #綁定表規(guī)則列表
- <logic_table_name1, logic_table_name2, ...>
- <logic_table_name3, logic_table_name4, ...>
- <logic_table_name_x, logic_table_name_y, ...>
broadcastTables: #廣播表規(guī)則列表
- table_name1
- table_name2
- table_name_x
defaultDataSourceName: #未配置分片規(guī)則的表將通過默認(rèn)數(shù)據(jù)源定位
defaultDatabaseStrategy: #默認(rèn)數(shù)據(jù)庫分片策略戒良,同分庫策略
defaultTableStrategy: #默認(rèn)表分片策略体捏,同分庫策略
defaultKeyGenerator: #默認(rèn)的主鍵生成算法 如果沒有設(shè)置,默認(rèn)為SNOWFLAKE算法
type: #默認(rèn)自增列值生成器類型,缺省將使用org.apache.shardingsphere.core.keygen.generator.impl.SnowflakeKeyGenerator糯崎〖哥裕可使用用戶自定義的列值生成器或選擇內(nèi)置類型:SNOWFLAKE/UUID
props:
<property-name>: #自增列值生成器屬性配置, 比如SNOWFLAKE算法的worker.id與max.tolerate.time.difference.milliseconds
masterSlaveRules: #讀寫分離規(guī)則,詳見讀寫分離部分
<data_source_name>: #數(shù)據(jù)源名稱沃呢,需要與真實數(shù)據(jù)源匹配年栓,可配置多個data_source_name
masterDataSourceName: #詳見讀寫分離部分
slaveDataSourceNames: #詳見讀寫分離部分
loadBalanceAlgorithmType: #詳見讀寫分離部分
props: #讀寫分離負(fù)載算法的屬性配置
<property-name>: #屬性值
props: #屬性配置
sql.show: #是否開啟SQL顯示,默認(rèn)值: false
executor.size: #工作線程數(shù)量薄霜,默認(rèn)值: CPU核數(shù)
max.connections.size.per.query: # 每個查詢可以打開的最大連接數(shù)量,默認(rèn)為1
check.table.metadata.enabled: #是否在啟動時檢查分表元數(shù)據(jù)一致性某抓,默認(rèn)值: false
server.yaml內(nèi)容
#權(quán)限驗證
#用于執(zhí)行登錄Sharding Proxy的權(quán)限驗證。配置用戶名惰瓜、密碼否副、可訪問的數(shù)據(jù)庫后,必須使用正確的用戶名崎坊、密碼才可登錄Proxy备禀。
authentication:
users:
root: # 自定義用戶名
password: root # 自定義用戶名
sharding: # 自定義用戶名
password: sharding #自定義用戶名
authorizedSchemas: sharding_db 該用戶授權(quán)可訪問的數(shù)據(jù)庫,多個用逗號分隔奈揍。缺省將擁有root權(quán)限曲尸,可訪問全部數(shù)據(jù)庫。
props:
# max.connections.size.per.query: 1
# acceptor.size: 16 #用于設(shè)置接收客戶端請求的工作線程個數(shù)男翰,默認(rèn)為CPU核數(shù)*2
executor.size: 16 # Infinite by default.
# proxy.frontend.flush.threshold: 128 # 對于單個大查詢,每多少個網(wǎng)絡(luò)包返回一次
# # 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 #默認(rèn)為LOCAL事務(wù)另患,允許LOCAL,XA奏篙,BASE三個值柴淘,XA采用Atomikos作為事務(wù)管理器,BASE類型需要拷貝實現(xiàn)ShardingTransactionManager的接口的jar包至lib目錄中
# proxy.opentracing.enabled: false #是否開啟鏈路追蹤功能秘通,默認(rèn)為不開啟为严。詳情請參見[鏈路追蹤](/cn/features/orchestration/apm/)
# query.with.cipher.column: true
sql.show: false #控制臺打印SQL
使用mysql數(shù)據(jù)庫需要在lib文件夾下放進mysql的jar包
此jar包最好匹配使用mysql的版本,否則容易報錯
完成配置后肺稀,運行bin下的start.bat文件啟動
成功結(jié)果