1. 程式人生 > >MySQL主從複製與高可用的搭建

MySQL主從複製與高可用的搭建

在WEB應用方面MySQL是最好的關係資料庫管理系統應用軟體之一。

MySQL資料庫自身提供的主從複製功能可以方便的實現資料的多副本複製和資料庫的拓展在保證MySQL資料庫主從複製高可用性的情況下,實現多個數據副本儲存以及讀寫分離技術,不僅可以加強資料的安全性,還能進一步提升資料庫的讀寫效能。

那麼如何保證MySQL資料庫主從架構的高可用性?

面對這個問題,景安網路的資料庫產品團隊MySQL資料庫主從複製原理及高可用原理兩方面著手,通過配置實踐進行詳細的講解。

主從複製原理解析:

第一步:master記錄二進位制日誌。在每個事務更新資料完成之前,master在二進位制日誌記錄這些改變。MySQL將事務序列的寫入二進位制日誌,在事件寫入二進位制日誌完成後,master通知儲存引擎提交事務。此後可接收slave的請求。

第二步:slave將master的binary log拷貝到它自己的中繼日誌。首先,slave開始一個工作執行緒——I/O執行緒。I/O執行緒在master上開啟一個普通的連線,然後開始在主節點上binlog dump process(二進位制轉存執行緒)。Binlog dump process從master的二進位制日誌中讀取事件,如果已經跟上master,它會睡眠並等待master產生新的事件。I/O執行緒將這些事件寫入中繼日誌。

第三步:SQL slave thread(SQL從執行緒)處理該過程的最後一步。SQL執行緒從中繼日誌讀取事件,並重放其中的事件而更新slave的資料,使其與master中的資料一致。只要該執行緒與I/O執行緒保持一致,中繼日誌通常會位於OS的快取中,所以中繼日誌的開銷很小。

高可用原理解析

MHA Node執行在每臺MySQL伺服器上,MHA Manager會定時探測叢集中的master節點,當master出現故障時,它可以自動將最新資料的slave提升為新的master,然後將所有其他的slave重新指向新的master。整個故障轉移過程對應用程式完全透明。

一、具體配置

1. 角色分配

node1: MySQL master

node2: MySQL slave

node3: MySQL slave

node4: MHA Manager

2.各節點的/etc/hosts檔案配置內容中新增

10.220.1.2 node1.jingan node1

10.220.1.3 node2.jingan node2

10.220.1.4 node3.jingan node3

10.220.1.5 node4.jingan node4

二、初始主節點master配置

位置:vim /etc/my.cnf

[mysqld]

server-id = 1

log-bin = master-log

relay-log = relay-log

skip_name_resolve

三、所有slave節點依賴的配置

[mysqld]

server-id = 2 # id必須唯一;

relay-log = relay-log

log-bin = slave-log

read_only = ON

relay_log_purge = 0 #是否自動清空不再需要中繼日誌

skip_name_resolve  

四、MYSQL複製配置架構的配置方式將其配置完成並啟動master節點和各slave節點, 以及為各slave節點啟動其IOSQL執行緒, 確保主從複製執行無誤。

Master:

[[email protected]node1.jingan ~]# GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO [email protected]'10.220.1.%' IDENTIFIED BY 'jingan';

[[email protected]node1.jingan ~]# FLUSH PRIVILEGES;

[[email protected]node1.jingan ~]# SHOW MASTER STATUS;

Slave:

[[email protected]node2.jingan ~]# CHANGE MASTER TO MASTER_HOST='10.220.1.2',MASTER_USER='slave',MASTER_PASSWORD='magedu',MASTER_LOG_FILE='master-log.000002',MASTER_LOG_POS= 254;

[[email protected]node2.jingan ~]# START SLAVE;

[[email protected]node2.jingan ~]#SHOW SLAVE STATUS\G ;

五、安裝配置MHA

下載:mget mha4mysql-manager-0.56-0.el6.noarch.rpm  mha4mysql-node-0.56-0.el6.noarch.rpm

  1. 在所有MYSQL節點授權擁有管理許可權的使用者可在本地網路中有其他節點上遠端訪問。 當然, 此時僅需要且只能在master節點執行類似如下SQL語句即可。

mysql> GRANT ALL ON *.* TO 'mhaadmin'@'10.220.1.%' IDENTIFIED BY'123456'

  1. 準備基於SSH互信通訊環境

MHA叢集中的各節點彼此之間均需要基於ssh互信通訊, 以實現遠端控制及資料管理功能。可在Manager節點生成金鑰對兒, 並設定其可遠端連線本地主機後, 將私鑰檔案及authorized_keys檔案複製給餘下的所有節點即可。

node4: Manager 節點上操作:

[[email protected].jingan ~]# ssh-keygen -t rsa -P ' '

[[email protected].jingan ~]#ssh-copy-id -i .ssh/id_rsa [email protected]

  1. 進行MHA安裝包安裝

Manager 節點: #yum install mha4*(即:倆包同時安裝)

所有節點: #yum installmha4mysql-node-0.56-0.el6.norch.rpm

  1. 初始化MHA, 進行配置

Manager 節點需要為每個監控的master/slave叢集提供一個專用的配置檔案, 而所有的master/slave叢集也可共享全域性配置。 全域性配置檔案預設為/etc/masterha_default.cnf, 其為可選配置。 如果僅監控一組master/slave叢集, 也可直接通過application的配置來提供各伺服器的預設配置資訊。 而每個application的配置檔案路徑為自定義。

  1. 定義MHA管理配置檔案

為MHA專門建立一個管理使用者,方便以後使用,在mysql的主節點上,三個節點自動同步.

mkdir /etc/mha_master

vim /etc/mha_master/app1.cnf

配置檔案內容如下;

[server default] //適用於server1,2,3個server的配置

user=mhaadmin //mha管理使用者

password=123456 //mha管理密碼

manager_workdir=/etc/mha_master/app1 //mha_master自己的工作路徑

manager_log=/etc/mha_master/manager.log // mha_master自己的日誌檔案

remote_workdir=/mydata/mha_master/app1 //每個遠端主機的工作目錄在何處

ssh_user=root // 基於ssh的金鑰認證

repl_user=slave//資料庫使用者名稱

repl_password=jingan //資料庫密碼

ping_interval=1 // ping間隔時長

[server1] //節點1

hostname=10.220.1.3 //節點1主機地址

ssh_port=22 //節點1的ssh埠

candidate_master=1 // 將來可不可以成為master候選節點/主節點(1表示可以成為主節點,0表示不可以)

[server2]

hostname=10.220.1.4

ssh_port=22

candidate_master=1

  1. 檢測各節點間ssh互信通訊配置是否Ok

Node4操作:

[[email protected] ~]# masterha_check_ssh -conf=/etc/mha_master/app1.cnf

輸出資訊最後一行類似如下資訊, 表示其通過檢測。

[info]All SSH connection tests passed successfully.

檢查管理的MySQL複製叢集的連線配置引數是否OK:

[[email protected] ~]#masterha_check_repl -conf=/etc/mha_master/app1.cnf

如果測試時會報錯,可能是從節點上沒有賬號,因為這個架構,任何一個從節點, 將有可能成為主節點, 所以也需要建立賬號。因此,這裡只要在mater節點上再次執行以下操作即可:

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave2'@'10.220.1.%' IDENTIFIED BY 'jingan';

mysql> FLUSH PRIVILEGES;

Manager節點上再次執行,就顯示Ok了。

  1. 啟動MHA

[[email protected].jingan ~]#nohup masterha_manager -conf=/etc/mha_master/app1.cnf &> /etc/mha_master/manager.log &

# 啟動成功後,可用過如下命令來檢視master節點的狀態:

[[email protected].jingan ~]#masterha_check_status

-conf=/etc/mha_master/app1.cnf

app1 (pid:4978)is running(0:PING_OK),master:10.220.1.2

上面的資訊中“app1 (pid:4978)is running(0:PING_OK)”表示MHA服務執行OK,否則, 則會顯示為類似“app1 is stopped(1:NOT_RUNNINg).”

如果要停止MHA, 需要使用master_stop命令。

[[email protected].jingan ~]#masterha_stop -conf=/etc/mha_master/app1.cnf

六、測試MHA測試故障轉移

1. 在master節點關閉mysql服務,模擬主節點資料崩潰

#killall -9 PID

#rm -rf /var/lib/mysql/*

2. 在manager節點檢視日誌:

/data/masterha/app1/manager.log日誌檔案中出現如下資訊,表示manager檢測到10.220.1.2節點故障, 而後自動執行故障轉移, 將10.220.1.3提升為主節點。 注意, 故障轉移完成後, manager將會自動停止, 此時使用masterha_check_status命令檢測將會遇到錯誤提示, 如下所示:

#masterha_check_status -conf=/etc/masterha/app1.cnf

app1 is stopped(2:NOT_RINNING).

3. 提供新的從節點以修復複製叢集

原有 master 節點故障後, 需要重新準備好一個新的 MySQL 節點。 基於來自於master 節點的備份恢復資料後, 將其配置為新的 master 的從節點即可。 注意,新加入的節點如果為新 增節點, 其 IP 地址要配置為原來 master 節點的 IP, 否則, 還需要修改 app1.cnf 中相應的 ip 地址。 隨後再次啟動 manager, 並再次檢測其狀態。

4. 新節點提供後再次執行檢查操作

masterha_check_status -conf=/etc/mha_master/app1.cnf

masterha_check_repl -conf=/etc/mha_master/app1.cnf

檢查無誤,再次執行,這次要記錄日誌

masterha_manager -conf=/etc/mha_master/app1.cnf >/etc/mha_master/manager.log 2>&1

通過以上配置操作,可以有效保證MySQL主從複製及其高可用性,從而實現主庫宕機後自動切換到從庫。景安網路的MySQL資料庫,是一款免運維、高可用、高效能、高吞吐的資料庫產品。擁有超高的價效比可用性高達99.99%,相對於傳統資料庫更易於部署、管理和擴充套件。預設支援主備故障切換、讀寫分離、資料恢復、自助擴充套件、全面監控等功能。

在硬體方面採用本地SSD磁碟部署,使業務讀寫更加快速,無論您是什麼業務,我們都會為您提供全套解決方案,徹底解決資料庫運維的煩惱,使您能專注於應用開發和業務發展。歡迎您體驗!

相關推薦

MySQL主從複製可用搭建

在WEB應用方面,MySQL是最好的關係性資料庫管理系統應用軟體之一。 MySQL資料庫自身提供的主從複製功能可以方便的實現資料的多副本複製和資料庫的拓展。在保證MySQL資料庫主從複製高可用性的情況下,實現多個數據副本儲存以及讀寫分離技術,不僅可以加強資料的安全性,還能進

搭建keepalived+mysql主從復制可用

pos onf 通過 用戶 mtu 實時 ipa 由於 mysql主從 準備工作: 完成keepalived的安裝 完成docker的安裝 docker鏡像裏面自行安裝iproute2, vim, iputils-ping(可選)等工具,便於測試 apt-get ins

redis的主從複製可用、叢集,以及用redis做mysql快取

一、redis的安裝先在下載安裝包解壓後進入目錄應為已經有Makefile了所以直接make編譯這裡會報錯,需要gcc編譯器安裝好gcc,再次make編譯,還是會報錯;這個錯誤根據 Readme 可知需要執行 make MALLOC=libcmake完成後,提示去到 src

UNIXFBI-MYSQL復制可用

mysql高可用 server mysql主從 主從 ref 安裝 二進制包 復制 blank 01. MySQL GTID介紹和GTID復制搭建 http://www.unixfbi.com/297.html 02. MySQL5.7 並行復制 http://www.

CentOS7通過yum安裝Mysql5.7+修改預設密碼+遠端登入+主從複製+keepalive可用

CentOS7通過yum安裝Mysql5.7+修改預設密碼+遠端登入+主從複製+keepalive高可用 環境設定 mysql-mater 192.168.20.51 mysql-slave 192.168.20.52 vip:192.168.20.91 vim /etc/hos

部署MySQL主從複製讀寫分離

一、實驗壞境 1.一臺CentOS 7作為客戶端測試,對應的地址為:192.168.80.1202.一臺CentOS 7作為Amoeba前端代理伺服器,對應的地址為:192.168.80.1103.一臺CentOS 7作為mysql主伺服器,對應的地址為:192.168.80.1004.兩臺CentOS 7

Redis主從複製可用

一.Redis的安裝和主從配置 實驗環境:rhel6.5      主機:server{1..4}   ip:172.25.254.{1..4} 1.在server1和server2上下載redis安裝包,解壓,編譯,安裝 tar zxf redis-4.0.8.t

Mycat作為中介軟體搭建Mysql主從複製---從選型到搭建的想法和記錄

想了解本人簡陋搭建過程的同學,可以忽略下面這一段: ***************************************************************************************************************

redis實現主從複製可用(主從切換)

當用單個redis伺服器壓力過大時,就要考慮redis主從複製了,主master複製寫入,從slave複製讀取 ,從而緩解伺服器壓力 接下來就配置一個reids的主從複製 127.0.0.1 :6379(主) 127.0.0.1 :6380(從) 127.0.

Redis--(linux安裝redis3.2.9主從複製叢集的搭建--教程)

如果中間遇見問題可以加扣扣群300458205 一、安裝redis並且啟動 二、配置多個Redis 2-0瞭解下機制: redis的replication機制允許slave從master那裡通過網路傳輸拷貝到完整的資料備份。具有以下特點: ●

mysql主從複製讀寫分離

主從複製原理:在主資料庫執行後,都會寫入本地的日誌系統A中。假設,實時的將變化了的日誌系統中的資料庫事件操作,在主資料庫的3306埠,通過網路發給從資料。從資料庫收到後,寫入本地日誌系統B,然後一條條的將資料庫事件在資料庫中完成。那麼,主資料庫的變化,從資料庫

mysql主從複製讀寫分離配置詳解

mysql主從複製與讀寫分離配置詳解 當網站達到一定規模時,資料庫最先出現壓力,這時候使用者會明顯感覺到卡頓,其原因是資料庫的寫入操作,影響了查詢的效率。這時可以考慮對資料庫配置主從複製和讀寫分離。設定多臺資料庫伺服器,包括一個主伺服器和n個從伺服器,主伺服器負責寫入資料,從伺服器負

MySQL主從複製非同步原理以及搭建

MySQL主從複製的原理:   1、首先,MySQL主庫在事務提交時會把資料變更作為時間events記錄在二進位制日誌檔案binlog中;MySQL主庫上的sync_binlog引數控制Binlog日誌以什麼樣的方式重新整理到磁碟上。   2、主庫推送二進位制日誌檔案Binlog中的事件到從庫的中繼日誌R

實現在同一臺linux主機上mysql主從複製讀寫分離

環境情況:由於資源有限,僅在一臺CentOS release 6.6上實現M-S主從複製與讀寫分離 一、mysql安裝與配置 具體安裝過程建議參考我的上篇一部落格文章 二、mysql主從複製 主從伺服器場景如下 主(m)   :172.30.204.111:3307 從1

Redis5.0 主從模式和可用 搭建和測試報告

Redis 單機模式很簡單,相關測試水文看這裡 Redis5 壓力測試結果反饋報告 必須的,今天接著寫水文,寫一寫現在redis 支援的三種叢集,主從模式,哨兵模式,Cluster模式,今天先搞主從模式 主從模式  主從模式是最簡單的叢集模式,其實就是複製基本只能解決讀寫分離問題,主機伺服器一旦宕機

MySQL可用--主從複製讀寫分離

一、Mysql高可用概念  二、MySQL主從複製原理  叢集目的,減輕單臺伺服器壓力 三、MySQL主從複製配置 實際操作mysql伺服器叢集,主從複製的過程 master   192.168.230.128 slav

mysql主從復制讀寫分離可用配置

mysql主從復制 mysql讀寫分離 一、說明 前面我們說了mysql的安裝配置(並提供一鍵安裝腳本),mysql語句使用以及備份恢復mysql數據;本次要介紹的是mysql的主從復制,讀寫分離;及高可用MHA;環境如下:master:CentOS7_x64 mysql5.721 172.16.

Mysql資料庫的主從複製讀寫分離搭建過程原理介紹

首先說明一下在搭建Mysql資料庫的主從複製與讀寫分離的過程中十分容易出錯,所以在搭建的過程中一定要謹慎注重每一步的細節。傳統資料庫中存在的問題1.傳統資料庫設計時,如果伺服器宕機,將不能為使用者提供服務導致整個系統崩潰.2.如果資料庫突然宕機.會導致資料丟失.3.為了防止資

一步一圖搭建-分散式伺服器部署之mysql叢集-主從複製讀寫分離

傳統專案模型: 1.傳統的裝置搭建時,如果採用單臺伺服器.則會出現很多的問題.如果伺服器出現宕機/斷電/硬體裝置的損壞,都會直接影響使用者體驗. 2.如果傳統專案中遇到了高併發的情況.單臺伺服器不足以支援 分散式的處理: 傳統資料庫中存在

Mycat+Mysql主從複製+haproxy+keepalived實現可用的分庫分表叢集方案

一, 部署架構 1.1架構圖 1.2 軟體版本 作業系統: CentOS2-7-X86_64-DVD-1708.iso JDK 版本: jdk1.8.0_11 Keepalived 版本: keepalived-1.2.18.tar.gz