tidb的儲存用的tikv, tikv是基於rocksdb實現了分布式(可水平擴充套件,支援主從),rocksdb是對單機版leveldb的封裝。
tikv是開源的、分布式、支援事務的vk資料庫。
tikv不僅提供了kv的api,且提供了相容acid的api。
tikv用rust語言實現,用採用raft協議,作為tidb的儲存層,是乙個相容了mysql協議的分布式htap資料庫。
tikv保證資料一致性,tikv基於rust語言實現了raft協議,一致性狀態儲存在rocksdb中。
pd (placement drive):用來實現auto-sharding,自動化資料遷移。
tikv將資料按key劃分成大致相等的分割槽region,每個分割槽裡有n個副本(通常為3個),其中乙個副本是leader(提供讀寫服務)。
tikv用raft協議和pd來支援geo-replication(一種異地資料同步技術,它可以幾乎實時地把glusterfs的卷(volume)通過網路同步到異地)
通過pd和raft group,tikv可以水平擴充套件,可輕鬆擴充套件100+tb的資料。
tikv支援一致的分布式事務
與hbase一樣,tikv實現了coprocessor 框架來支援分布式計算
tikv可以和tidb一起配合來作為乙個可水平擴充套件的,支援一致性事務,可作為關係型資料庫和nosql的資料庫。
tikv提供了2中api:
1、raw:key-value api, 以單個key來保證原子性。
使用場景:不需要分布式事務 或 不需要 mvcc(multi-version concurrency control,多版本併發控制)
2、transactional:支援acid的key-value api , 以多個key為單位來保證原子性。
使用場景:需要分布式事務 或 mvcc
tikv基於rust語言,基於facebook rocksdb和raft.
設計靈感來自於google spanner和hbase。
placement driver用來對tikv做集群管理,他周期性地檢查複製約束來在node和region中balance資料和負載,這個過程叫做auto-sharding。
上面架構圖中的每個store其實就是rocksdb,他負責把資料儲存到本地磁碟。
region是key-value資料的基本單元,每個region中的資料會被複製到多個nodes上,即乙個raft group中有多個replicas。
tikv的node指集群中的乙個物理伺服器,可以是乙個虛機或容器。
在每個node上,可以由乙個或多個store。store中儲存的資料被劃分到多個region中,資料跨region存了多份通過raft協議同步。
當乙個node啟動後,node、store、region的metadata會記錄到placement driver中。即每個region和store的狀態資訊都記錄到了pd中。
tikv的事務模式提供:
tikv例項的資料分布式實現是通過raft協議。
TiKV 集群版本的安全遷移
在 tidb 的產品迭代中,不免會碰到一些相容性問題出現。通常協議上的相容性 protobuf 已經能幫我們處理的很好,在進行功能開發,效能優化時,通常會保證版本是向後相容的,但並不保證向前相容性,因此,當集群中同時有新舊版本節點存在時,舊版本不能相容新版本的特性,就有可能造成該節點崩潰,影響集群可...
Tidb進行縮減擴容tikv節點
這兩天接到任務說是要進行測試縮減機器給集群帶來的負面效果有哪些。然後我就按照官方的教程將機器進行了縮減,主要是縮減tikv節點 步驟都沒有什麼問題,就是進行到第二步的時候,一定要等到節點的狀態變成 tombstone 才可以正常下線。但在剛開始的時候,他的狀態一直是 offline 此時的狀態說明節...
TiKV 是如何訪問資料的(下)
上篇文章中,我們介紹了與 tikv 處理讀寫請求相關的基礎知識,下面將開始詳細的介紹 tikv 的讀寫流程。enjoy tikv 提供兩套 api,一套叫做 rawkv,另一套叫做 txnkv。txnkv 對應的就是上面提到的 percolator,而 rawkv 則不會對事務做任何保證,而且比 t...