mysql高可用

1. MySQL高可用需求介紹

1.1 MySQL高可用生產業務需求

在企業實際生產場景中,一主多從的MySQL數據庫架構師最常用的架構,該架構部署簡單、維護方便,並且通過簡單的代理或者通過程序的方式就可以實現對主從庫的讀寫分離,且多個從庫還可以通過lvshaproxy實現對多個從庫的負載均衡。

但是,在以上的MySQL數據庫架構中,我們不難發現,雖然從庫是多個,但是主庫僅有一個,也就是說主庫一旦宕機,所有的寫業務就會終止,而從庫宕機1個就沒什麼大的影響。

Mysql+Drbd+Heartbeat高可用服務應用,這個解決方案可以有效的解決主庫單點的問題。當主庫宕機後。可以實現主庫從一個主節點切換到另一個主節點,而所有的從庫會自動和新的主庫進行同步,且新主庫的數據和宕機瞬間的主幾乎完全一致,從而實現了MySQL主庫的熱備方案。

1.2 MySQL高可用架構拓撲

 

正常情況說明:

A. Heartbeat通過串口線或直練線對DB服務做健康檢查,並執行DRBDMySQLVIP等資源自動動態切換

B. db-1-2作爲db-1-1高可用備份,正常情況下db-1-1提供一個主分區給MySQL使用

C. 物理磁盤做RAID10RAID0,根據性能和冗餘需求來選

D. 服務器之間、服務器和交換機之間都是雙千兆網卡綁定

E. 應用服務器(包括不限於web等)通過VIP訪問MySQL主庫

F. MySQLDRBD分區1

G. MySQL slave1MySQL slave2通過VIP同步主庫MySQL 3306

H. 以上高可用爲MySQL多從的模式,屬於一主二從。

1.2.2 MySQL主庫宕機切換過程架構拓撲

spacer.gif 

1.2.3 MySQL主庫宕機切換新主後架構拓撲

spacer.gif 

提示:經過高可用方案切換後的數據庫架構,就是一個常規的主從結構。此時,主庫就從熱備變成了單點,因此,要儘快恢復原來的主庫,以確保切換後的新主庫宕機對業務帶來的影響。

1.3 MySQL高可用生產需求描述

假設有3臺數據庫服務器db-1-1/db-1-2/db-1-3,其實際IP分別爲10.0.15.81db-1-1),10.0.15.82db-1-2),10.0.15.83db-1-3

db-1-1的數據庫文件目錄爲/data,對前端提供的訪問VIP10.0.15.181

配置目標:一旦數據庫服務器db-1-1宕機,服務器上的mysql數據庫服務和虛擬IP會自動切換到服務器db-1-2繼續提供服務,從而達到mysql數據庫高可用無業務影響的目的。

這裏還有一個特別的問題,就是以前的多個從庫如何能自動和新的主庫同步,經過實踐,通過drbd的方式同步,然後做從庫時使用和主庫對外提供服務的VIP爲同步IP,當主庫宕機後,VIP漂移到熱備主庫,默認情況60秒內,從庫就可以找到新的VIP,從而自動和新的主庫同步。強調:通過MySQL同步做雙主的方式,是難以做到主庫宕機從庫和新的主庫自動同步的

1.4 高可用架構圖

單主熱備模式:上圖

雙主熱備模式:

spacer.gif 

1.5 網卡及IP資源

名稱

接口

IP

用途

MASTER

eth0

10.0.15.81

外網管理IP,用於WAN數據轉發


eth1

192.168.2.81

用於MYSQL服務器間心跳連接(直連)


eth2

192.168.3.81

用於MYSQL服務器DRBD同步(直連)

vip


10.0.15.181

用於對外MySQL數據庫服務VIP

BACKUP

eth0

192.168.1.82

外網管理IP,用於WAN數據轉發


eth1

192.168.2.82

用於MYSQL服務器間心跳連接(直連)


eth2

192.168.3.82

用於MYSQL服務器DRBD同步(直連)

vip




2. 開始部署mysql高可用

2.1 分別修改服務器機器名

分別設置兩臺機器的hostnamedb-1-1/db-1-2

方法爲:編輯/etc/sysconfig/network,設置HOSTNAME=db-1-1HOSTNAME=db-1-2,然後再命令行執行hostname db-1-1hostname db-1-2使設置馬上生效

2.2 分別增加配置一塊硬盤

2.3 分別配置hosts

vim /etc/hosts

10.0.15.81 db-1-1

10.0.15.82 db-1-2

2.4 添加路由

81主機:

route add -host 192.168.2.82 dev eth1

route add -host 192.168.3.82 dev eth2

echo 'route add -host 192.168.2.82 dev eth1' >> /etc/rc.local

echo 'route add -host 192.168.3.82 dev eth2' >> /etc/rc.local

82主機:

route add -host 192.168.2.81 dev eth1

route add -host 192.168.3.81 dev eth2

echo 'route add -host 192.168.2.81 dev eth1' >> /etc/rc.local

echo 'route add -host 192.168.3.81 dev eth2' >> /etc/rc.local

2.5 硬盤分區,格式化

 

2.6 安裝相關軟件

安裝drbdyum -y install kmod-drbd83 drbd83

安裝heartbeatyum -y install heartbeat

安裝mysql通過編譯方式安裝

2.7 理順MySQL數據/data目錄各配置列表

主機名稱

db-1-1

db-1-2

管理IP

eth0:10.0.15.81

eth0:10.0.15.82

DRBD管理名稱

data

data

DRBD掛載目錄

/data

/data

DRBD邏輯設備

/dev/drbd0

/dev/drbd0

DRBD對接IP

eth2:192.168.3.81/24

eth2:192.168.3.82/24

DRBD存儲設備

/dev/sdb1

/dev/sdb1

DRBD Meta設備

/dev/sdb2

/dev/sdb2

NFS/MySQL導出目錄

/data

/data

NFS/MySQL虛擬IP

eth0:10.0.15.181/24

eth0:10.0.15.181/24

注:灰色部分爲自動生成

2.8 配置heartbeat服務

在高可用方案中,heartbeat服務的主要作用就是控制IPdrbdmysql等服務根據要在主備節點上正確的啓動和停止

Heartbeat的默認配置文件目錄爲/etc/ha.dHeartbeat常用的配置文件有三個,ha.cfauthkeyharesource

配置名稱

作用

備註

ha.cf

heartbeat參數配置文件

在這裏配置heartbeat的一些基本參數

authkey

heartbeat認證文件

高可用服務器對之間根據對端的authkey,對對端進行認證,權限必須是600

haresource

heartbeat資源配置文件

如配置IP資源及腳本程序等

2.8.2配置authkey文件

cat authkey

auth 1

1 sha1 47e9336850f1db6fa58bc470bc9b7810eb397f04 

chmod 600 /etc/ha.d/authkey

2.8.3 配置ha.cf

vim ha.cf

#the start by oldboy

debugfile /var/log/ha-debug

logfile /var/log/ha-log

logfacility     local1

 

keepalive 2

deadtime 30

warntime 10

initdead 120

 

#bcast  eth1

mcast eth1 225.0.0.81 694 1 0

 

auto_failback on

node    db-1-1

node    db-1-2

crm     no

2.8.4 配置haresoure文件

vim haresources

#oldboy services

#db-1-1 IPaddr::10.0.15.181/24/eth0  ---->先用這個測試下,是否可以起到VIP

db-1-1 IPaddr::10.0.15.181/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext3 rsdata

2.8.5 配置haresource說明

db-1-1 IPaddr::10.0.0.17/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4 rsdatadb-1-1  ==>主機名,表示初始狀態會在db-1-1綁定IP 10.0.15.181

IPaddr  ==>heartbeat配置IP的默認腳本,其後的IP等都是其參數

10.0.15.181/24/eth0   ==>集羣對外服務的VIP,初始啓動在db-1-1

drbddisk::data   ==>啓動drbd data資源,相當於執行/etc/ha.d/resource.d/drbddidk data stop/start

Filesystem::/dev/drbd0::/data::ext3  ==>drbd分區掛載到/data目錄,這裏相當於/etc/ha.d/resource.d/Filesystem::/dev/drbd0/data ext3 stop/start

rsdata  ==>啓動mysql服務腳本。這裏相當於/etc/init.d/rsdata stop/start

2.9 測試

/etc/init.d/heartbeat start

3. 配置DRBD服務

在高可用方案中,DRBD的主要作用就是確保數據能實時完整從主節點同步到熱備節點上。

3.1 加載drbd模塊到內核

modprobe drbd(臨時生效)

lsmod | grep drbd

3.2 初始化DRBDmetadata並啓動DRBD

創建DRBD記錄信息的metdata分區數據塊

drbdadm create-md data

drbdadm up all

3.3 指定一個要同步的資源,同步數據到對端

在主節點的一端執行

drbdadm -- --overwrite-data-of-peer primary data

此步執行完,如果從端分區爲空,就會自動開始進行數據同步

從端查看:

cat /proc/drbd

version: 8.4.1 (api:1/proto:86-100)

GIT-hash: 91b4c048c1a0e06777b5f65d312b38d47abaea80 build by root@db-1-2, 2016-04-29 02:11:47

 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----

    ns:0 nr:396288 dw:396288 dr:0 al:0 bm:24 lo:1 pe:9 ua:0 ap:0 ep:1 wo:b oos:1145924

[====>...............] sync'ed: 26.0% (1145924/1542212)K

finish: 0:00:11 speed: 99,072 (99,072) want: 102,400 K/sec

3.4 配合heartbeat調試drbd服務

需要執行相關切換命令確保heartbeat服務及drbd服務之間的配合是正確的才能繼續進行。這類似項目階段的里程碑,成功配置drbd服務,並且能配合heartbeat服務進行主備切換時第二步。

cat /etc/ha.d/haresources

db-1-1 IPaddr::10.0.15.181/24/eth0 drbddisk::data Filesystem::/dev/drbd0::/data::ext4

重新啓動heartbeat服務

判斷heartbeat配合drbd啓動成功的3

1ifconfig 查看是否有VIP

2df -h  查看drbd0是否掛載

3cat /proc/drbd 查看Primary/Secondary主從是否正確

3.5 heartbeat配合drbd調試的結論

主備節點的啓動順序是相同的:

1)VIP啓動 2drbd啓動 3drbd分區的掛載

發生切換時主或者備節點釋放資源的順序是相同的,但是和上面啓動的順序是相反的

1)drbd分區的掛載 2drbd啓動和設置 3vip的啓動

重點中的重點:

根據heartbeat的日誌文件以及heartbeat原理及啓動資源的順序去排查問題

排查的方法就是按照啓動heartbeat服務,heartbeat加載腳本資源的順序手動啓動檢查。

4. MySQL服務安裝配置

4.1 掛載drbd0分區到/data目錄

生產應用場景這裏的掛載操作是由heartbeat控制掛載和卸載的

mount /dev/drbd0

4.2 安裝mysql

cd /home/yan/tools/

........

4.3 創建數據文件目錄

mkdir -p /data/3306/data

4.4 上傳3306 my.cnf配置文件,mysql啓動腳本

4.5 授權

chown mysql:mysql /data/3306/

4.6 初始化數據庫並加700權限

chmod 700 mysql

export PATH=/application/mysql-5.5.32/bin:$PATH >> /etc/profile

./mysql_install_db --basedir=/application/mysql-5.5.32/ --datadir=/data/3306/data --user=mysql

chown -R mysql:mysql /data/

4.7 啓動數據庫

/data/3306/mysql start

或者手動啓動:

/application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf

4.8 測試備節點數據庫

備節點上的MySQL僅僅執行到make install完成就不需要操作了,因爲MySQL的數據文件會被drbd運送到備節點分區裏,因此,正常情況下,我們手工模擬停止drbd服務,掛載數據分區後,MySQL服務能正常啓動纔對

我們也可以在備節點安裝數據庫,但目的僅僅是測試備節點的安裝和啓動是否正常,測試完畢後,需要把/data裏的數據移走或者刪除

4.9 創建一個多實例(3307

mkdir -R /data/3307/data

初始化:

./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql

4.10 設置3307 3306的從庫

要使用VIP進行同步,這樣當主庫掛掉後能夠

5.

5.1 主庫宕機後恢復了,如何將宕機恢復後的主庫變爲主

啓動ha,或者hb_takevoerha自動接管的參數

5.2 監控方案

a.服務本身

b.主從同步狀態和延遲時間

c.裂腦監控:備節點出現VIP就認爲裂鬧了。更細緻的就是主節點宕機並且備節點VIP出現。

d.監控drbd的同步狀態


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