CentOS 7下Keepalived + HAProxy 搭建配置詳解
HAProxy 的安裝與配置
第一步:準備
1. 操作系統
CentOS-7-x86_64-Everything-1511
2. 安裝包
haproxy-1.7.2.tar.gz
第二步:安裝
# tar zxvf haproxy-1.7.2.tar.gz
# cd haproxy-1.7.2
# make PREFIX=/root/haproxy TARGET=linux2628
# make install PREFIX=/root/haproxy
-
PREFIX 為指定的安裝路徑
-
TARGET則根據當前操作系統內核版本指定
-
– linux22 for Linux 2.2
-
– linux24 for Linux 2.4 and above (default)
-
– linux24e for Linux 2.4 with support for a working epoll (> 0.21)
-
– linux26 for Linux 2.6 and above
-
– linux2628 for Linux 2.6.28, 3.x, and above (enables splice and tproxy)
-
本文的操作系統內核版本為3.10.0,TARGET指定為 linux2628。
第三步:配置
1. 創建配置文件
# cd haproxy
# mkdir conf
# touch haproxy.cfg
2. 編輯配置文件
配置文件內容如下:
global #全局屬性
daemon #以daemon方式在後台運行
maxconn 256 #最大同時256連接
pidfile /root/haproxy/conf/haproxy.pid #指定保存HAProxy進程號的文件
defaults #默認參數
mode http #http模式
timeout connect 5000ms #連接server端超時5s
timeout client 50000ms #客戶端響應超時50s
timeout server 50000ms #server端響應超時50s
frontend http-in #前端服務http-in
bind 192.168.6.128:9090 #監聽9090埠
default_backend servers #請求轉發至名為”servers”的後端服務
backend servers #後端服務servers
balance roundrobin #使用RR負載均衡演算法
server server1 192.168.6.128:8080 maxconn 32 #backend servers中只有一個後端服務,名字叫server1,啟在本機的8000埠,HAProxy同時最多向這個服務發起32個連接
server server2 192.168.6.129:8080 maxconn 32
server server3 192.168.6.130:8080 maxconn 32
注意:HAProxy 要求系統的 ulimit -n 參數大於 [maxconn*2+18],在設置較大的 maxconn 時,注意檢查並修改 ulimit -n 參數。
3. 將HAProxy註冊為系統服務
1)在 /etc/init.d 目錄下添加 HAProxy 服務的啟停腳本:
# vi /etc/init.d/haproxy
啟停腳本內容如下:
#!/bin/sh
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/ha/haproxy/sbin
PROGDIR=/root/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/conf/$PROGNAME.cfg
PIDFILE=$PROGDIR/conf/$PROGNAME.pid
DESC=”HAProxy daemon”
SCRIPTNAME=/etc/init.d/$PROGNAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
start()
{
echo -e “Starting $DESC: $PROGNAME\n”
$DAEMON -f $CONFIG
echo “.”
}
stop()
{
echo -e “Stopping $DESC: $PROGNAME\n”
haproxy_pid=”$(cat $PIDFILE)”
kill $haproxy_pid
echo “.”
}
restart()
{
echo -e “Restarting $DESC: $PROGNAME\n”
$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
echo “.”
}
case “$1” in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo “Usage: $SCRIPTNAME {start|stop|restart}” >&2
exit 1
;;
esac
exit 0
2)將啟動腳本添加可執行許可權
# chmod +x haproxy
4. 配置日誌
HAProxy 不會直接輸出文件日誌,需要藉助 Linux 的 rsyslog 來讓 HAProxy 輸出日誌。
1)修改 haproxy.cfg
在配置文件的 global 和 defaults 域中添加以下欄位:
global
…
log 127.0.0.1 local0 info
log 127.0.0.1 local1 warning
…
defaults
…
log global
…
意思是將 info 級(及以上)的日誌推送到 rsyslog 的 local0 介面,將 warn 級(及以上)的日誌推送到 rsyslog 的 local1 介面,並且所有 frontend 都默認使用 global 中的日誌配置。
注意:info 級的日誌會列印 HAProxy 處理的每一條請求,會佔用很大的磁碟空間,在生產環境中,建議將日誌級別調整為 notice。
2)為 rsyslog 添加 haproxy 日誌的配置
# vi /etc/rsyslog.d/haproxy.conf
配置文件內容如下:
$ModLoad imudp
$UDPServerRun 514
$FileCreateMode 0644 #日誌文件的許可權
$FileOwner root #日誌文件的owner
local0.* /var/log/haproxy.log #local0介面對應的日誌輸出文件
local1.* /var/log/haproxy_warn.log #local1介面對應的日誌輸出文件
3)修改 rsyslog 的啟動參數
# vi /etc/sysconfig/rsyslog
配置文件內容如下:
# Options for rsyslogd
# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by “-c 2”
# See rsyslogd(8) for more details
SYSLOGD_OPTIONS=”-c 2 -r -m 0″
4)重啟 rsyslog
# service rsyslog restart
返回信息:
5)用 logrotate 進行日誌切分
通過 rsyslog 輸出的日誌是不會切分的,所以需要通過 Linux 提供的 logrotate 來對日誌文件進行切分。
使用 root 用戶,創建 haproxy 日誌切分配置文件:
# mkdir /root/logrotate
# vi /root/logrotate/haproxy
配置文件內容如下:
/var/log/haproxy.log /var/log/haproxy_warn.log { #切分的兩個文件名
daily #按天切分
rotate 7 #保留7份
create 0644 root root #創建新文件的許可權、用戶、用戶組
compress #壓縮舊日誌
delaycompress #延遲一天壓縮
missingok #忽略文件不存在的錯誤
dateext #舊日誌加上日誌後綴
sharedscripts #切分後的重啟腳本只運行一次
postrotate #切分後運行腳本重載rsyslog,讓rsyslog向新的日誌文件中輸出日誌
/bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2>/dev/null) &>/dev/null
endscript
}
6)將 logrotate 配置在 crontab 中:
0 0 * * * /usr/sbin/logrotate /root/logrotate/haproxy
第四步:啟動
1. 啟動
# service haproxy start
返回信息:
2. 重啟
# service haproxy stop
返回信息:
3. 停止
# service haproxy restart
返回信息:
第五步:測試
1. 查看進程
執行以下命令:
# ps -ef|grep haproxy|grep -v grep
返回信息:
2. 查看埠
執行以下命令:
# lsof -i:9090
返回信息:
3. 查看日誌
執行以下命令:
# cat /var/log/haproxy.log
返回信息:
4. 轉發測試
提供服務的 server 為 Nginx,每個 nginx 上放入帶有本機 IP 的 HTML 頁面,相關信息如下:
IP |
Nginx 埠 |
HAProxy埠 |
192.168.6.128 |
8080 |
9090 |
192.168.6.129 |
8080 |
9090 |
192.168.6.130 |
8080 |
9090 |
頁面顯示轉發到了 192.168.6.130 主機上,返回信息:訪問地址:http://192.168.6.128:9090/hello.html
日誌顯示:
1)HAProxy 日誌
2)Nginx 日誌
此時,HAPxoxy 已成功安裝完成!
以下文章點擊率最高
Loading…