操做步驟: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/*
systemctl start keepalived.service
systemctl enable keepalived.service