Redhat5下haproxy+keepalived+nginx配置笔记
Redhat5下haproxy+keepalived+nginx配置筆記
----by knight
?HA:高可用性
keepalived個人簡單理解就是實現一個虛IP在keepalived主從服務器之間切換的功能,當主的keeplived掛掉,從機會無縫接管該虛IP。
keepalived它作為一個輔助實現高可用性工具,一般都會配合某個具體服務工作,例如mysql,drbd,haproxy等,本篇介紹的就是haproxy,在前期做好keepalived配置后,做一個切換腳本,當haproxy掛掉后,腳本會立即執行keepalived關閉操作,從而讓從機接管,該虛IP其實會和本機的物理IP做綁定,訪問虛IP其實就可以理解為訪問本機物理IP,該虛IP會在腳本被觸發后切換到從機,而后訪問虛IP也就是在訪問從機物理IP,從而實現haproxy的高可用性。
這個實驗模擬的功能其實就是利用haproxy實現apache服務器間的負載均衡,緩解并發壓力,并保證haproxy-master若掛掉,haproxy-backup能無縫接管,實現WEB站點負載均衡+高可用性。保證客戶端無縫獲取網站資源。
解決方案:
系統環境:centos5
nginx: nginx-1.2.8
haproxy: haproxy-1.4.8
keepalived:keepalived-1.2.7
haproxy VIP(虛擬ip): ? ? ? ? ? ? ? ? 192.168.1.120
haproxy-master(haproxy1): ? ?192.168.1.108 ? ?www1.example.com
haproxy-backup(haproxy2): ? ? 192.168.1.109 ? www2.example.com
nginx1: ? ? ? ? ? ? ? ? ? ? 192.168.1.108 ? www1.example.com
nginx2: ? ? ? ? ? ? ? ? ? ? 192.168.1.109 ? www2.example.com
由于我只開了兩個虛擬機,所以loadbalancer(負載均衡器)也做web。
192.168.1.108 ==192.168.7.71
192.168.1.109 ==192.168.7.72
192.168.1.108 == 192.168.7.73 web1
192.168.1.109 == 192.168.7.74
(haproxy1)為僅haproxy1配置
(haproxy2)為僅haproxy2配置
(haproxy1,haproxy2)為haproxy1和haproxy2都得配置
部署環境:
1.關閉iptables和SELINUX
# service iptables stop
# setenforce 0
# vi /etc/sysconfig/selinux
---------------
SELINUX=disabled
---------------
2.nginx安裝
這里不做介紹。
安裝完畢只需配置客戶端瀏覽器訪問根頁面顯示本機IP地址。
一.haproxy安裝配置:(haproxy1,haproxy2)
# wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.8.tar.gz
# tar zxvf haproxy-1.4.8.tar.gz
# cd haproxy-1.4.8
# uname -a ? ? ? ? ?//查看linux內核版本
# make TARGET=linux26 PREFIX=/usr/local/haproxy
# make install PREFIX=/usr/local/haproxy
# useradd -s /sbin/nologin haproxy
# passwd haproxy
# chown -R haproxy.haproxy /usr/local/haproxy
配置:
# vi /usr/local/haproxy/haproxy.cfg
-----------------
global
log 127.0.0.1 local0
maxconn 5120 ?
chroot /usr/local/haproxy ?
user haproxy ?
group haproxy ?
daemon ?
quiet ?
nbproc ?1 ?
pidfile /usr/local/haproxy/haproxy.pid
#啟動服務后后會滾動日志,生產環境建議注釋掉
debug ?
defaults
log 127.0.0.1 local3 ?
mode http ?
option httplog
option httpclose
option ?dontlognull
#option ?forwardfor ?
option ?redispatch
retries 2
maxconn 2000
balance source ?
contimeout ? ? ?5000 ?
clitimeout ? ? ?50000 ?
srvtimeout ? ? ?50000 ?
listen 192.168.1.120 :81//由于負載均衡器和web是同一臺所以不能用80,會端口沖突。
? ? server www1 192.168.1.108:80 ?weight 5 check inter 2000 rise 2 fall 5
? ? server www2 192.168.1.109:80 ?weight 5 check inter 2000 rise 2 fall 5
listen stats :8888 ? //監控頁面端口
mode http ?
#transparent ?
stats uri / haproxy-stats ?
stats realm Haproxy \ statistic
#認證
stats auth haproxy:password ? //haproxy監控頁面的帳密
-----------------
啟動haproxy
# /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/haproxy.cfg &
注:這里加上“&”是為了讓haproxy服務后臺運行,去掉“&”可實時查看其滾動日志
日志:
------------------------
Available polling systems :
? ?sepoll : pref=400, test result OK
? ? epoll : pref=300, test result OK
? ? ?poll : pref=200, test result OK
? ?select : pref=150, test result OK
Total: 4 (4 usable), will use sepoll.
Using sepoll() as the polling mechanism.
00000000:web_proxy.accept(0004)=0007from [192.168.7.129:5752]
00000000:web_proxy.clireq[0007:ffff]:GET / HTTP/1.1
00000000:web_proxy.clihdr[0007:ffff]:Accept: text/html, application/xhtml+xml, */*
00000000:web_proxy.clihdr[0007:ffff]:Accept-Language: zh-CN
00000000:web_proxy.clihdr[0007:ffff]:User-Agent: Mozilla/5.0 (compatible; MSIE
9.0; Windows NT 6.1; WOW64; Trident/5.0)
00000000:web_proxy.clihdr[0007:ffff]:Accept-Encoding: gzip, deflate
00000000:web_proxy.clihdr[0007:ffff]:Host: 192.168.7.71
00000000:web_proxy.clihdr[0007:ffff]:If-Modified-Since: Tue, 28 May 2013 18:22:10
GMT
00000000:web_proxy.clihdr[0007:ffff]:If-None-Match: "10-4ddcb57ecf1ee"
00000000:web_proxy.clihdr[0007:ffff]: Connection:Keep-Alive
00000000:web_proxy.srvrep[0007:0008]:HTTP/1.1 304 Not Modified
00000000:web_proxy.srvhdr[0007:0008]:Date: Tue, 28 May 2013 19:48:35 GMT
00000000:web_proxy.srvhdr[0007:0008]:Server: Apache/2.4.4 (Unix)
00000000:web_proxy.srvhdr[0007:0008]:Connection: close
00000000:web_proxy.srvhdr[0007:0008]:ETag: "10-4ddcb57ecf1ee"
00000000:web_proxy.srvcls[0007:0008]
00000000:web_proxy.clicls[0007:0008]
00000000:web_proxy.closed[0007:0008]
------------------------
查看是否啟動
# ps -ef|grep haproxy
重啟haproxy
# pkill haproxy
# /usr/local/haproxy/sbin/haproxy -f/usr/local/haproxy/haproxy.cfg
其中:
haproxy代理:192.168.1.120:81
nginx1: ? ?192.168.1.108:80
nginx2: ? ?192.168.1.109:80
統計頁面監聽的端口:8888
訪問頁面:
http://192.168.1.108:8888
認證賬號/密碼:haproxy/password
總結:
通過日志可以看出,客戶端192.168.1.103連接haproxy192.168.7.71的80端口,且客戶端無論如何刷新頁面,haproxy都只會把訪問請求跳轉到nginx的192.168.1.109地址,這是因為balance source這個參數會保持會話ID,如果改成balance roundrobin模式,那么客戶端會輪流連接兩臺web服務器,線上還是建議使用balance source,這樣會保持某一客戶端在長時間內保持他的會話,不會來回跳轉。
這里其實已經利用haproxy完成了對兩臺nginx服務器的負載均衡功能,但如何保證負載均衡的高可用性,這里就得利用keepalived的熱備功能,保證haproxy1如果掛掉,haproxy2能實時接管,實現網站前端負載均衡高可用,這也是我們目前比較流行的組合haproxy+keepalived。
二.keepalived安裝配置:(haproxy1,haproxy2)
# wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
# tar zxvf keepalived-1.2.7.tar.gz
# cd keepalived-1.2.7
# ./configure--prefix=/usr/local/keepalived --with-kernel-
dir=/usr/src/kernels/2.6.32-279.el6.x86_64
# make && make install
設置keepalived啟動腳本
# cp/usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
# cp/usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# mkdir /etc/keepalived
# cp/usr/local/keepalived/sbin/keepalived /usr/sbin/
# chkconfig keepalived on
(haproxy1)
# vi /etc/keepalived/keepalived.conf
----------------------
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.120
}
}
----------------------
(haproxy2)
# vi /etc/keepalived/keepalived.conf
----------------------
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.120
}
}
----------------------
啟動keepalived
# service keepalived start
# ps -ef |grep keepalived
----------------------
注:在沒有做haproxy+keepalived的腳本(check_haproxy.sh)是沒有紅色框那一行
-----------------------
創建haproxy+keepalived腳本:
實現當haproxy掛掉后,能再次啟動haproxy,若無法再次啟動則徹底關閉keepalived將VIP交給
從機處理。
(haproxy1,haproxy2)
# vi /etc/keepalived/check_haproxy.sh
---------------------
#!/bin/bash
while :
do
hapid=`ps -C haproxy --no-header |wc -l`
?if [ $hapid -eq 0 ];then
?/usr/local/haproxy/sbin/haproxy-f /usr/local/haproxy/haproxy.cfg
?sleep 5
? ?if [ $hapid -eq 0 ];then
? ?/etc/init.d/keepalivedstop
? ?fi
?fi
?sleep 5
done
--------------------
改執行權限
# chmod 755 /etc/keepalived/check_haproxy.sh
強制后臺執行(關閉客戶端連接也會繼續運行)
# nohup sh /etc/keepalived/check_haproxy.sh
三.測試:
1.在兩臺機器上分別執行ip add,目前顯示VIP在haproxy1上與本機網卡綁定
(haproxy1)
# ip add
-----------------------
-----------------------
(haproxy2)
# ip add
-----------------------
-----------------------
在瀏覽器訪問該虛IP:
http://192.168.1.120
返回如圖:
證明,keepalived讓haproxy1接管負載均衡,將頁面跳轉到nginx1上
2.停掉haproxy1上的haproxy服務,5秒后keepalived會自動將其再次啟動
(haproxy1)
# pkill haproxy
等5秒
# ps -ef |grep haproxy
--------------
--------------
3.停掉主的keepalived,備機馬上接管服務
(haproxy1)
# service keepalived stop
# uname -a
---------------
---------------
(haproxy2)
# ip add
現已跳轉到haproxy2,在瀏覽器再次訪問該虛IP:
http://192.168.7.70
返回如圖:
OK
轉載于:https://blog.51cto.com/zlong37/1377495
總結
以上是生活随笔為你收集整理的Redhat5下haproxy+keepalived+nginx配置笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转:模态对话框的支持 (IE,Firef
- 下一篇: mysql客户端工具的使用