goodrain雲平臺 mysql主從同步應用建立

mysql 主從同步原理

1)在Slave 服務器上執行sart slave命令開啓主從複製開關,開始進行主從複製。mysql

2)此時,Slave服務器的IO線程會經過在master上已經受權的複製用戶權限請求鏈接master服務器,並請求從執行binlog日誌文件的指定位置(日誌文件名和位置就是在配置主從複製服務時執行change master命令指定的)以後開始發送binlog日誌內容。git

3)Master服務器接收到來自Slave服務器的IO線程的請求後,其上負責複製的IO線程會根據Slave服務器的IO線程請求的信息分批讀取指定binlog日誌文件指定位置以後的binlog日誌信息,而後返回給Slave端的IO線程。返回的信息中除了binlog日誌內容外,還有在Master服務器端記錄的IO線程。返回的信息中除了binlog中的下一個指定更新位置。github

4)當Slave服務器的IO線程獲取到Master服務器上IO線程發送的日誌內容、日誌文件及位置點後,會將binlog日誌內容依次寫到Slave端自身的Relay Log(即中繼日誌)文件(Mysql-relay-bin.xxx)的最末端,並將新的binlog文件名和位置記錄到master-info文件中,以便下一次讀取master端新binlog日誌時能告訴Master服務器重新binlog日誌的指定文件及位置開始讀取新的binlog日誌內容。sql

5)Slave服務器端的SQL線程會實時檢測本地Relay Log 中IO線程新增的日誌內容,而後及時把Relay LOG 文件中的內容解析成sql語句,並在自身Slave服務器上按解析SQL語句的位置順序執行應用這樣sql語句,並在relay-log.info中記錄當前應用中繼日誌的文件名和位置點。docker

goodrain雲平臺整合mysql集羣

1. 實現步驟

  1. 構建mysql鏡像;
  2. 構建集羣鏡像,發佈雲市場;
  3. 利用雲市場鏡像構建mysql集羣。
1. 構建mysql鏡像(支持主從同步),目前github(https://github.com/goodrain-apps/percona-mysql)上已將代碼更新, 設計到的修改主要有如下幾點:
  1. master節點和slave節點的uuid不一樣。
    用同一mysql鏡像建立mysql主從同步集羣時,發現每臺mysql服務的uuid都是相同的,是由於在數據初始化時將uuid寫在了/var/lib/mysql/auto.cnf文件中,這時候須要在mysql啓動生成配置文件後修改此文件的uuid,確保每一個mysql服務的uuid不相同便可。

解決:克隆代碼,修改配置文件服務器

  1. master節點和slave節點的server_id不一樣。

如何確保每一個mysql服務的server_id不一樣,k8s在建立容器時,會爲每一個容器建立建立一個主機名( 如:gr78648d-0),建立多個容器後面的數字會依次遞增,因此能夠利用這一特性生成不一樣的server_id(主機名數字部分 + 環境變量數字),而後在maser和slave使用不一樣的環境變量數字數字便可。app

  1. 建立鏡像,並將鏡像推到dockerhub上

2. 構建集羣鏡像,發佈雲市場。
  1. 建立master應用

配置--》環境變量
ui

  1. 建立slave應用

  1. 設置slave依賴master

  1. 建立兩臺slave

  1. 發佈到雲市場(實例爲發送到團隊中)

3. 利用雲市場鏡像構建mysql集羣。
  1. 建立容器

  1. 進入master查看bin_log 詳情

  1. 進入slave 設置鏈接
相關文章
相關標籤/搜索