keepalive+mysql-ha

一、MHA優缺點

優點:

1、MHA自動化主服務器故障轉移,快速將從服務器晉級爲主服務器(通常在10-30s),而不影響複製的一致性,不會有性能損耗,容易安裝,不必更改現有的部署環境,適用於任何存儲引擎。

2、MHA提供在線主服務器切換,改變先正運行的主服務器到另外一臺上,這個過程只需0.5-2s的時間,這個時間內數據無法寫入。MHA Manager通過ssh連接mysql slave服務器。

3、使用半同步複製,可以大大降低數據丟失的風險。MHA可以與半同步複製結合起來。如果只有一個slave已經收到了最新的二進制日誌,MHA可以將最新的二進制日誌應用於其他所有的slave服務器上,因此他們彼此保持一致性。

缺點:

1、雖然MHA試圖從宕機的主服務器上保存二進制日誌,但也會有問題。例如,如果主服務器硬件故障或無法通過ssh訪問,MHA沒法保存二進制日誌,只進行故障轉移而丟失最新數據。

2、當主DB故障,切換到另外的服務器上後,即使恢復了原來的主DB,也不能立即加入整套MHA系統中,得重新部署。而且當發生一次切換後,管理節點的監控進程就會自動退出,需要用腳本來自動啓動。另外還得刪除app1.failover.complete這個文件,否則新的主DB出現問題MHA就不會切換了。

二、簡單的架構圖

MHA最少需要兩臺服務器組成,也就是M-S架構,並使用從DB作爲監控機。

本次整理的方案使用了4臺虛擬機,爲M-M-S加監控機的組合。

Mysql請求發往VIP:10.1.1.190,當現有的主(10.1.1.191)故障,VIP會指向10.1.1.192,mysql請求也會轉過去。

請看簡圖:

 

一、環境搭建

1、部署MHA

MHA節點包含三個腳本,依賴perl模塊。

save_binary_logs:保存和複製當掉的主服務器二進制日誌。

apply_diff_relay_logs:識別差異的relay log事件,並應用於其他salve服務器。

purge_relay_logs:清除relay log文件。

需要在所有mysql服務器上安裝MHA節點,MHA管理服務器也需要安裝。MHA管理節點模塊內部依賴MHA節點模塊。MHA管理節點通過ssh連接管理mysql服務器和執行MHA節點腳本。MHA節點依賴perlDBD::mysql模塊。

a)安裝MHA Node,4臺機器都需要安裝

yum –y install perl-DBD-MySQL

wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.54.tar.gz

tar zxf mha4mysql-node-0.54.tar.gz

cd mha4mysql-node-0.54

perl Makefile.PL

make && make install

b)安裝MHA manager,只需要安裝在監控機(10.1.1.112)

yum –y install perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager 

wget http://mysql-master-ha.googlecode.com/files/mha4mysql-manager-0.54.tar.gz

tar zxf mha4mysql-manager-0.54.tar.gz

cd mha4mysql-manager-0.54

perl Makefile.PL

make && make install

需要注意的是mha-manager和mha-node版本必須一致,另外切記管理機也要安裝node包。

2、部署keepalive

2.1在10.1.1.191和10.1.1.192上部署keepalived

wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz

tar zxvf keepalived-1.1.17.tar.gz

cd keepalived--1.1.17.tar.gz

./configure --prefix=/usr/local/keepalived

make 
make install
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
mkdir /etc/keepalived

MASTER Keepalived的配置:

cat /etc/keepalived/keepalived.conf

#Configuration File for keepalived

global_defs {

notification_email {######定義接受郵件的郵箱

[email protected]

}

notification_email_from [email protected]######定義發送郵件的郵箱

smtp_server mail.tuge.com

smtp_connect_timeout 10

}

vrrp_script check_mysql {######定義監控mysql的腳本

script "/etc/keepalived/check_mysql.sh"

interval 2######監控時間間隔

weight 2######負載參數

}

vrrp_instance vrrptest {######定義vrrptest實例

state MASTER######服務器狀態(主爲MASTER,從爲BACKUP)

interface eth0######使用的接口

virtual_router_id 51######虛擬路由的標誌,一組lvs的虛擬路由標識必須相同,這樣才能切換

priority 150######服務啓動優先級,值越大,優先級越高,BACKUP 不能大於MASTER

advert_int 1######服務器之間的存活檢查時間

notify /etc/keepalived/alert.sh######keepalive發生切換的報警郵件

authentication {

auth_type PASS######認證類型

auth_pass ufsoft######認證密碼,一組lvs 服務器的認證密碼必須一致

}

track_script {######執行監控mysql進程的腳本

check_mysql

}

virtual_ipaddress {######虛擬IP地址

10.1.1.190

}

}

BACKUP Keepalived的配置

cat /etc/keepalived/keepalived.conf

#Configuration File for keepalived

global_defs {

notification_email {######定義接受郵件的郵箱

[email protected]

}

notification_email_from [email protected]######定義發送郵件的郵箱

smtp_server mail.tuge.com

smtp_connect_timeout 10

}

vrrp_script check_mysql {######定義監控mysql進程的腳本

script "/etc/keepalived/check_mysql.sh"

interval 2######監控時間間隔

weight 2######負載參數

}

vrrp_instance vrrptest {######定義vrrptest實例

state BACKUP######服務器狀態(主爲MASTER,從爲BACKUP)

interface eth0######使用的接口

virtual_router_id 51######虛擬路由的標誌,一組lvs的虛擬路由標識必須相同,這樣才能切換

priority 100######服務啓動優先級,值越大,優先級越高,BACKUP 不能大於MASTER

advert_int 1######服務器之間的存活檢查時間

notify /etc/keepalived/alert.sh######keepalive發生切換的報警郵件

authentication {

auth_type PASS######認證類型

auth_pass ufsoft######認證密碼,一組lvs 服務器的認證密碼必須一致

}

track_script {######執行監控NGINX進程的腳本

check_mysql

}

virtual_ipaddress {######虛擬IP地址

10.1.1.190

}

}

2.2監控腳本說明:

2.2.1監控mysql

/etc/keepalived/check_mysql.sh

#!/bin/bash

if [ "$(ps -ef | egrep "mysqld|mysqld_safe" | grep -v egrep )" == "" ]

then

/etc/init.d/keepalived stop

fi

功能:判斷當mysql進程不存在,則kill掉keepalive,將虛擬IP切換到BACKUP-Keepalive。

 

2.2.2 監控腳本/etc/keepalived/alert.sh

主要是在keepalive發生切換的時候發郵件報警用的。

初步的架構就這樣了,具體還得調整,盼大牛指教。

 

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