Centos7-Haproxy+Keepalived架構(gòu)

需求:使用Haproxy對兩臺Nginx做負(fù)載均衡扮授,并且兩臺Haproxy之間做keepalived坟奥,Nginx代理后端tomcat

Haproxy(keepalived)主:172.16.10.102

Haproxy(keepalived)備:172.16.10.142

keepalived vip:172.16.10.188

Nginx1:172.16.10.162

Nginx2:172.16.10.167

安裝Haproxy并設(shè)置日志以及Nginx配置這里就不說了

配置Haproxy(兩臺一樣)

# vim /etc/haproxy/haproxy.cfg

global

log???????? 127.0.0.1 local2

chroot????? /var/lib/haproxy

pidfile???? /var/run/haproxy.pid

maxconn???? 4000

user??????? haproxy

group?????? haproxy

daemon

stats socket/var/lib/haproxy/stats

defaults

mode??????????????? ????tcp

log???????????????????? global

option????????????????? tcplog

option????????????????? dontlognull

option http-server-close

option forwardfor?????? except 127.0.0.0/8

option????????????????? redispatch

retries???????????????? 3

timeout http-request??? 10s

timeout queue?????????? 1m

timeout connect???????? 10s

timeout client????????? 100m

timeout http-keep-alive 10s

timeout check?????????? 10s

maxconn???????????????? 3000

listen nginx-http

bind 0.0.0.0:80

mode tcp

balance source

server s1 172.16.10.167:80check

server s2 172.16.10.162:80check

listen nginx-https

bind 0.0.0.0:443

mode tcp

balance source

server s1 172.16.10.167:443check

server s2 172.16.10.162:443check

安裝keepalived

# yum install keepalived -y

配置keepalived主

# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

interval 2

weight 2

router_id LVS_DEVEL

}

vrrp_script chk_haproxy {

script"/etc/keepalived/check_haproxy.sh"

interval 2

weight 2

}

vrrp_instance VI_1 {

state MASTER

interface eno16777736? #用來發(fā)VRRP包的網(wǎng)卡

virtual_router_id 51

priority 100

advert_int 1

authentication {

auth_type PASS

auth_pass 5555

}

track_script {

chk_haproxy ?#監(jiān)測haproxy進(jìn)程狀態(tài)

}

virtual_ipaddress {

172.16.10.188

}

}

配置keepalived備

# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

interval 2

weight 2

router_id LVS_DEVEL

}

vrrp_script chk_haproxy {

script"/etc/keepalived/check_haproxy.sh"

interval 2

weight 2

}

vrrp_instance VI_1 {

state BACKUP

interface eno16777736? #用來發(fā)VRRP包的網(wǎng)卡

virtual_router_id 51

priority 99

advert_int 1

authentication {

auth_type PASS

auth_pass 5555

}

track_script {

chk_haproxy ?#監(jiān)測haproxy進(jìn)程狀態(tài)

}

virtual_ipaddress {

172.16.10.188

}

}

Haproxy進(jìn)程狀態(tài)檢測腳本

# vim /etc/keepalived/check_haproxy.sh

#!/bin/bash

Hostname=Haproxy-102

date=`date +"%Y-%m-%d %H:%M:%S"`

mail=15001098653@163.com

if [ `ps -C haproxy --no-header | wc -l` -eq 0 ];then

systemctl start haproxy

echo "$date $Hostname Haproxy started by keepalived" | mail -s"$Hostname Haproxy started by keepalived" $mail

fi

Keepalived主從切換狀態(tài)檢測腳本

因?yàn)閗eepalived在vip切換時哩都,在haproxy日志中會有輸出绽诚,所以檢測haproxy日志就可以

# vim /usr/local/shell/check_keepalived.sh

#!/bin/bash

#主機(jī)名

Hostname=Haproxy-102

#收件人

mail=********@163.com

#記錄上一次的行數(shù)

Last_num_d=/tmp/keepalived/lastnum

#日志目錄

Log_directory=/var/log/haproxy

#目錄判斷

d_judge(){

[ ! -d $1 ] && mkdir -p $1

}

d_judge $Last_num_d

for logfile in `ls $Log_directory | grep haproxy.log`; do

#先判斷當(dāng)前日志目錄是否為空监署,為空直接退出循環(huán)

[ ! -s $Log_directory/$logfile ]&& echo "`date` $logfile is empty" && continue

#判斷記錄上一次檢查的行數(shù)的文件是否存在日麸,不存在則給一個初始值

[ ! -f"$Last_num_d/$logfile" ] && echo 1 > $Last_num_d/$logfile

#將上一次值賦給變量

last_count=`cat$Last_num_d/$logfile`

new_last_count=`expr $last_count+ 1`

#將當(dāng)前的行數(shù)值賦給變量

current_count=`grep -Fc"" $Log_directory/$logfile`

#判斷當(dāng)前行數(shù)跟上一次行數(shù)是否相等寄啼,相等則退出當(dāng)前循環(huán)

[ $last_count -eq $current_count] && echo "`date` $logfile no change" && continue

#由于日志文件每天都會截斷,因此會出現(xiàn)當(dāng)前行數(shù)小于上一次行數(shù)的情況代箭,此種情況出現(xiàn)則將上一次行數(shù)置1

[ $last_count -gt $current_count] && last_count=1 && echo $last_count > $Last_num_d/$logfile&& continue

#截取上一次檢查到的行數(shù)至當(dāng)前行數(shù)的日志并檢索出含有" removed "字段的日志墩划,并重定向到相應(yīng)的ERROR日志文件

sed -n"$new_last_count,$current_count p" $Log_directory/$logfile | grep 'IP172.16.10.188 removed' > $Error_log/$logfile && echo "`date`$logfile error " || echo "`date` $logfile changed but no error"

#判斷ERROR日志是否存在且不為空,不為空則說明有錯誤日志梢卸,繼而發(fā)送報警信息

[ -s $Error_log/$logfile ] && echo -e"$HOSTNAME \n `cat $Error_log/$logfile`" | mail -s "$HostnameKeepalived VIP Removed" $mail

#截取上一次檢查到的行數(shù)至當(dāng)前行數(shù)的日志并檢索出含有" added "字段的日志走诞,并重定向到相應(yīng)的ERROR日志文件

sed -n"$new_last_count,$current_count p" $Log_directory/$logfile | grep 'IP172.16.10.188 added' > $Error_log/$logfile && echo "`date`$logfile error " || echo "`date` $logfile changed but no error"

#判斷ERROR日志是否存在且不為空,不為空則說明有錯誤日志蛤高,繼而發(fā)送報警信息

[ -s $Error_log/$logfile ]&& echo -e "$HOSTNAME \n `cat $Error_log/$logfile`" | mail -s"$Hostname Keepalived VIP Added" $mail

#結(jié)束本次操作之后把當(dāng)前的行號作為下一次檢索的last number

echo $current_count >$Last_num_d/$logfile

done

添加計劃任務(wù)每分鐘執(zhí)行

# crontab -e

* * * * * /usr/local/shell/check_keepalived.sh

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚣旱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子戴陡,更是在濱河造成了極大的恐慌塞绿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恤批,死亡現(xiàn)場離奇詭異异吻,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)喜庞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門诀浪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人延都,你說我怎么就攤上這事雷猪。” “怎么了晰房?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵求摇,是天一觀的道長。 經(jīng)常有香客問我殊者,道長与境,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任猖吴,我火速辦了婚禮摔刁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘海蔽。我一直安慰自己簸搞,他們只是感情好扁位,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趁俊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刑然。 梳的紋絲不亂的頭發(fā)上寺擂,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音泼掠,去河邊找鬼怔软。 笑死,一個胖子當(dāng)著我的面吹牛择镇,可吹牛的內(nèi)容都是我干的挡逼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼腻豌,長吁一口氣:“原來是場噩夢啊……” “哼家坎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吝梅,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤虱疏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后苏携,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體做瞪,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年右冻,在試婚紗的時候發(fā)現(xiàn)自己被綠了装蓬。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡纱扭,死狀恐怖牍帚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跪但,我是刑警寧澤履羞,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站屡久,受9級特大地震影響忆首,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜被环,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一糙及、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧筛欢,春花似錦浸锨、人聲如沸唇聘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迟郎。三九已至,卻和暖如春聪蘸,著一層夾襖步出監(jiān)牢的瞬間宪肖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工健爬, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留控乾,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓娜遵,卻偏偏與公主長得像蜕衡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子设拟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容