Haproxy+keepalived+Mycat高可用與負載集羣配置

架構圖

 

集羣部署圖的理解:
一、keepalived 和 haproxy 必須裝在同一臺機器上(keepalived 和haproxy 都要安裝),keepalived 負責爲該服務器搶佔 vip(虛擬 ip),搶佔到 vip 後,對該主機的訪問能夠經過原來的 ip(172.17.210.83)訪問,也能夠直接經過 vip(172.17.210.103)訪問。
二、172.17.210.64 上的 keepalived 也會去搶佔 vip,搶佔 vip 時有優先級,配置 keepalived.conf 中的(priority 150 #數值愈大,優先級越高,172.17.210.64 上改成 120,master 和 slave 上該值配置不一樣)決 定。
可是通常哪臺主機上的 keepalived 服務先啓動就會搶佔到 vip,即便是 slave,只要先啓動也能搶到。(用高版本的keepalived可能搶佔機制不同,有待測試)
三、haproxy 負責將對 vip 的請求分發到 mycat 上。起到負載均衡的做用,同時 haproxy 也能檢測到 mycat是否存活,haproxy 只會將請求轉發到存活的 mycat 上。
四、若是一臺服務器(keepalived+haproxy 服務器)宕機,另一臺上的 keepalived 會馬上搶佔 vip 並接管服務。若是一臺 mycat 服務器宕機,haporxy 轉發時不會轉發到宕機的 mycat 上,因此 mycat 依然可用。
綜上:MyCat的高可用及負載均衡由HAProxy來實現,而HAProxy的高可用,由Keepalived來實現。

 操做步驟:css

1:install-haproxymysql

2:使用keepalived監控haproxylinux

3:配置haproxy監控mycatnginx

4:配置應用經過vip訪問haproxyweb

一:安裝haproxyredis

1.1 yum -y install haproxy算法

1.2 修改配置文件sql

        vim  /etc/haproxy/haproxy.cfgvim

        

#---------------------------------------------------------------------
# Example configuration for a possible web application. See the
# full configuration options online.
#
# http://haproxy.1wt.eu/download/1.4/doc/configuration.txt
#
#---------------------------------------------------------------------後端

#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
#設置日誌
log 127.0.0.1 local0
chroot /etc/haproxy
#用戶與用戶組
user root
group root
#定義每一個haproxy進程的最大鏈接數 ,因爲每一個鏈接包括一個客戶端和一個服務器端,因此單個進程的TCP會話最大數目將是該值的兩倍。
maxconn 4096
# 以守護進程的方式運行
daemon
defaults
log global
#日誌中不記錄空鏈接
option dontlognull
# 定義鏈接後端服務器的失敗重連次數,鏈接失敗次數超過此值後將會將對應後端服務器標記爲不可用
retries 3
option redispatch
# 設置成功鏈接到一臺服務器的最長等待時間,默認單位是毫秒
timeout connect 5000
# 設置鏈接客戶端發送數據時的成功鏈接最長等待時間,默認單位是毫秒
timeout client 50000
# 設置服務器端迴應客戶度數據發送的最長等待時間,默認單位是毫秒
timeout server 60000
#統計頁面對haproxy監控的端口48800
listen admin_stats
bind 192.168.47.200:48800
mode http
#採用http日誌格式
option httplog
#統計頁面自動刷新時間
stats refresh 30s
#統計頁面url
stats uri /admin_stats
#統計頁面密碼框上提示文本
stats realm Haproxy Manager
#統計頁面用戶名和密碼設置
stats auth admin:admin
#隱藏統計頁面上HAProxy的版本信息
stats hide-version
listen mycat_service
# 綁定192.168.47.200:8067客戶端就是經過這個ip和端口進行鏈接,這個vip和端口綁定的是mycat8066端口
bind 192.168.47.200:8067
# 定義爲tcp模式
mode tcp
#採用http日誌格式
option tcplog
# 開啓對後端服務器的健康檢測
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
# 設置haproxy的調度算法
balance roundrobin
#根據調度分配到真實的後臺地址,參數解釋:port 48700:檢測mycat的端口48700, inter 5s:5秒檢測一次,rise 2:檢測成功2次表示服務器可用,fall 3:檢測失敗3次後表示服務器不可用
server mycat_213 192.168.47.213:8066 check port 48700 inter 5s rise 2 fall 3
server mycat_71 192.168.47.71:8066 check port 48700 inter 5s rise 2 fall 3
#設置服務器端迴應客戶度數據發送的最長等待時間,默認單位是毫秒
timeout server 60000
listen mycat_admin
#綁定192.168.47.200:9067端口訪問mycat9066端口
bind 192.168.47.200:9067
mode tcp
option tcplog
option httpchk OPTIONS * HTTP/1.1\r\nHost:\ www
balance roundrobin
server mycat_213 192.168.47.213:9066  check port 48700 inter 5s rise 2 fall 3
server mycat_71   192.168.47.71:9066  check port 48700 inter 5s rise 2 fall 3

timeout server 60000

說明:上面的配置中 timeout server   能夠配置大一點,否則常常會出現有時候閃斷鏈接mysql的狀況

haproxy的啓動:haproxy  -f    /etc/haproxy/haproxy.cfg

1.3:配置haproxy記錄日誌功能

默認haproxy是不記錄日誌的,爲了記錄日誌還須要配置syslog模塊,在linux下是rsyslogd服務,須要先安裝rsyslog

yum install rsyslog -y
若是沒有目錄/etc/rsyslog.d 就執行mkdir /etc/rsyslog.d
cd /etc/rsyslog.d/ touch haproxy.conf 

vim haproxy.conf
寫入一下內容

$ModLoad imudp $UDPServerRun 514 local0.* /var/log/haproxy.log 

vim /etc/rsyslog.conf
修改兩處:1在#### RULES ####上面一行加入如下內容

# Include all config files in /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf 
 

 第二處在local7.* /var/log/boot.log下面增長

local0.*                                                /var/log/haproxy.log 
 
 

 重啓rsyslog服務

systemctl restart rsyslog.service 

將rsyslog加入自動啓動服務

systemctl enable rsyslog.service 

二:安裝xinted(網絡守護進程服務)來啓動48700端口

#使用48700端口來對mycat服務進行監控

   yum  -y install xinetd

   vim /etc/xinetd.d/mycatchk

   service mycat_status

{
flags = REUSE
socket_type = stream
port = 48700
wait = no
user = root
server =/usr/local/bin/mycat_status
log_on_failure += USERID
disable = no
}

建立xinetd啓動服務腳本
vim /usr/local/bin/mycat_status

#!/bin/bash
mycat=`/soft/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 777 /usr/local/bin/mycat_status

chmod 777 /etc/xinetd.d/mycat_status

將啓動腳本加入服務
vim /etc/services
在末尾加入

mycat_status 48700/tcp # mycat_status

重啓xinetd服務systemctl restart xinetd

驗證mycat_status服務是否啓動成功

netstat -antup|grep 48700
三:keepalived安裝
三:
1:安裝依賴
yum install -y openssl-devel openssl libnl libnl-devel libnfnetlink-devel
yum -y install keepalived
我這裏網卡是ens33因此配置裏的interface爲ens33,主機1與主機2配置基本同樣,state與priority不一樣

2 :配置主機1   192.168.0.200的keepalived

! Configuration Fileforkeepalived
global_defs {
router_id ip200
}
vrrp_script chkhaproxy {
script "/etc/keepalived/scripts/check_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.47.200 dev ens33 scope global
}
track_script {
chkhaproxy
}
notify_master /etc/keepalived/scripts/haproxy_master.sh
notify_backup /etc/keepalived/scripts/haproxy_backup.sh
notify_fault /etc/keepalived/scripts/haproxy_fault.sh
notify_stop /etc/keepalived/scripts/haproxy_stop.sh
}

三、建立配置文件和腳本
a、建立檢查haproxy是否存活的腳本
vim /etc/keepalived/scripts/check_haproxy.shmkdir /etc/keepalived/scripts 

#!/bin/bash
STARTHAPROXY="/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg"
#STOPKEEPALIVED="systemctl stop keepalived"
LOGFILE="/etc/keepalived/scripts/keepalived-haproxy-state.log"
echo "[check_haproxy status]" >> $LOGFILE
A=`ps -C haproxy --no-header |wc -l`
echo "[check_haproxy status]" >> $LOGFILE
date >> $LOGFILE
if [ $A -eq 0 ];then
echo $STARTHAPROXY >> $LOGFILE
$STARTHAPROXY >> $LOGFILE 2>&1
sleep 5
fi
if [ `ps -C haproxy --no-header |wc -l` -eq 0 ];then
exit 0
else
exit 1
fi

b、建立切換到MASTER與BACKUP腳本

vim /etc/keepalived/scripts/haproxy_master.sh
vim /etc/keepalived/scripts/haproxy_backup.sh
在兩個文件中寫入如下內容

#!/bin/bash
STARTHAPROXY=`/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg`
STOPHAPROXY=`ps -ef |grep sbin/haproxy| grep -v grep|awk '{print $2}'|xargs
kill -s 9`
LOGFILE="/etc/keepalived/scripts/keepalived-haproxy-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "stop haproxy...." >> $LOGFILE 2>&1
$STOPHAPROXY >> $LOGFILE 2>&1
echo "start haproxy...." >> $LOGFILE 2>&1
$STARTHAPROXY >> $LOGFILE 2>&1
echo "haproxy stared ..." >> $LOGFILE

c、建立故障時執行的腳本

#!/bin/bash
LOGFILE=/etc/keepalived/scripts/keepalived-haproxy-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE

d、建立中止vrrp腳本
vim /etc/keepalived/scripts/haproxy_stop.sh

#!/bin/bash
LOGFILE=/etc/keepalived/scripts/keepalived-haproxy-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
[root@mycat scripts]# cat haproxy_stop.sh
#!/bin/bash
LOGFILE=/etc/keepalived/scripts/keepalived-haproxy-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE

賦予腳本可執行權限chmod 777 /etc/keepalived/scripts/*

啓動keepalived   systemctl start keepalived.service

加入開機啓動     systemctl enable keepalived.service

啓動完keepalived後再啓動haproxy

測試

在瀏覽器輸入http://192.168.47.200:48800/admin_stats

相關文章
相關標籤/搜索