1. 程式人生 > >haproxy高可用之非搶占keepalived(一)

haproxy高可用之非搶占keepalived(一)

haproxy keepalived

HAProxy簡介

HAProxy是免費、極速且可靠的用於為TCP和基於HTTP應用程序提供高可用、負載均衡和代理服務的解決方案,尤其適用於高負載且需要持久連接或7層處理機制的web站點。HAProxy還可以將後端的服務器與網絡隔離,起到保護後端服務器的作用。HAProxy的負載均衡能力雖不如LVS,但也是相當不錯,而且由於其工作在7層,可以對http請求報文做深入分析,按照自己的需要將報文轉發至後端不同的服務器(例如動靜分離),這一點工作在4層的LVS無法完成。

1、安裝

# Haproxy版本為1.7.5
wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.5.tar.gz 
tar -zxvf haproxy-1.7.5.tar.gz 
mv haproxy-1.7.5 haproxy

# 編譯安裝

# ”TARGET”指定編譯對應的os對應的內核版本,通過”uname -r”查詢內核版本呢,README文件可查詢對應關系

uname -r
2.6.32-504.el6.x86_64

cd haproxy
make TARGET=linux2632 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

ls /usr/local/haproxy/
doc  sbin  share

2、編輯配置文件haproxy.cfg

# 存放haproxy配置文件
mkdir -p /usr/local/haproxy/conf

cat >> /usr/local/haproxy/conf/haproxy.cfg <<EOF
#---------------------------------------------------------------------
# Global settings 全局設置
#---------------------------------------------------------------------
global
        # 定義全局日誌,配置在本地,通過local0輸出,默認是info級別,可配置兩條
	log         127.0.0.1 local0 info
	# 運行路徑 
	chroot      /usr/local/haproxy
	# PID文件存放路徑
	pidfile /usr/local/haproxy/log/haproxy.pid
	# 設置每haproxy進程的最大並發連接數,其等同於命令行選項“-n”
        # “ulimit -n”自動計算的結果參照此參數設定.	
	maxconn 51200
	# 後臺運行haproxy
	daemon
	# 定義統計信息保存位置
	stats socket /usr/local/haproxy/stats
#---------------------------------------------------------------------
# Defaults settings 默認設置
#---------------------------------------------------------------------    
defaults
# 默認的模式【tcp:4層;http:7層;health:只返回OK】
	mode http
	# 繼承全局的日誌定義輸出
	log  global
        # 日誌類別
	option httplog
      # 如果後端服務器需要獲得客戶端真實ip需要配置的參數,可以從Http Header中獲得客戶端ip
	option forwardfor
        # 開啟http協議中服務器端關閉功能,每個請求完畢後主動關閉http通道,使得支持長連接,使得會話可以被重用,使得每一個日誌記錄都會被記錄.
   	option httpclose
   	# 如果產生了一個空連接,那這個空連接的日誌將不會記錄.
	option dontlognull
	# 當與後端服務器的會話失敗(服務器故障或其他原因)時,把會話重新分發到其他健康的服務器上;當故障服務器恢復時,會話又被定向到已恢復的服務器上;
	option redispatch
	# 還可以用”retries”關鍵字來設定在判定會話失敗時的嘗試連接的次數
	retries 3
	# 當haproxy負載很高時,自動結束掉當前隊列處理比較久的鏈接.
	option abortonclose
	# 默認http請求超時時間
	timeout http-request    10s
# 默認隊列超時時間,後端服務器在高負載時,會將haproxy發來的請求放進一個隊列中.
	timeout queue           1m
	# haproxy與後端服務器連接超時時間.
	timeout connect         10s
	# 客戶端與haproxy連接後,數據傳輸完畢,不再有數據傳輸,即非活動連接的超時時間.
	timeout client          10m
	# haproxy與後端服務器非活動連接的超時時間.
	timeout server          10m
	# 默認新的http請求連接建立的超時時間,時間較短時可以盡快釋放出資源,節約資源.
	timeout http-keep-alive 10s
	# 心跳檢測超時時間
	timeout check           10s
	#最大並發連接數
	maxconn                 3000

#---------------------------------------------------------------------
# listen haproxy UI 監控頁面配置
#---------------------------------------------------------------------
listen admin_status
# 配置監控運行模式
	mode http 
	# 配置統計頁面訪問端口
	bind 0.0.0.0:1080
	# 統計頁面默認最大連接數
	maxconn 10
	# http日誌格式
	option httplog
	# 開啟統計
	stats enable
	# 監控頁面自動刷新時間
	stats refresh 30s
	# 統計頁面訪問url,即訪問http://ip:1080/stats
	stats uri /stats
	#監控頁面的用戶和密碼:admin,可設置多個用戶名
	stats auth admin:admin
	# 手工啟動/禁用後端服務器,可通過web管理節點
	stats admin if TRUE
	
	# 設置haproxy錯誤頁面
	errorfile 400 /usr/local/haproxy/errorfiles/400.http
	errorfile 403 /usr/local/haproxy/errorfiles/403.http
	errorfile 408 /usr/local/haproxy/errorfiles/408.http
	errorfile 500 /usr/local/haproxy/errorfiles/500.http
	errorfile 502 /usr/local/haproxy/errorfiles/502.http
	errorfile 503 /usr/local/haproxy/errorfiles/503.http
	errorfile 504 /usr/local/haproxy/errorfiles/504.http

#---------------------------------------------------------------------
# main frontend which proxys to the backends frontend配置
#---------------------------------------------------------------------	
frontend kube-apiserver
# 定義前端監聽端口,建議采用bind *:80的形式,否則做集群高可用的時候有問題,vip切換到其余機器就不能訪問.
	bind *:80
        mode http
        #如果以上規則都不匹配時,將請求轉交到app組處理.
	default_backend app

#---------------------------------------------------------------------
# round robin balancing between the various backends backend配置
#---------------------------------------------------------------------
backend app
# 根據http頭進行轉發,無該頭部則轉為使用roundrobin.
	balance roundrobin
	option forwardfor except 127.0.0.0/8
	
	# 後端服務器定義, maxconn 1024表示該服務器的最大連接數, cookie 1表示serverid為1,weight代表權重(默認1,最大為265,0則表示不參與負載均衡),
	#check inter 1500是檢測心跳頻率, rise 2是2次正確認為服務器可用, fall 3是3次失敗認為服務器不可用.
        server app1 192.168.15.160:8080 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 5 
        server app2 192.168.14.107:8080 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 5
        server app3 192.168.15.170:8080 maxconn 1024 cookie 1 weight 3 check inter 1500 rise 2 fall 5


3、拷貝所需文件

# errorfile錯誤文件
cp -R haproxy/examples/errorfiles/ /usr/local/haproxy/
# haproxy日誌文件
mkdir -p /usr/local/haproxy/log
touch /usr/local/haproxy/log/haproxy.log
ln -s /usr/local/haproxy/log/haproxy.log /var/log/
# etc中的haproxy文件
mkdir -p /etc/haproxy
ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/
# 配置開機自動啟動
cp haproxy/examples/haproxy.init /etc/rc.d/init.d/haproxy
chmod +x /etc/rc.d/init.d/haproxy
chkconfig --add haproxy
chkconfig haproxy on
# 設置全局啟動文件
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin/

4、配置rsyslog

haproxy默認沒有日誌,依靠rsyslog收集日誌

# 註意loacl0需要與haproxy.cfg文件中對應
echo -e ‘$ModLoad imudp \n $UDPServerRun 514 \n local0.* /var/log/haproxy.log‘ >> /etc/rsyslog.conf
# 重啟rsyslog服務
service rsyslog restart


本文出自 “linux_cheng” 博客,請務必保留此出處http://6764097.blog.51cto.com/6754097/1954169

haproxy高可用之非搶占keepalived(一)