天天看點

heartbeat實作Mysql主主高可用

heartbeat實作Mysql主主高可用

先聲明本文非原創,參照http://blog.chinaunix.net/uid-20639775-id-3337481.html完善與加了一些注解而已。

1.1  方案簡介

本方案使用heartbeat+mysql主主同步來實作mysql資料庫的高可用, 當伺服器或者master的heartbeat宕掉以後會自動切換到backup上,伺服器或者master的heartbeat恢複以後可以自動切換回來,master繼續提供服務。

1.2  方案優缺點

Ø  優點:

易于配置,架構複雜度低

開源,費用低,無特殊硬體或是網絡元件要求

自動虛拟IP管理

資料複制保持基本一緻

Ø  缺點:

當mysql不可用的情況下不能進行自動切換,需要通過crm模式實作或者額外的腳本實作(比如shell腳本監測到master的mysql不可用就将主上的heartbeat停掉,這樣就會切換到backup中去)。

不友善擴充。

可能會發生腦裂問題。

1.3  方案架構圖

<a href="http://blog.51cto.com/attachment/201303/114406852.jpg" target="_blank"></a>

1.4  适用場景

該方案适合隻有兩台資料庫的情況,通路量不大,不需要實作讀寫分離的情況。

1.5  方案實戰

1.5.1 實戰環境介紹

伺服器名

IP

VIP

系統

Mysql

MasterA

192.168.1.28

192.168.1.30

Centos 6.3 64bit

5.5.27

MasterB

192.168.1.29

1.5.2 Mysql的安裝和配置以及主主同步配置

1.5.4 Heardbeat的安裝

A,B伺服器都需要安裝heardheat軟體。下面兩種安裝方式任選其一。

Ø  Rpm包的安裝方式,下載下傳yum源

rpm -ivh epel-release-6-8.noarch.rpm

yum -y install heartbeat-*

Ø  源代碼編譯安裝方式

# tar xf 7e3a82377fa8.tar.bz2 

cd Heartbeat-3-0-7e3a82377fa8/cd heartbeat-2.1.3

./configure

 Make

 make install

1.5.5 Heartbeat的配置

Hearbeat的配置主要包括三個配置檔案,authkeys,ha.cf和haresources的配置,下面就分别來看!

cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/

cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/

cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/

Ø  Hosts檔案的配置

需要在hosts檔案中添加masterA和master B主機,加快節點間的通信

Master A和master B的hosts節點添加的内容一樣,我的配置添加如下内容:

vim /etc/hosts

192.168.1.28    master1

192.168.1.29    master2

Ø  主機名配置

[root@master1 ~]# vim /etc/sysconfig/network

HOSTNAME=master1

[root@master2 ~]# vim /etc/sysconfig/network

HOSTNAME=master2

Ø  禁用selinux

[root@master1 ~]# vim /etc/selinux/config 

SELINUX=disabled

[root@master2 ~]# vim /etc/selinux/config 

Ø  Authkerys的配置

這個檔案用來配置密碼認證方式,支援3種認證方式,crc,md5和sha1,從左到右安全性越來越高,消耗的資源也越多。是以如果heartbeat運作在安全的網路之上,比如私網,那麼可以将驗證方式設定成crc,A和B的authkeys配置一樣。我的authkeys檔案配置如下:

vim /etc/ha.d/authkeys

auth 1

1 crc

Ø  ha.cf的配置

Master A的ha.cf的配置

vim /etc/ha.d/ha.cf

logfile/var/log/ha-log

logfacilitylocal0

keepalive 2

deadtime 30

warntime 10

initdead 120

udpport694

ucast eth0 192.168.1.28 master A的IP

auto_failback on

node    master1

node    master2

ping 10.10.10.254  網關

respawn hacluster /usr/lib64/heartbeat/ipfail 預設是lib修改lib64

compressionbz2 

compression_threshold 2

Master B的ha.cf的配置

ucast eth0 192.168.1.29

ping 10.10.10.254

respawn hacluster /usr/lib64/heartbeat/ipfail

compressionbz2

Ø  A,B 伺服器haresources的配置一樣

haresources用來設定master的主機名、虛拟IP、服務以及磁盤挂載等,master和backup的配置是一樣的,下面的mysqld需要做成服務,放在/etc/rc.d/init.d/目錄下,配置配置如下:

vim /etc/ha.d/haresources 添加下面一行

master2 192.168.1.30/24/eth0 mysqld 這表示資源将在啟動在master1

1.5.6 Heartbeat的啟動

在啟動master A和master B上的mysqld啟動以後,再啟動master A和master B的heartbeat:

[root@master1 ~]# chkconfig heartbeat on

[root@master2 ~]# chkconfig heartbeat on

[root@master1 ~]# ifconfig 檢視虛拟IP沒有起來

eth0:0    Link encap:Ethernet  HWaddr 00:0C:29:48:D0:64  

          inet addr:192.168.1.30  Bcast:192.168.1.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

1.5.7 方案測試

環境搭建好以後,就需要進行周密的測試,看是否實作了預期的功能:

Ø  停掉master A上的mysqld,看看是否切換

Ø  停掉master A的heartheat看看是否能正常切換。

Ø  停掉master A的網絡或者直接将master系統shutdown,看看能否正常切換。

Ø  啟動master A的heartbeat看看是否能正常切換回來。

Ø  重新啟動master看看能否切換過程是否OK。

1.5.8 解決問題

如果重新開機機器後heartbeat不能啟動,則需要檢視/var/log/ha-log

ERROR: Current node [test1] not in configuration! 

配置檔案有問題,由于我臨時用hostname修改的主機名,重新開機後不生效。需要修改主機名與ha.cf中定義的node後面的一樣

ERROR: glib: ucast: error binding socket. Retrying: Permission denied

禁用selinux

本文轉自 deng304749970 51CTO部落格,原文連結:http://blog.51cto.com/damondeng/1152283,如需轉載請自行聯系原作者