mysql 架構篇系列 4 複製架構一主一從搭建(半同步複製)

来源:https://www.cnblogs.com/MrHSR/archive/2018/11/09/9929914.html
-Advertisement-
Play Games

一.概述 在mysql 5.5之前,mysql 的複製是非同步操作,主庫和從庫的數據之間存在一定的延時,這樣存在一個隱患:當主庫上寫入一個事務並提交成功,而從庫尚未得到主庫推送的Binlog日誌時,主庫down機了,事務Binlog丟失了,此時從庫就缺失了這個事務,從而造成主從不一致。 為瞭解決這個問 ...


一.概述

  在mysql 5.5之前,mysql 的複製是非同步操作,主庫和從庫的數據之間存在一定的延時,這樣存在一個隱患:當主庫上寫入一個事務並提交成功,而從庫尚未得到主庫推送的Binlog日誌時,主庫down機了,事務Binlog丟失了,此時從庫就缺失了這個事務,從而造成主從不一致。 

  為瞭解決這個問題,mysql5.5 引入了半同步複製,在mysql 5.5之前的非同步複製時,主庫執行完Commit提交操作後,在主庫寫入Binlog日誌後即可成功返回客戶端,無需等待Binlog日誌傳送給從庫,非同步複製流程如下圖所示:

   對於半同步複製,能保證主庫上的每一個Binlog事務都能被可靠的複製到從庫上,主庫在每次事務成功提交時,並不及時反饋給前端應用用戶,而是等待其中一個從庫也接收到Binlog事務併成功寫入中繼日誌後,主庫才返回Commit操作成功給客戶端。 半同步複製保證了事務成功提交後,至少有兩份日誌記錄,一份在主庫的Binlog日誌上,另一份在至少 一個從庫的中繼日誌relay log上,從而更進一步保證的主從數據的一致性。半同步複製流程如下圖所示:

   

  在半同步複製模式下,假設步驟(1,2,3)的任何一個步驟中主庫宕機,則事務並沒有提交成功,從庫也沒收到事務binlog日誌,所以主從數據是一致的。假如步驟(4)傳送Binlog日誌到從庫時,從庫宕機或者網路故障,導致binlog並沒有及時傳送到從庫上,此時主庫上的事務會等待一段時間(由參數rp1_semi_sync_master_timeout毫秒決定), 如果binlog在這段時間內都無法成功推送到從庫上,則mysql自動調整複製為非同步複製模式。事務正常返回提交結果給客戶端。

 

二. 半同步(Semi-sync)複製配置步驟

  下麵半同步複製的配置步驟是基於前面第二篇 "一主一從搭建(非同步複製)" 基礎之上。半同步模式作為mysql5.5的一個插件來實現的,主庫和從庫使用不同的插件,需要安裝

  (1)判斷mysql伺服器是否支持動態增加插件

SELECT  @@have_dynamic_loading

      

  (2) 檢查mysql的安裝目錄下是否存在插件,主庫插件是semisync_master.so,從庫插件是semisync_slave.so。

-- 主庫插件位置:
SHOW VARIABLES LIKE 'plugin_dir';

      

-- 從庫插件位置
SHOW VARIABLES LIKE 'plugin_dir';

      

--在主庫上安裝插件 semisync_master.so,安裝完從plugin表查看
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'
SELECT * FROM mysql.`plugin`

      

--在從庫上安裝插件 semisync_slave.so ,安裝完從plugin表查看
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'
SELECT * FROM mysql.`plugin`

      

  (3) 需要分別在主庫和從庫上配置參數打開半同步semi-sync, 預設半同步設置是打不開的,主庫上配置全局參數。

-- 主庫上配置啟用。設置主庫傳送到從庫的Binlog日誌,最大超時時間。
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=3000;
-- 從庫上
SET GLOBAL rpl_semi_sync_slave_enabled=1;

      註意之前配置的複製是非同步複製,所以需要重啟一下從庫上的I/O線程。

-- 從庫停掉I/O 線程,再啟動
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

  (4) 同半步配置完畢後,下麵驗證一下

-- 主庫上查看當前半同步複製的一些狀態值
SHOW STATUS LIKE '%semi_sync%'

      
  在上面的狀態信息中,重點先來瞭解3個狀態值:

     Rpl_semi_sync_master_status: 值為ON, 代表半同步複製目前處於打開狀態。

     Rpl_semi_sync_master_yes_tx: 值表示主庫當前有多少事務是通過半同步複製到從庫的。

     Rpl_semi_sync_master_no_tx: 值表示當前事務不是半同步下從庫及時響應的(主從不同步時體現)。

-- 在主庫上執行一個事務,再檢查主庫複製狀態
UPDATE testbackup2 SET `name`='小李2' WHERE id=12

      

    如上圖所示,此時Rpl_semi_sync_master_yes_tx的值計數增加1,在查從庫時剛修改的數據已同步。

 

三. 半同步複製參數信息說明

  3.1 主庫上semi_sync狀態信息(SHOW STATUS LIKE '%semi_sync%')

狀態名稱

狀態值

描述

Rpl_semi_sync_master_clients

1

有多少個Semi-sync(半同步)的從庫

Rpl_semi_sync_master_net_avg_wait_time

0

事務提交後,等待slave響應的平均時間

Rpl_semi_sync_master_net_wait_time

0

總的網路等待時間 (等待slave)

Rpl_semi_sync_master_net_waits

2

等待網路響應的總次數 (等待slave)

Rpl_semi_sync_master_no_times

0

一共有幾次從Semi-sync跌回普通狀態, 通俗叫:關閉半同步複製的次數

Rpl_semi_sync_master_no_tx

0

slave未及時響應的事務數

Rpl_semi_sync_master_status

ON

主庫上Semi-sync是否正常開啟

Rpl_semi_sync_master_timefunc_failures

0

時間函數未正常工作的次數

Rpl_semi_sync_master_tx_avg_wait_time

1222

開啟Semi-sync,事務返回需要等待的平均時間

Rpl_semi_sync_master_tx_wait_time

2445

事務等待備庫響應的總時間

Rpl_semi_sync_master_tx_waits

2

事務等待備庫響應的總次數

Rpl_semi_sync_master_wait_pos_backtraverse

0

改變當前等待最小二進位日誌的次數

Rpl_semi_sync_master_wait_sessions

0

當前有幾個線程在等備庫響應

Rpl_semi_sync_master_yes_tx

2

Semi-sync模式下,成功的事務數。也叫主庫成功接收到slave的回覆的次數。

  3.2 主庫上semi_sync環境信息(SHOW VARIABLES LIKE '%semi%')  

 

環境名稱

描述

rpl_semi_sync_master_enabled

ON

是否自動開啟半同步複製

rpl_semi_sync_master_timeout

3000

主庫傳送到從庫的Binlog日誌,最大超時時間

rpl_semi_sync_master_trace_level

32

用於開啟半同步複製模式時的調試級別,預設是32。

net wait level (more information about network waits)

rpl_semi_sync_master_wait_for_slave_count

1

至少有N個slave接收到日誌

rpl_semi_sync_master_wait_no_slave

ON

是否允許master 每個事物提交後都要等待slave的receipt信號。預設為on 

rpl_semi_sync_master_wait_point

AFTER_SYNC

控制 master 在哪個環節接收 slave ack,master 接收到 ack 後返回狀態給客戶端。
此參數一共有兩個選項 AFTER_SYNC(default) & AFTER_COMMIT。

  3.3 從庫上semi_sync環境信息(SHOW VARIABLES LIKE '%semi%';)

環境名稱

描述

rpl_semi_sync_slave_enabled

ON

從庫是否自動開啟半同步複製

rpl_semi_sync_slave_trace_level

32

同上

  3.4 從庫上semi_sync狀態信息(SHOW STATUS LIKE '%semi_sync%')

Rpl_semi_sync_slave_status

ON

從庫上Semi-sync是否正常開啟


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Hello! everybody! 記得大三,第一次上我們某主任的課(我是電腦學部的),某主任上課的第一件事,點名,第二件事,忽悠我們。 具體忽悠步驟如下: 某:”同學們,這裡有兩張圖片,大家看看這兩張圖片有什麼不同?“ 同學們:”呃!沒啥不同啊!“ 同學們:”這個顏色深點?呃,好像還是一樣啊!“ ...
  • 1. 喚醒搶占 當在try_to_wake_up/wake_up_process和wake_up_new_task中喚醒進程時, 內核使用全局check_preempt_curr看看是否進程可以搶占當前進程可以搶占當前運行的進程. 請註意該過程不涉及核心調度器. 每個調度器類都因應該實現一個chec ...
  • 一、Greenplum背景 時間回到2002年,互聯網行業經過近10年的發展,數據量正處於快速增長期: 1、傳統的主機計算模式在海量數據面前,除了造價昂貴外,在CPU計算和IO吞吐上不能滿足海量數據的計算需求; 2、傳統資料庫大多基於SMP架,縱向擴容(scale-up)模式遇到了瓶頸。 3、分散式 ...
  • 先安裝mysql 1. 通過tar -zxvf ....hive.tar.gz -C /soft 解壓安裝hive 3. cp hive-exec-log4j.properties.template hive-exec-log4j.properties 顯示日誌 ...
  • 任務一 創建資料庫和表 @[toc] |班級| 姓名 | | | | | 軟體工程16 9班 |洪燕妮 | 【實訓目的與要求】 1、安裝MySQL系統,瞭解MySQL環境; 2、利用MySQL命令行視窗創建資料庫及表; 3、利用界面工具創建資料庫及表; 4、完整性約束設計。 【實訓原理】 DBMS環 ...
  • 1 、下載mysql-8.0.13-x64 官方網站:https://dev.mysql.com/downloads/mysql/ 2、解壓到G盤 3、準備my.ini文件保存到解壓目錄 4、‘保存以下代碼成.bat腳本文件 5、cd到mysql解壓目錄,執行以上的.bat腳本,執行完以上步驟控制台 ...
  • 1.管理員身份運行cmd(系統win10) 2.輸入命令cd /d F:\mysql-5.7.19-win32\bin(此為mysql要安裝的目錄) 3.輸入安裝命令mysqld install 出現問題The service already exists 這是由於之前已經安裝過mysql並且沒有刪 ...
  • String類型: 設置鍵值對: set key value 設置鍵值對和過期時間:setex key seconds value ( 以秒為單位 ) 設置多個鍵值對: mset key1 value1 key2 value2 給已有鍵的值追加: append key value 獲取指定鍵的值: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...