MySql架構設計

在MySql中,當數據量大的時候,一般選擇方案:

1.    分庫

    (1)可以按照業務需求來垂直分庫。

2.    讀寫分離,

    (1)可以將從庫中分出一臺來做特殊業務查詢。例如供開發人員查詢問題、報表查詢等等。

3.    分表

    (1)最後使用,可以按照更細微的業務來分表。

MySql讀寫分離實現機制方法:

1.    基於程序實現 一般不用

2.    基於MySql自帶主從同步機制

MySql的主從同步機制實現原理:當主庫有sql過來的時候,會進行兩個操作:

1.    更新data數據

2.    將數據放在binlogs中。 所以MySql要實現主從同步,第一步需要開啓binlog文件。所有提交語句都會提交到這來。binlogs記錄了所有關於修改、數據變動的sql語句。。

從數據庫會有兩個Thread.

1.    用I\O Thread來定時同步主數據庫的binlogs文件,將sql放在從庫的relay binlogs文件。

2.    用SQL Thread取出sql 語句並執行, 將數據寫入從庫的data中。


出現的風險:

1.    數據一致性問題。當兩個庫間通信突然中斷,會導致數據出現不一致問題。

解決方案:MySql提供了半同步方式。如果在Master配置半同步, 當數據過來時候,主庫不會立刻寫入data,而會等待。從庫從主庫binlog中拿到數據,會通知主庫binlog已經取到數據,那binlog在通知data來修改主庫。

帶來的後果:

        一.    影響MySql寫入性能。 根據公司業務場景,來做平衡。如果對數據要求很嚴格,推薦半同步。

       二.    當從庫很多,需要很久來等待從庫返回信息給binlog。  那MySql允許設置保護機制,設置等待時間,例如1秒(一般 設置),data直接寫入。binlog只要檢測到一個從庫同步成功,就會通知data,不需要等所有從庫同步完成。

2.    從庫執行SQL Thread失敗。

解決方案:從庫會拋出異常,直到解決該sql異常。

3.    延遲問題。

解決方案:延遲問題一般出現在I/O Thread跟SQL Thread,可以配置多個線程。提高CPU.

binlog用途之二:用於恢復數據庫。

如何設置讀寫架構:

用Atlas代理來區分讀寫分離。App--->Altas---->寫操作---->Master  MySql

                                                                    ----->讀操作---->Slave MySql

Altas只會有I/O的限制。但目前來說無壓力。

實施流程:

1. 修改Master配置my.cnf

2. 修改slave配置:a. my.cnf   b.配置master地址、端口、密碼

3.安裝atlas

4.配置atlas

配置Master步驟:1.修改server id。 2.修改my.cnf





發佈了33 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章