mysql的擴充套件與高可用

2021-10-08 11:13:39 字數 3075 閱讀 8748

當應用規模越來越大時,資料往往是應用的瓶頸。如何正確的架構來擴充套件mysql成了系統好壞的關鍵。

傳統的解決方法有以下幾種:

幾種典型的分片規則包括:

按照使用者 id 求模,將資料分散到不同的資料庫,具有相同資料使用者的資料都被分散到乙個庫中;

按照日期,將不同月甚至日的資料分散到不同的庫中;

按照某個特定的字段求摸,或者根據特定範圍段分散到不同的庫中。

集群 (複製)

通過《mysql的複製及備份》實現mysql拓撲結構來負載均衡.

幾種常見負載均衡的方法包括:

讀寫分離,即將特定的流量指向不同的機子

隨機演算法

輪循hash一致性

最少活躍數(通過響應時間,請求數判斷,dubbo中有用)

。。。

高可用意味著更少的「宕機」時間。100%的可用性是不可能達到的。可用性的「9」規則是表示可用性目標最普遍的方法。「5個9」表示99.999%的正常可用時間。換句話說,每年只允許5min的宕機時間。

宕機原因

實現高可用性

首先,可以嘗試避免導致宕機的原因來減少宕機時間。第二,盡量保證發生宕機時能盡快恢復。最常見的策略是在系統中製造冗餘,並且具備故障轉移能力。

解決mysql擴充套件與高可用的可能自己設計通過專案管理多個資料來源的形式,但通過中單件的方式顯的更優雅高效。這裡主要講的是mycat解決方式。

mycat原理

mycat 的原理中最重要的乙個動詞是「攔截」,它攔截了使用者傳送過來的 sql 語句,首先對 sql 語句做了 一些特定的分析:如分片分析、路由分析、讀寫分離分析、快取分析等,然後將此 sql 發往後端的真實資料庫, 並將返回的結果做適當的處理,最終再返回給使用者。

mycat架構

mycat 是乙個開源的分布式資料庫系統,但是由於真正的資料庫需要儲存引擎,而mycat並沒有儲存引擎,所以並不是完全意義的分布式資料庫系統。

其通過以下配置與真正的儲存引摯聯絡:

# 邏輯庫

"testdb" checksqlschema=

"true" sqlmaxlimit=

"100"

>

#邏輯表,使用rule1規則進行分片,對應後面節點為 dn1,dn2

"t_node" datanode=

"dn1,dn2" rule=

"rule1" />

#dn1,dn2節點的真實配置分別指向localhost1虛擬資料庫的db1,db2

"dn1" datahost=

"localhost1" database=

"db1" />

"dn2" datahost=

"localhost1" database=

"db2" />

#虛擬localhost1對應真實資料庫配置

"localhost1" dbtype=

"mysql"

>

#心跳檢測配置

select user(

)#真實機子資訊

"hostm1" url=

"localhost:3306" user=

"root"

password=

"123456"

>

擴充套件與高可用的實現

"localhost1" dbtype=

"mysql"

>

select user(

)#寫主機為hostm1

"hostm1"

>

#讀主機為hosts1

"hosts1" />

"localhost1" dbtype=

"mysql"

>

select user(

)#寫主機為hostm1,如果hostm1掛了,會切換成hosts1

"hostm1"

>

"hosts1"

>

#以取模規則為例子
#id%3 == 0 dn1

#id%3 == 1 dn2

#id%3 == 2 dn1

"t_node" datanode=

"dn1,dn2" rule=

"mod-long" />

#取模規則,讓id進行取模操作

"mod-long"

>

idmod-long

##取模演算法

"mod-long" class=

"io.mycat.route.function.partitionbymod"

>

#取模演算法的總分片數

"count"

>3

mycat總結

遵守mysql原生協議,跨語言,跨資料庫的通用中介軟體**。

基於心跳c的自動故障切換,支援讀寫分離,支援 mysql

一雙主多從,以及一主多從 有效管理資料來源連線,基於資料分庫,而不是分表的模式。

基於 nio 實現,有效管理執行緒,高併發問題。

支援資料的多片自動路由與聚合,支援 sum , count , max 等常用的聚合函式。

支援2表 join,甚至基於 caltlet的多表 join。

支援通過全域性表,er 關係的分片策略,實現了高效的多表 join 查詢。

支援多租戶方案。 支援分布式事務(弱xa)

支援全域性序列號,解決分布式下的主鍵生成問題。

分片規則豐富,外掛程式化開發,易於擴充套件。

強大的 web,命令列監控。

支援前端作為 mysql 通用**,後端 jdbc 方式支援 oracle、db2、sql server 、 mongodb 、巨杉。

《高效能mysql》

《mycat權威指南》

canal與mysql高可用 CANAL 高可用

canal 是阿里巴巴mysql資料庫binlog的增量訂閱 消費元件,你可以從這兒了解它.canal 的常見使用場景之一就是資料同步,例如我們使用 canal 就是為了把 mysql 的資料同步到 elasticsearch 中.使用 canal 做資料同步的時候無疑會涉及到三個部分 資料來源 m...

高併發與高可用

事發事中 事後高併發 增加處理人手 事前 副本 隔離 配額 提前預案 探知 事發 監控 報警 事中 降級 回滾 應急預案,fail 系列 事後 覆盤 思考 技改 fail 系列 當出現下游呼叫失敗時,我們一般有幾種處理方式 failretry,即失敗重試,需要配合退避時間,否則馬上重試不一定會有效果...

mysql高可用與redis快取簡記

看到有人討論redis與mysql一致性的問題,思考一下。單主一從或多從,相對單節點來說,優點 缺點也很明顯 要做到秒級容災切換,雙主是個很好的選擇,也可以附加多從,做到讀寫分離。但雙主無法迴避的乙個問題是資料的一致性,也就引出了雙主的不同用法。1.3.1 雙主單寫 其中乙個主節點只做高可用容災備份...