BLACKHOLE的BINLOG實現

BlackHole :黑洞引擎,寫入的任何數據都會消失,用於記錄binlog做複製的中繼存儲!

是否支持BLACKHOLE引擎,通過查看SHOW ENGINES進行查看。

BlackHole的用途:

  • 用於binlog的備份

線上MySQLbinlog一般會保留3-5天,但是對比較重要的業務,binlog可能需要保留一個月甚至半年。線上服務器可沒有這麼大的空間,最多保留10天就會被purge掉。此時blackhole就有了用武之地。blackhole從庫+xtrabackup的定期熱備+binlogflashback,可以讓你的數據庫恢復到任意時刻。

  • 充當binlog     API,爲其他程序提供數據源

可作爲其他程序提供數據源的接口,如在BLACKHOLE獲取BINLOG分析把對應的數據插入到redis中。這種情況下blackhole從庫充當了天然的binlog API

  • IDC部署場景下,節省帶寬

如果一個主庫拖着20個從庫,主庫可能不堪重負,此時可以考慮給主庫增加一個blackhole從庫作爲中繼,雖然這種方案有諸多不靠譜的地方,但是如果這個主庫在北京,20個從庫在廣州,這種方案就有意義了:在廣州增加一個blackhole,讓blackhole下掛20個從庫,此時就可節省大量北京到廣州的帶寬。

。。。。。。

應用場景:

 主服務器的操作寫入二進制日誌,僞mysqld進程作爲從服務器,在僞mysqld進程上配置replicate-do和replicate-ignore規則,並且寫一個新的,被過濾的二進制日誌。這個已過濾日誌被提供給其他真正的從服務器。因爲僞進程不存儲任何數據,只消耗很小的額外的mysqld進程資源。這個類型的建立可以用額外複製從服務器來重複。

 當然如果配置一主多從的話,多個從服務器會在主服務器上分別開啓自己相對應的線程,執行binlog dump命令而且多個此類進程並不是共享的。爲了避免因多個從服務器同時請求同樣的事件而導致主機資源耗盡,可以單獨建立一個僞的從服務器或者叫分發服務器:

wKiom1iX31GzGkM1AAEHg-UqvGo794.png-wh_50

 

測試環境:

SERVER

IP

ROLE

Data_format

MASTER

192.168.15.2

主庫

RBR

BLACKHOLE

192.168.15.13

分發服務器

RBR

SLAVE

192.168.15.104

分發服務器的從庫

RBR

 

搭建過程:

1、在master 添加一個帳號作爲BLACKHOLE同步BINLOG使用

2、在BLACKHOLET添加一個帳號作爲SLAVE同步BINLOG使用

3、可以指定需要同步的庫表或者忽略某些表(replicate-doreplicate-ignore規則)

4、新環境搭建主從過程:

         1、實例啓動後對master執行show masterstatus 獲取到的BINLOG FIEL POS作爲BLACKHOLE的連接使用

         2、實例啓動後對BLACKHOLE執行show masterstatus 獲取到的BINLOG FIEL POS作爲SLAVE的連接使用

         3、在主庫添加DDL的時候,不要再次指定ENGINE,根據實例配置走即可,若再次指定引擎,到BLACKHOLE,同步的BINLOG的中的DDL語句沒法使用BLACKHOLE引擎,不符合黑洞引擎,寫入的任何數據都會消失這一說法,雖然也能同步,感覺爲線性級聯方式同步

         注意:在BLACKHOLE需要開啓log_slave_updatesBINLOG服務器才能作爲SLAVE的同步數據源

5、對於舊環境添加BLACKHOLE服務器:

         1、如果在DDL指定ENGINE話,到BLACKHOLE服務器存儲的表和主庫一致,不符合黑洞引擎,寫入的任何數據都會消失這一說法

       2、在導入舊數據的時候,需要修改導入數據表的引擎爲BLACKHOLE

       3、在BLACKHOLE連接着SLAVE時候,需要把SLAVE引擎改爲和主庫一致

       4、備份的數據不需要DDL語句,只要數據,在主庫導入即可,後期寫入的數據,即可通過BLACKHOLE同步快速同步到不同的SLAVE

最終結果圖:

主庫上的DDL:

wKioL1iX3-ayb52uAAAyYCVTDw0677.png-wh_50

BLACKHOLE的DDL:

wKioL1iX4ASTXv32AAAmWV8Us_8070.png-wh_50

SLAVE上的DDL

wKioL1iX4CKxDMd8AABCJqiNW3g633.png-wh_50

實驗現象:

         在測試1000W數據寫入的時候,BLACKHOLE同步MASTER的速度很快,

SLAVEIO線程同步BLACKHOLEBINLOG日誌速度也快,但SLAVESQL_THREAD線程的速度跟不上(MySQL版本爲5.6,或用5.7的多個線程可提高效率.數據獲取多次展示:

 

 

master binlog event File:mysql-bin.000006

                    Position:777525175

blackhole master event File:mysql-bin.000007

                       Position:129152031

BLACKHOLE SYNE:

                Master_Log_File:mysql-bin.000006

                Read_Master_Log_Pos: 776113906

                Relay_Log_File:relay-log.000010

                Relay_Log_Pos: 458099520

                Exec_Master_Log_Pos: 458099357

SLAVE SYNE:

                Master_Log_File:mysql-bin.000007

                Read_Master_Log_Pos: 129152031

                Relay_Log_File:relay-log.000017

                Relay_Log_Pos: 129007567

                Exec_Master_Log_Pos: 129007404

master binlog event File:mysql-bin.000006

                    Position:844042095

blackhole master event File:mysql-bin.000007

                       Position:152147724

BLACKHOLE SYNE:

                Master_Log_File:mysql-bin.000006

                Read_Master_Log_Pos: 843124455

                Relay_Log_File:relay-log.000010

                Relay_Log_Pos: 481091238

                Exec_Master_Log_Pos: 481091075

SLAVE SYNE:

                Master_Log_File:mysql-bin.000007

                Read_Master_Log_Pos: 152147724

                Relay_Log_File:relay-log.000017

                Relay_Log_Pos: 152147887

                Exec_Master_Log_Pos: 152147724

master binlog event File:mysql-bin.000006

                    Position:936876579

blackhole master event File:mysql-bin.000007

                       Position:199585380

BLACKHOLE SYNE:

                Master_Log_File:mysql-bin.000006

                Read_Master_Log_Pos: 936441390

                Relay_Log_File:relay-log.000010

                Relay_Log_Pos: 528520694

                Exec_Master_Log_Pos: 528520531

SLAVE SYNE:

                Master_Log_File: mysql-bin.000007

                Read_Master_Log_Pos: 199585380

                Relay_Log_File:relay-log.000017

                Relay_Log_Pos: 199585543

                Exec_Master_Log_Pos: 199585380

master binlog event File:mysql-bin.000007

                    Position:131443338

blackhole master event File:mysql-bin.000007

                       Position:444149637

BLACKHOLE SYNE:

                Master_Log_File:mysql-bin.000007

                Read_Master_Log_Pos: 131044087

                Relay_Log_File:relay-log.000010

                Relay_Log_Pos: 773042676

                Exec_Master_Log_Pos: 773042513

SLAVE SYNE:

                Master_Log_File:mysql-bin.000007

                Read_Master_Log_Pos: 444020772

                Relay_Log_File: relay-log.000017

                Relay_Log_Pos: 384708103

                Exec_Master_Log_Pos: 384707940

master binlog event File:mysql-bin.000007

                    Position:286312080

blackhole master event File:mysql-bin.000007

                      Position:679313139

BLACKHOLE SYNE:

                Master_Log_File:mysql-bin.000007

                Read_Master_Log_Pos: 286167931

                Relay_Log_File:relay-log.000010

                Relay_Log_Pos: 1008165528

                Exec_Master_Log_Pos: 1008165365

SLAVE SYNE:

                Master_Log_File:mysql-bin.000007

                Read_Master_Log_Pos: 679191406

                Relay_Log_File:relay-log.000017

                Relay_Log_Pos: 537578842

                Exec_Master_Log_Pos: 537578679

 

master binlog event File:mysql-bin.000008

                    Position:249583172

blackhole master event File:mysql-bin.000008

                       Position:469748616

BLACKHOLE SYNE:

                Master_Log_File:mysql-bin.000008

                Read_Master_Log_Pos: 249368601

                Relay_Log_File:relay-log.000013

                Relay_Log_Pos: 798058721

                Exec_Master_Log_Pos: 798058558

SLAVE SYNE:

                Master_Log_File:mysql-bin.000008

                Read_Master_Log_Pos: 469654916

                Relay_Log_File:relay-log.000020

                Relay_Log_Pos: 333076264

                Exec_Master_Log_Pos: 333076101

 

由此看出,在1000W 寫入的時候,MASTERBLACKHOLEIO_THREAD延遲不是很大,取決於BLACKHOLESQL_THREAD。需要注意的是,在主庫的添加DDL不能指定引擎名字,讓數據庫實例自行爲DDL添加引擎即可,否則在BLACKHOLE中也會和M一樣的引擎名字,這樣的結果是否能夠一樣的提高效率,有待驗證。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章