數據庫性能優化方案(2)--keepalived haproxy mycat的高可用方案

本文的前提是Mycat已經安裝並配置完畢,Mycat已實現對MySQL的讀寫分離、主從切換,其對應服務器IP分佈爲172.19.166.238和172.19.166.239。在此基礎上,本文繼續講解Keepalived+Haproxy+Mycat的高可用方案,利用Haproxy實現Mycat集羣負載均衡,Keepalived保證Haproxy高可用。

Haproxy作爲專門的負載均衡軟件,可以工作在四層和七層,相比Nginx而言,HAProxy負載均衡策略更多,負載均衡速度更出色。

所謂的四到七層負載均衡,就是在對後臺的服務器進行負載均衡時,依據四層的信息或七層的信息來決定怎麼樣轉發流量。四層負載均衡主要是通過分析IP層及TCP/UDP層的流量實現的基於IP+端口的負載均衡。七層負載均衡位於OSI的最高層,主要考慮應用層的特徵,可根據七層的URL、瀏覽器類別等來決定怎麼進行負載均衡。

1、Haproxy安裝配置

1.1、解壓安裝haproxy

解壓haproxy-1.8.12.tar.gz

# cd /mnt/benz4s
# tar -zxvf haproxy-1.8.12.tar.gz

編譯安裝,安裝目錄安裝在/usr/local/haproxy下

# cd haproxy-1.8.12
# make TARGET=linux26 PREFIX=/usr/local/haproxy ARCH=x86_64  
# make install PREFIX=/usr/local/haproxy

參數說明

TARGET=linux26 #內核版本,使用uname -r查看內核,linux2.6以上的版本,TARGET=linux26;

ARCH=x86_64 #系統位數;

PREFIX=/usr/local/haprpxy #/usr/local/haprpxy爲haprpxy安裝路徑;

1.2、配置haproxy

創建配置文件(更詳細配置文件參數附錄部分)

# vim /usr/local/haproxy/haproxy.cfg
......
listen allmycat_service
bind 0.0.0.0:8096 #設置監聽端口,即haproxy提供的web服務端口,和lvs的vip類似
log global #應用全局的日誌設置
mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www #通過http檢測的方式進行服務的檢測
balance roundrobin
server mycat_238 172.19.166.238:8066 check port 47700 inter 5s rise 2 fall 3
server mycat_239 172.19.166.239:8066 check port 47700 inter 5s rise 2 fall 3
timeout server 20000

listen allmycat_admin
bind 0.0.0.0:8097 #轉發到mycat的9066端口,即mycat的管理控制檯端口
mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www #通過http檢測的方式進行服務的檢測
balance roundrobin
server mycat_238 172.19.166.238:9066 check port 47700 inter 5s rise 2 fall 3
server mycat_239 172.19.166.239:9066 check port 47700 inter 5s rise 2 fall 3
timeout server 20000
......

1.3、配置haproxy日誌輸出

Haproxy採用rsyslog的方式進行日誌配置,通過rpm -qa|grep rsyslog 命令判斷有沒有安裝,如果沒有安裝通過yum自行安裝即可。

找到rsyslog的配置文件

# find / -name 'rsyslog.conf'
/usr/lib/dracut/modules.d/98syslog/rsyslog.conf
/etc/rsyslog.conf
# vim /etc/rsyslog.conf

將下面兩行註釋放開
#$ModLoad imudp   
#$UDPServerRun 514
找到Save boot messages also to boot.log並在這一行下面加入
local2.*  /var/log/haproxy.log
重啓rsyslog
# service rsyslog restart

1.4、啓動關閉haproxy

啓動haproxy

# /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg

關閉haproxy

# pkill haproxy 或 killall haproxy

2、xinetd安裝配置

通過xinetd提供的http服務mycatstatus來讓Haproxy進行Mycat服務檢測,即檢測Mycat存活狀態。Haproxy通過調用該http服務獲取Mycat運行狀態。

2.1、安裝xinetd

在Mycat服務器上安裝xinetd,安裝命令yum install xinetd*

2.2、服務配置

從xinetd的配置文件/etc/xinetd.conf 找到 includedir /etc/xinetd.d,進入該目錄cd /etc/xinetd.d創建服務腳本。

# cd /etc/xinetd.d
# vim mycatstatus
service mycatstatus
{
flags = REUSE
socket_type = stream # socket連接方式
port = 47700 # 服務監聽的端口
wait = no # 是否併發
user = root # 以什麼用戶進行啓動
server =/usr/local/bin/mycatstatus # 被託管服務的啓動腳本
log_on_failure += USERID # 設置失敗時,UID添加到系統登記表
log_type = FILE /var/log/telnet.log #自定義日誌文件路徑 
disable = no #是否禁用託管服務,no表示開啓託管服務
}

xinetd服務mycat_status的監聽端口爲47700,執行腳本爲/usr/local/bin/mycatstatus,當xinetd啓動時,默認對外提供了一個mycatstatus服務。

2.3、創建託管服務啓動腳本

# cd /usr/local/bin
# vim /usr/local/bin/mycatstatus
#!/bin/bash
mycat=`/mnt/benz4s/mycat/bin/mycat status |grep 'not running'| wc -l`
if [ "$mycat" = "0" ];
then
/bin/echo -e "HTTP/1.1 200 OK\r\n"
else
/bin/echo -e "HTTP/1.1 503 Service Unavailable\r\n"
fi
# chmod +x /usr/local/bin/mycatstatus #賦予執行權限
# sh /usr/local/bin/mycatstatus #驗證腳本的正確性

該腳本檢測Mycat服務是否存活,當Mycat正在運行時,向前端返回HTTP/1.1 200 OK,表明Mycat運行正常,否則返回HTTP/1.1 503 Service Unavailable,Mycat服務異常。

2.4、添加mycatstatus服務

# vim /etc/services
mycatstatus 47700/tcp # mycatstatus
# service xinetd restart #重啓xinetd服務

3、Keepalived+Haproxy的高可用方案

如何保證Haproxy提供穩定服務,不出現單點故障情況,這裏採用Keepalived+Haproxy的高可用方案。Keepalived基於VRRP協議實現,VRRP(Virtual Router Redundancy Protocol)即虛擬路由冗餘協議,VRRP通過將一組路由器組成一個虛擬路由器(生成一個虛擬IP即VIP),這組路由器稱之爲備份組,一般會從備份組中選舉一個節點作爲master路由器,其餘爲backup路由器。VRRP的工作過程如下:

(1)備份組在啓用時會選舉優先級高的路由節點作爲主路由,優先級低的作爲備用路由;

(2)主路由會發送VRRP通告報文給備用節點,報告自己是活着的,備份路由器會開啓定時器接收通告報文。VRRP發送通告報文一般是通過組播模式進行;

(3)關於主備節點的切換有兩種模式:搶佔模式下,主備通過比對權重確定路由組內的主備角色;非搶佔模式,指定你是什麼就是什麼,即便備用節點的權重比主節點高。

3.1、Keepalived安裝配置

# yum install keepalived
# find / -name 'keepalived.conf'
/etc/keepalived/keepalived.conf
# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
vrrp_instance VI_1 {
	state MASTER         #172.19.166.239上改爲 BACKUP
	interface ens0        #對外提供服務的網絡接口,ifconfig
	virtual_router_id 100   #VRRP 組名,兩個節點的設置必須一樣,以指明各個節點屬於同一 VRRP 組
	priority 150        #數值愈大,優先級越高,172.19.166.239上改爲比150小的正整數
	advert_int 1       #同步通知間隔
	authentication {    #包含驗證類型和驗證密碼。類型主要有 PASS、AH 兩種,通常使用的類型爲 PASS,據說AH 使用時有問題
		auth_type PASS
		auth_pass 1111
	}
	virtual_ipaddress { #vip 地址    ens0  通過ifconfig獲取
		172.19.166.100 dev ens0 scope global
	}
}
啓動keepalived
# service keepalived start

3.2、crontab定時任務

通過上面的配置,我們可以將前端請求172.19.166.100轉到優先級高的物理機172.19.166.238。但此時還沒有監聽haproxy的服務實現VIP虛擬IP漂移,即監聽haproxy服務來進行vip的降級。本文將採用一種定時任務(linux自帶的crontab)的方式來實現VIP降級操作。

(1)創建checkhaproxy.sh 並編輯內容

# vim /usr/local/bin/checkhaproxy.sh
#!/bin/bash
LOGFILE='/root/log/checkHaproxy.log'
date >> $LOGFILE
count=`ps aux | grep -v grep | grep /usr/local/haproxy/sbin/haproxy | wc -l`
if [ $count = 0 ];
then
		echo 'first check fail , restart haproxy !' >> $LOGFILE
		/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
else
		exit 0
fi

sleep 3

count=`ps aux | grep -v grep | grep /usr/local/haproxy/sbin/haproxy | wc -l`
if [ $count = 0 ];
then
		echo 'second check fail , stop keepalive service !' >> $LOGFILE
		service keepalived stop
else
		echo 'second check success , start keepalive service !' >> $LOGFILE
		keepalived=` ps aux | grep -v grep | grep /usr/sbin/keepalived | wc -l`
		if [ $count = 0 ];
		then
			service keepalived start
		fi
		exit 0
fi

(2)執行 crontab -e 編輯定時任務 每一分鐘檢測haproxy服務存活,如果服務啓動不了,停掉keepalived服務,VIP即轉發至backup節點(172.19.166.239)的機器

* * * * * sh /usr/local/bin/checkhaproxy.sh

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