1. 程式人生 > >haproxy 高可用(並使用shell寫啟動腳本)

haproxy 高可用(並使用shell寫啟動腳本)

host health shadow 功能 serve httpd 日誌審計 keepalive title


本次使用haproxy僅測試web端的高可用以及負載均衡,存在的問題是haproxy是單點,所以還需要借助keepalived對haproxy高可用,下次說明。

服務器:

*.*.*.*:haproxy

兩臺 http

需要掌握的是:

1.高可用和負載均衡;

2.系統日誌rsyslog;

3.動靜分離

一:haproxy簡介:

HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代 理,支持虛擬主機,它是免費、快速並且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點通常又需要會話保持或七層處理。HAProxy運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全的整合進您當前的架構中, 同時可以保護你的web服務器不被暴露到網絡上。

HAProxy的優點

1、HAProxy是支持虛擬主機的,可以工作在4、7層(支持多網段);

2、能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作;

3、支持url檢測後端的服務器;

4、它跟LVS一樣,本身僅僅就只是一款負載均衡軟件;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在並發處理上也是優於Nginx的;

5、HAProxy可以對Mysql讀進行負載均衡,對後端的MySQL節點進行檢測和負載均衡,不過在後端的MySQL slaves數量超過10臺時性能不如LVS;

6、HAProxy的算法較多,達到8種;

安裝:


#wget http://fossies.org/linux/misc/haproxy-1.6.9.tar.gz (這個需要先登陸到網頁查看haproxy版本,只有一個最新的版本)

#解壓

#tar -zxvf haproxy-1.6.9.tar.gz

#cd haproxy-1.6.9

#安裝

#make TARGET=linux3100 ARCH=x86_64 PREFIX=/root/haproxy #編譯

#make install PREFIX=/root/haproxy

#參數說明

TARGET=linux3100 #內核版本,

ARCH=x86_64 #系統位數

PREFIX=/root/haprpxy #/root/haprpxy為haprpxy安裝路徑

#touch /root/haproxy/conf/haproxy.cfg(此配置文件需要自己手動創建)

補充:

在Unix類操作系統上,rsyslog廣泛應用於系統日誌

。rsyslog日誌消息既可以記錄在本地文件中,也可以通過網絡發送到接收syslog的服務器。接收syslog的服務器可以對多個設備的syslog消息進行統一的存儲,或者解析其中的內容做相應的處理。常見的應用場景是網絡管理工具、安全管理系統、日誌審計系統。


先說haproxy的系統日誌設置; (註意這是centos7上面的,centos6上的文件配置不在這裏)

2. 開啟rsyslog記錄haproxy日誌功能

編輯“/etc/rsyslog.conf”打開如下配置項:

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

添加如下內容:

# Save haproxy log
local0.*                       /var/log/haproxy.log

3. 修改“/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="-r -m 0 "


相關解釋說明:
-r:打開接受外來日誌消息的功能,其監控514 UDP端口;
-x:關閉自動解析對方日誌服務器的FQDN信息,這能避免DNS不完整所帶來的麻煩;
-m:修改syslog的內部mark消息寫入間隔時間(0為關閉),例如240為每隔240分鐘寫入一次"--MARK--"信息;
-h:默認情況下,syslog不會發送從遠端接受過來的消息到其他主機,而使用該選項,則把該開關打開,所有
接受到的信息都可根據syslog.conf中定義的@主機轉發過去

4. 配置haproxy

編輯haproxy配置文件,在全局變量中配置,也就是第二行;

log 127.0.0.1 local0


###重啟服務
service  restart rsyslog

###查看日誌記錄
tailf /var/log/haproxy.log

下來手寫haproxy啟動腳本:

#!/bin/bash
#set -e
export LANG='zh_CN.UTF-8'
source /etc/init.d/functions

#PATH=$PATH:/root/haproxy/sbin
dir=/root/haproxy
name=haproxy
DAEMON=$dir/sbin/$name

CONFIG=$dir/conf/$name.cfg
#PIDFILE=$dir/conf/$name.pid
#aa=`ps -ef | grep haproxy | grep -v grep | awk '{print $2}'`


test -x $DAEMON || exit 0

start() {
  $DAEMON -f $CONFIG >/dev/null
  a=$?
  if [ $a -eq 0 ]; then
    action "haproxy服務啟動正常"   /bin/true
  fi
}
stop() {
  killall haproxy
  b=$?
  if [ $b -eq 0 ]; then
    action "haproxy服務關閉正常"   /bin/true
  fi
}
restart() {
  [ ! -n $PIDFILE ] && start || stop

  start
}
case "$1" in
start)
  start
  ;;
stop)
  stop
  ;;
restart)
  restart
   ;;
*)
  echo "正確的參數,start|stop|restart"
esac

下來時創建haproxy的配置文件:

vim /root/haproxy/conf/haproxy.cfg

global
log 127.0.0.1 local0
maxconn 65536
chroot /root/haproxy
pidfile /root/haproxy/conf/haproxy.pid
#log
#user haproxy
#group haproxy
daemon

defaults
mode  http    #默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
log global
option dontlognull  #不記錄健康檢查日誌信息
option httpclose  #每次請求完畢後主動關閉http通道,haproxy不支持keep-alive,只能模擬這種模式的實現
retries 3    #三次連接失敗就認為是服務器不可用,也可以通過後面設置
maxconn 65536
timeout connect 70000
timeout client 70000
timeout server 70000

listen stats     #監控
bind 0.0.0.0:1080           # 端口
stats uri /admin-status     # 監控的uri
stats auth admin:admin    #用戶用:密碼
mode http
option httplog


frontend main
   bind *:80
  acl web hdr(host) -i www.abc.com  #acl後面是規則名稱,-i為忽略大小寫,後面跟的是要訪問的域名,如果訪問www.abc.com這個域名,就觸發web規則,。
  acl img hdr(host) -i img.abc.com
   use_backend webserver if web #如果上面定義的web規則被觸發,即訪問www.abc.com,就將請求分發到webserver這個作用域
   use_backend imgserver if img
#   default_backend dynamic  #不滿足則響應backend的默認頁面

backend webserver
mode http
balance roundrobin
server web1  192.168.116.135:80 check inter 2000 rise 2  fall 3
server web2  192.168.116.136:80 check inter 2000 rise 2 fall 3
#check inter 2000 是檢測心跳頻率 fall 3是3次失敗認為服務器不可用,weight代表權重
backend imgserver
mode http
#option httpchk /index.php
balance roundrobin
server img01 192.168.116.136:80 check inter 2000 fall 3
server img02 192.168.116.136:80 check inter 2000 fall 3

#backend dynamic
#  balance roundrobin
#  server test1 10.0.0.152:80 check maxconn 2000
#  server test2 10.0.0.155:80 check maxconn 2000

執行結果如下:

技術分享圖片

當關閉135或者137上面的httpd服務後,就會請求另一個httpd服務。


將服務加入到系統中:

編輯/etc/init.d/haproxy添加:

#chkconfig 2345 20 80

#service haproxy

然後在外面執行命令:

#chkconfig --add haproxy

#chkconfig --list haproxy

下來就可以使用命令執行啟動和關閉了:

技術分享圖片

haproxy 高可用(並使用shell寫啟動腳本)