keepalived mysql雙主架構圖_基于MySQL雙主的高可用解決方案理論及實踐

MySQL在互聯網應用中已經遍地開花,但是在銀行系統中,還在生根發芽的階段。本文記錄的是根據某生產系統實際需求,對數據庫高可用方案從需求、各高可用技術特點對比、實施、測試等過程進行整理,完善Mysql高可用方案,同時為后續開展分布式數據庫相關測試做相應準備。

7c606f64da3988b7b1f2ac595b9b555a.png

存儲復制技術:傳統IOE架構下,常用高可用方案,靠存儲底層復制技術實現數據的一致性,優點數據安全性有保障,限制在于是依賴存儲硬件,實施成本較高。

keepalived+雙主復制:兩臺MySQL互為主從關系,即雙主模式,通過Keepalived配置虛擬IP,實現當其中的一臺數據庫故障時,自動切換VIP到另外一臺MySQL數據庫,備機快速接管業務來保證數據庫的高可用。

MHAMHA部署在每臺mysql服務器上,定時探測集群中的master節點,當master出現故障時,它可以自動將最新的slave提升為新的master,然后將所有其他的slave重新指向新的master,優點在最大程度保證數據的一致性的前提下實現快速切換,最少需要3臺服務器,存在數據丟失的可能性。

PXC Percona eXtra Cluster是Percona基于galera cluster封裝的集群方案。不同于普通多主復制,PXC保障強一致性和實時同步,故障切換更快。但是也需要3個節點,配置相對復雜,對性能也稍有影響。

除了上述方案外,還有MMM、Heartbeat+DRBD等高可用方案,此處不做詳細介紹。

綜合評估下,本次實施采用了 keepalived+mysql雙主實現數據庫同城雙機房的高可用。MySQL版本為: 5.7.21。操作系統:Red Hat Enterprise Linux Server 7.3。

配置過程如下:

Mysql-master1: IP地址1???? --以下簡稱master1

Mysql-master2: IP地址2???? --以下簡稱master2

Mysql-vip :???? VIP地址???? --應用連接使用

Mysql復制相關概念描述:

1、 Mysql主從復制圖示:

bdcb1d24265c878a99cd2ad6b273145e.png

2、 Mysql主從復制過程描述:

(1)master記錄二進制日志:在每個事務更新數據完成之前,master在二進制日志記錄這些改變。MySQL將事務寫入二進制日志。在事務寫入二進制日志完成后,master通知存儲引擎提交事務。

(2)slave將master的binarylog拷貝到自己的中繼日志:首先,slave開始一個工作線程——I/O線程。I/O線程在master上打開一個普通的連接,然后開始binlog dump process。Binlog dump process從master的二進制日志中讀取事務,如果已經同步了master,它會睡眠并等待master產生新的事件。I/O線程將這些事務寫入中繼日志。

(3)SQL slave thread處理該過程的最后一步:SQL線程從中繼日志讀取事務,并重放其中的事務而更新slave的數據,使其與master中的數據一致。只要該線程與I/O線程保持一致,中繼日志通常會位于OS的緩存中,所以中繼日志的開銷很小。

主主同步就是兩臺機器互為主的關系,在任何一臺機器上寫入都會同步至備端。

為了便于后續數據庫服務器的擴展,且在整個復制環境中能夠自動地切換,降低運維成本,引入了當前主流的基于Mysql GTID的復制特性,工作原理及優缺點簡介如下。

3、 GTID工作原理簡介:

(1)??? master更新數據時,會在事務前產生GTID,一同記錄到Binlog日志中。

(2)??? slave的I/O線程將變更的binlog寫入到本地的relay log中。

(3)??? slave的sql線程從relay log中獲取GTID,然后對比slave端的binlog是否有記錄。

(4)??? 如果有記錄說明該GTID的事務已經執行,slave會忽略。

(5)??? 如果沒有記錄,slave就會從relay log中執行該GTID的事務,并記錄到binlog。

(6)??? 在解析的過程中會判斷是否有主鍵,如果有就用索引,如果沒有就用全部掃描。

4、 ?GTID優點:

(1)? 一個事務對應一個唯一的ID,一個GTID在一個服務器上? ? ? ? ? 只會執行一次。(2)? GTID是用來替代傳統復制的方法,GTID復制與普通復制模式的最大不同就是不需要指定二進制文件名和位置。

(3)??? 減少手工干預和降低服務故障時間,當主機宕機之后會通過軟件從眾多的備機中提升一臺備機為新的master。

5、 ?GTID也存在一些限制:

(1)??? 不支持非事務引擎。

(2)??? 不支持create table … select 語句復制(主庫直接報錯)。

(3)??? 不允許一個sql同時更新一個事務引擎表和非事務引擎表。

(4)??? 在一個復制組中,必須要求統一開啟GTID或者是統一關閉GTID。

(5)??? 開啟GTID需要重啟(5.7版本除外)。

(6)??? 開啟GTID后,就不再使用原理的傳統復制方式。

(7)??? 不支持create temporary table 和 drop temporary table語句。

(8)??? 不支持sql_slave_skip_counter。

28ec296da04fb79f9bf25bf926fd1f26.png

  • 一、配置兩臺mysql主主同步模式:

前置條件:

主備兩個節點使用行內統一的安裝部署腳本安裝mysql5.7.21介質(略)

Master1端創建應用的數據庫(略)

1、 修改MySQL配置文件

參考相關配置規范,分別設置master1、master2的my.cnf文件,

其中server-id參數設置為不同值;

由于后續keepalived會掛起VIP,應用通過VIP連接數據庫,為了避免應用程序無法通過VIP訪問,需將兩個節點的bind-address參數注釋掉;

2、 設置master1端自動半同步模式

Mysql的同步模式主要有如下3種:

a.???? 主從同步復制:數據完整性好,但是性能消耗略高;

b.??? 主從異步復制:性能消耗低,但容易出現不一致;

c.???? 主從半自動復制:介于上述兩種之間,既保持了數據的完整性,又提高了性能;

基于上述特性,建議采用半自動同步模式,由于后續要配置為雙主模式,因此任一節點其角色既為master又為slave,因此相關的master/slave插件要同時配置,過程如下。

(1) 首先查看庫是否支持動態加載(默認都支持)

42b9c64e8571304738576c0e68471b6c.png

(2) 主從庫上分別安裝插件

作為主庫,安裝插件semisync_master.so

b98647948c04133363b3b69754ccd49a.png

作為從庫,安裝插件semisync_slave.so

f2a4829e00afc0227cad42ecdeff2695.png

(3) 安裝完成后,從plugin表中能夠看到剛剛安裝的插件

96b07058b75a5a6a4056ddb43216e4ce.png

(4) 分別打開主從庫半同步復制

908fa8d835968c285a53f868f59cff3d.png

同時添加到各自的my.cnf中,在后續數據庫實例重啟時自動加載該配置。

4c9d2eed052d87ef82365c22220041e5.png

此時查看狀態還沒有啟動

2046a7c27e40a930ea62bb075a9b7b1e.png

(5) 兩個節點分別啟動IO進程

66e91721098d8434bf7ad88e2f54cfc2.png

(6) 查看半同步狀態

2a145fe17acb787ce177ea53f6f0404c.png

3、 將master1設為master2的主服務器

(1)在master1主機上創建授權賬戶,允許在master2主機上連接

30c50e113dfcb9dd16d44da16e3b57a4.png

(2)將主庫master1數據導出

7f4facedd466d2b93c625558cd3038a7.png

(3)將master.sql傳輸到master2上并導入

bd53d8cdd932321fbb8755c16aad3b0f.png

(4)在master2端將master1設置為自己的主庫,并開啟slave功能

24b9c6cab19ac2bb38efebc0cd53fead.png

在master2上查看slave狀態

b9ccd216f90e5bf32d4d45ccd2f397fc.png

至此master1到master2的主從復制關系已經建立完成。

4、 將master2設為master1的主服務器

在master1上執行

75828e486f4714c9578fae02b902f111.png

在master1上查看slave狀態

961735abe869e4d7cf387ab3a9e7e554.png

  • 二、配置keepalived+Mysql雙主的高可用:

1、keepalived相關概念說明:

keepalived是集群管理中保證集群高可用的一個軟件解決方案,其功能類似于heartbeat,用來防止單點故障

keepalived是以VRRP協議為實現基礎的,VRRP全稱VirtualRouter Redundancy Protocol,即虛擬路由冗余協議。

虛擬路由冗余協議,可以認為是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip,master會發組播(組播地址為224.0.0.18),當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master,這樣的話就可以保證路由器的高可用了。

keepalived主要有三個模塊,分別是core 、check和vrrp。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模塊是來實現VRRP協議的。同時為了避免出現腦裂,應關閉防火墻或者開啟防火墻但允許接收VRRP協議。

2、keepalived的安裝配置

(1)配置本地yum源,在master1和master2兩臺服務器上安裝keepalived的相關依賴包Kernel-devel/openssl-devel/popt-devl等

配置指向rhel-7.5.iso的yum本地源,步驟略

注意:如不知道keepalived需要哪些依賴包,可到下載后的源碼解壓目錄下查看INSTALL 文件內容,安裝需要的依賴包,源碼安裝任何一個軟件都要養成查看源碼包文檔的習慣,比如INSTALL,README,doc等文檔,可以獲得很多有用的信息。

(2)在兩臺mysql上解壓縮并編譯安裝keepalived

197d431cbb11f845af51ff1ec1e55475.png

(3)master1、master2上分別配置keepalived.conf

43ae2640ea22e83dd3e5a7f5d91667bc.pngdce7314572c0e74eaff01053ed762802.png

注意上圖紅色字體中兩個節點配置相同處及差異。

說明:keepalived只有一個配置文件keepalived.conf,里面主要包括以下幾個配置區域:

·???????? global_defs:主要是配置故障發生時的通知對象以及機器標識。

·???????? vrrp_instance:用來定義對外提供服務的VIP區域及其相關屬性。

·???????? virtual_server:虛擬服務器定義

(4)同時兩個節點上都需要添加檢測腳本

0ba1a828b6b432af123e9c214adb7e81.png

作用:是當mysql停止工作時自動關閉本機的keeplived服務,從而實現將故障主機踢出熱備組,因每臺機器上keepalived只添加了本機為realserver,所以當mysqld正常啟動后,我們還需要手動啟動keepalived服務。

(5)分別啟動兩個節點的keepalived服務

e555847b01807f726d7d7db262f74b5e.png

檢查兩個節點keepalived啟動進程

2167e8dd2f37ac7d26a3c8bfd79417e3.png021fe997005ee667219308c8ac79716f.png

檢查兩個節點的vip掛載情況,略

(6)主備機故障切換測試

停止master2的mysql服務,看keepalived健康檢查程序是否會觸發腳本,自動進行故障切換,步驟略

查看master1節點的VIP掛載情況,驗證是否實現了自動切換,步驟略

說明在master2服務器的mysql服務發生故障時,觸發了腳本,自動完成了切換。

(7)現在我們把master2的mysql服務開起來,并且keepalived的服務也需要啟動。

即便master2的mysql服務和keepalived服務都重新開啟了,master1仍然是主master了,master2未對主master的權利進行搶奪,說明設置的nopreempt參數生效了,為了保證群集的穩定性,生產環境不允許搶占配置,只有當master1的mysql服務壞掉的時候,master2才會再次成為主master,否則它永遠只能當master1的備份。(注:nopreempt一般是在優先級高的mysql上設置)

  • 三、基于sysbench工具測試

  • 主主同步效率測試:

Sysbench是一個模塊化的、跨平臺、多線程基準測試工具,可用于評估數據庫負載情況,通過sysbench命令配置IP地址、端口號、用戶名、密碼連接到指定的數據庫db1中,創建多個表,并快速插入指定條數的記錄,觀察主備庫同步效率

(1)? 下載開源工具sysbench-0.4.12.14.tar.gz,放置在相應目錄下并解壓

(2)? 使用iso配置本地yum源并安裝Sysbench如下的依賴包(步驟略):autoconf/automake/cdbs/debhelper(>=9)/docbook-xml/docbook-xsl/libmysqlclient15-dev/libtool/xsltproc

(3)? 編譯sysbench

編輯配置文件/etc/ld.so.conf中添加mysql lib目錄/mysql/app/5.7.21/lib,并執行命令ldconfig生效

08a85a06ad1531e8da76a742c1b4c297.png

(4)? 執行sysbench壓測

使用sysbench工具向主節點的db1數據庫中創建5張表,并且每張表分別插入10萬條記錄d59c50c1854f076fca5f5a8eef127bf8.png

同時觀察備機同步效率

幾個重要的參數說明:

e556dd78a5686a6981e3b3e3dcfab9ec.png

B、半自動同步模式、異步模式切換測試

(1)? 檢查主備同步狀態,及同步參數設置

ca887a562778d4ad35426cd441eaa413.png

rpl_semi_sync_master_enabled參數表示啟用半同步模式;

rpl_semi_sync_master_timeout參數單位為毫秒,表示主庫事務等待從庫返回commit成功信息超過10秒就降為異步模式,不再等待從庫,等探測到從庫io線程恢復后,再返回為半自動同步;

rpl_semi_sync_master_wait_no_slave參數表示事務提交后需要等待從庫返回確認信息;

(2)? 將slave的io線程停止

922517d8a3c16095d177f341be11fb2f.png

dabd635be3db1ad1b715d26735dc5908.png

(3)? 使用sysbench向master寫入少量的數據,本例創建一張表,并插入10條記錄,命令包裝在1.sh測試腳本中

668538b526f55ba95f83bf4ab20e6dee.png

通過記錄的時間戳發現,master在等待了slave10秒無響應,自動切換為異步模式,將數據寫入本地。

(4)? Slave啟動io線程,數據自動追平

?至此MySQL主主復制配置完成,運行在半自動同步模式,通過keepalived實現Mysql的HA高可用。

  • 四、監控、備份配置

上線后應符合統一的標準監控策略,添加備份協議對數據進行周期備份并保存到帶庫中,以及定期的數據恢復測試。

由于是靠keepalived實現的高可用,還應將如下資源添加到監控管理平臺:

1、 對每臺數據庫主機的3個keepalived進程進行監控;

2、 對主備節點的io線程、sql線程工作狀態進行監控;

615cc27bf2463bb8b0669abb86020dc9.png

本文僅描述對特定需求的方案選擇、實施過程進行整理,其要點如下:同城跨機房基于GTID的雙主復制、半自動同步模式保護數據、keepalived實施快速切換,上線后還應加強對運行狀態的監控、數據備份、以及完善運維手冊,本文僅起到一個拋磚引玉的作用,不同的系統架構可結合特定的需求,制定適用的分布式及高可用方案。開源軟件和分布式數據庫等技術在同業處于起步階段,隨著業務轉型,高并發、大數據量、以及聯機事務處理的交易型應用需要,對傳統業務架構提出了諸多要求,也對底層數據存取、處理提出了更高的要求,而基于mysql分庫分表的分布式數據庫解決方案也被廣泛使用,我們也會逐步加大對相關技術的探索,希望各位同學多提寶貴意見。

44a4cf62f7e7e293ab74a51987f90ce9.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/529766.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/529766.shtml
英文地址,請注明出處:http://en.pswp.cn/news/529766.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

俄亥俄州立大學計算機科學轉學成功,俄亥俄州立大學轉學成功率83.38%!!

俄亥俄州立大學The Ohio State University-Columbus,即OSU成立于1870年,全美高校排名第54位(公立學校排名第18位),是美國較好的公立學校之一,亦是“公立常春藤”的成員。OSU是美國重要的學術聯盟“美國大學協會”的成員之一&#…

小愛同學100個奇葩回復_小米小愛音箱Pro開箱評測,看到的不僅是全面升級更是小米loT的高速發展...

Hello,大家好,這里是科技能量站,今天有何大家見面了,本期小編給大家帶來的是小米最新推出的小愛同學“小米小愛音箱Pro”,小米在前兩年推出了自家的小米AI音箱,那一刻起,智能語音人工助手在小米…

你了解的繼承方式html,法定繼承、遺囑繼承、遺贈,這三種房產過戶方式你了解多少?...

在房產過戶的中,與繼承相關的方式有三種:法定繼承、遺囑繼承和遺贈。這三種過戶方式其實是有較大不同的,下面我們就來具體分析下,希望能對需要的朋友有幫助。過戶在房產過戶中,與繼承相關的有三種,分別是法…

計算機在生物學研究領域的認識,阮曉鋼——北京工業大學——主要研究領域涉及:控制科學與工程,人工智能與認知科學,機器人學與機器人技術,計算機應用技術,生物醫學工程與生物信息學。...

2007 年度:[1] On-line adaptive control for inverted pendulum balancing based on feedback-error-learning. Neurocomputing, 70 (4-6): 770-776 JAN 2007.[2] A tabu based neural network learning algorithm. Neurocomputing, 70 (4-6): 875-882 JAN 2007.20…

wedo2.0編程模塊介紹_福特福克斯TCM重新編程操作

適用范圍支持車型/年款:新福克斯 2011 – 2018 1.6L/2.0L DPS6變速箱 車型嘉年華 2013 1.5L DPS6變速箱 車型翼博 2013 – 2016 1.5L DPS6變速箱 車型功能介紹升級ECU版本或者對空白ECU寫入數據, PAD Ⅲ請使用有線連接進行編程, 測試時保證車輛電瓶電壓充足條件要求…

全國計算機二級公共知識點,全國計算機二級公共基礎知識知識點

全國計算機二級公共基礎知識知識點公共基礎知識第一章 數據結構與算法1.1 算法1.1.1 算法的基本概念1、算法的基本特征可行性、確定性、有窮性、擁有足夠的情報所謂算法,是一組嚴謹地定義運算順序的規則,并且每一個規則都是有效的,且是明確的…

中計算散度的函數_梯度、散度、旋度

一、麥克斯韋基于四元數觀點導出散度與旋度已知的最早的關于散度和旋度的描述都來自麥克斯韋1873年的《A Treatise on Electricity and Magnetism》(電磁通論)一書。因此,為了探明散度和旋度的物理意義,有必要回到那本1873年的專著…

必須重啟計算機才能關閉用戶賬戶控制,Win10系統怎么徹底關閉用戶帳戶控制?...

大多是win10系統用戶都知道,微軟所推出的用戶帳戶控制能夠限制一些病毒程序啟動,從而較好的保護我們的電腦安全,以達到降低win10系統中毒的風險。可是每當我們運行一個程序的時候系統總會出現提示,感覺很煩,那么怎么永…

三菱plcfx5u指令手冊_從西門子200的PLC程序來看三菱FX5U的PLC程序

小型PLC系統中西門子200系列和三菱的FX系列是應用的比較多的,作為工控行業的工程師是很有必要明白他們之間的一些不同點的,特別是從程序上來說,因此來寫一篇文章,簡單的聊聊他們在編程上的一下不同!西門子PLC和三菱PLC…

計算機應用領域變化,計算機應用領域與發展階段.ppt

計算機發展簡史;計算機是一種以電子器件為基礎的,不需人的直接干頂,能夠對各種數字化信息進行算術和邏輯運算的快速工具。“電腦”;計算機應用領域; 第一臺電子計算機1946年 美國 ENIAC;計算機發展階段;;在 ENIAC 里頭,一共有17468只電子管&a…

cron 每10分鐘執行一次_早餐兒子最愛它,簡單卷一卷,10分鐘做一大盤,三天兩頭吃一次...

早餐兒子最愛它,卷一卷特簡單,10分鐘做一大盤,三天兩頭吃一次。俗話說得好“早餐要吃好,午餐要吃飽,晚餐要吃少。”可見,早餐的重要性,一般早餐在一日三餐中占30%的熱量,碳水化合物、…

計算機剛過國家線能調劑到哪些學校,2020考研:剛過國家線好不好調劑?這4個調劑策略!考生要知道...

原標題:2020考研:剛過國家線好不好調劑?這4個調劑策略!考生要知道近日,2020年全國碩士研究生基本分數線已經公布。對于340萬左右的考研人來說,心中的那塊石頭終于有了著落,不管考得好或者不好&a…

生命銀行怎么樣_減脂就像是從“脂肪銀行”中提款,想要成功,你要做到這兩點...

本期內容,我們來深刻的聊一聊減脂,減肥。食物為什么會讓你長胖?怎樣快速的瘦下來?1 食物能量的儲存人是鐵,飯是鋼,一天不吃餓得慌!食物是維持人體正常運轉的唯一能量來源,被我們吃進…

計算機綜合應用能力試題,計算機綜合應用能力實訓

計算機綜合應用能力實訓計算機綜合應用能力實訓單選題:1、應用倒角命令“chamfer”進行倒角操作時:A、不能對多段線對象進行倒角B、可以對樣條曲線對象進行倒角C、不能對文字對象進行倒角D、不能對三維實體對象進行倒角2、不是環形陣列定義陣列對象數目和…

二次開發_企業ERP系統二次開發問題的探討分析

新朋友點上方藍字“ERP之家”快速關注導讀:根據筆者多年在企業中實施及推進ERP,概的實戰經驗,闡述了ERP系統二次開發的必然性和二次發開的成因及存在的風險,提出如何合理地規避二次開發所帶來的風險,值得為實施ERP系統…

計算機網絡通信中常用的檢錯碼,4月全國高等教育自學考試計算機網絡與通信試題及答案解析...

《4月全國高等教育自學考試計算機網絡與通信試題及答案解析》由會員分享,可在線閱讀,更多相關《4月全國高等教育自學考試計算機網絡與通信試題及答案解析(4頁珍藏版)》請在人人文庫網上搜索。1、精品自學考試資料推薦全國 2018 年 4 月高等教育自學考試計…

西門子邏輯運算指令_西門子S7-200 SMART邏輯運算指令應用實例

本篇我們通過一個實例來講解一下西門子S7-200 SMART邏輯運算指令在程序中的使用。要求將VW2和VW4中的數據進行邏輯與后,送到VW6。首先我們雙擊電腦桌面上的STEP7-Micro/WIN SMART圖標,打開編程軟件,從指令樹的位邏輯中選擇一個常開觸點拖放到…

計算機教案畫圓形和方形,畫方形和圓形的教案

教學目標1. 通過對長方體、正方體、圓柱底面的觀察,及摸一摸、畫一畫等體驗活動,直觀認識長方形、正方形和圓,知道這些常見圖形的名稱,能識別這些圖形,初步了解這些圖形在日常生活中的應用。2. 在現實有趣的學習情境中…

計算機仿真隨機數生成,偽隨機數生成器研究

摘要:本文主要考慮了基于計算復雜性定義的偽隨機數生成器.介紹了單向函數與偽隨機數生成器之間的關系以及幾種常見的基于離散對數問題,DDH問題的偽隨機數生成器.在分析了它們的安全性和效率的同時也提出了改進方法. 針對基于離散對數問題的IRG生成器,本文指出它在每…

強行終止python_中國的真實離婚率:一點也不高,反而低的驚人 | 用python計算離婚率...

3600字。現在的網絡上,似乎普遍有一種共識,那就是中國的離婚率高的嚇人。 各種聳人聽聞的標題,比如什么“北上廣深等一線城市離婚率高達40%”、“天津的離婚率高達70%”……搞得人心惶惶。有網友對此提出質疑,說,我怎么…