http://www.osyunwei.com/archives/7512.html (主要參考)
http://blog.chinaunix.net/uid-25266990-id-3989321.html (次要參考)
http://xz159065974.blog.51cto.com/8618592/1405812 (動靜态分離)
http://www.cnblogs.com/dkblog/archive/2011/07/06/2098949.html
---------------------------------------------------------------
作業系統:CentOS 6.5 64位
Web伺服器:192.168.21.127、192.168.21.128
站點:bbs.osyunwei.com和sns.osyunwei.com部署在兩台Web伺服器上
實作目的:
增加兩台伺服器(主主模式),通過HAProxy+Keepalived實作Web伺服器負載均衡
架構規劃:
HAProxy伺服器:192.168.1.117、192.168.1.118
虛拟伺服器(VIP):192.168.1.20、192.168.1.30
Realserver: 192.168.1.119 192.168.1.120
部署完成之後:
1、VIP:192.168.1.20指向192.168.1.117;VIP:192.168.1.30指向192.168.1.118;
2、當192.168.1.117當機時,VIP:192.168.1.20漂移到192.168.1.118上;
3、當192.168.1.118當機時,VIP:192.168.1.30漂移到192.168.1.117上;
這樣的主主模式好處是,兩台伺服器在提供服務的同時,又互為對方的備份伺服器。
具體操作:
第一部分:在兩台HAProxy伺服器上分别操作
一、關閉SElinux、配置防火牆
1、vi /etc/selinux/config
#SELINUX=enforcing #注釋掉
#SELINUXTYPE=targeted #注釋掉
SELINUX=disabled #增加
:wq! #儲存退出
setenforce 0 #使配置立即生效
2、vi /etc/sysconfig/iptables #編輯
-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT #允許多點傳播位址通信
-A RH-Firewall-1-INPUT -p vrrp -j ACCEPT #允許VRRP(虛拟路由器備援協)通信
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT #允許80端口通過防火牆
:wq! #儲存退出
/etc/init.d/iptables restart #重新開機防火牆使配置生效
二、安裝HAProxy
1、建立HAProxy運作賬戶群組
groupadd haproxy #添加haproxy組
useradd -g haproxy haproxy -s /bin/false #建立haproxy運作賬戶haproxy并加入到haproxy組,不允許haproxy使用者直接登入系統
2、安裝編譯工具
yum install gcc gcc-c++ make openssl-devel kernel-devel
3、安裝HAProxy
HAProxy下載下傳位址:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
上傳haproxy-1.4.24.tar.gz到/usr/local/src目錄中
cd /usr/local/src #進入軟體包存放目錄
tar zxvf haproxy-1.4.24.tar.gz #解壓
cd haproxy-1.4.24 #進入安裝目錄
make TARGET=linux26 CPU=x86_64 PREFIX=/usr/local/haprpxy #編譯
make install PREFIX=/usr/local/haproxy #安裝
參數說明:
TARGET=linux26
#使用uname -r檢視核心,如:2.6.18-371.el5,此時該參數就為linux26
#kernel 大于2.6.28的用:TARGET=linux2628
CPU=x86_64 #使用uname -r檢視系統資訊,如x86_64 x86_64 x86_64 GNU/Linux,此時該參數就為x86_64
PREFIX=/usr/local/haprpxy #/usr/local/haprpxy為haprpxy安裝路徑
4、設定HAProxy
mkdir -p /usr/local/haproxy/conf #建立配置檔案目錄
mkdir -p /etc/haproxy #建立配置檔案目錄
cp /usr/local/src/haproxy-1.4.24/examples/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg #拷貝配置模闆檔案
ln -s /usr/local/haproxy/conf/haproxy.cfg /etc/haproxy/haproxy.cfg #添加配置檔案軟連接配接
cp -r /usr/local/src/haproxy-1.4.24/examples/errorfiles /usr/local/haproxy/errorfiles #拷貝錯誤頁面
ln -s /usr/local/haproxy/errorfiles /etc/haproxy/errorfiles #添加軟連接配接
mkdir -p /usr/local/haproxy/log #建立日志檔案目錄
touch /usr/local/haproxy/log/haproxy.log #建立日志檔案
ln -s /usr/local/haproxy/log/haproxy.log /var/log/haproxy.log #添加軟連接配接
cp /usr/local/src/haproxy-1.4.24/examples/haproxy.init /etc/rc.d/init.d/haproxy #拷貝開機啟動檔案
chmod +x /etc/rc.d/init.d/haproxy #添加腳本執行權限
chkconfig haproxy on #設定開機啟動
ln -s /usr/local/haproxy/sbin/haproxy /usr/sbin #添加軟連接配接
5、配置haproxy.cfg參數
cp /usr/local/haproxy/conf/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg-bak #備份
vim /usr/local/haproxy/conf/haproxy.cfg #編輯,修改 (兩台機子一樣)
在第二台機118上:scp [email protected]:/usr/local/haproxy/conf/haproxy.cfg /usr/local/haproxy/conf/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0 #在本機記錄日志
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 65535 #每個程序可用的最大連接配接數
nbproc 8 #程序數量,可以設定多個,提高處理效率
chroot /usr/local/haproxy #haproxy安裝目錄
uid 500 #運作haproxy的使用者uid(cat /etc/passwd檢視)
gid 500 #運作haproxy的組uid(cat /etc/group檢視)
daemon #以背景守護程序運作
pidfile /usr/local/haproxy/haproxy.pid #将所有程序寫入pid檔案
#debug #調試模式
#quiet #安裝模式
defaults
#log global
log 127.0.0.1 local3 #日志檔案設定
mode http #運作模式tcp、http、health
option httplog
option http-pretend-keepalive #伺服器端保持長連接配接
option http-server-close #每次請求完畢後主動關閉http通道
option forceclose #服務端響應後主動關閉請求連接配接,及早釋放服務連接配接,不必等到用戶端應答确認
option httpclose #每次請求完畢後主動關閉http通道
option accept-invalid-http-request #接受無效的http請求,一般建議不設定,但是可解決部分雜牌浏覽器通路打不開頁面問題
option dontlognull #不記錄健康檢查的日志資訊
option redispatch #如果後端有伺服器當機,強制切換到正常伺服器
option abortonclose #丢棄由于用戶端等待時間過長而關閉連接配接但仍在haproxy等待隊列中的請求
option forwardfor except 127.0.0.0/8 #不記錄本機轉發的日志
option originalto #記錄用戶端通路的目的IP
maxconn 65535 #每個程序可用的最大連接配接數
balance source #同一IP位址的所有請求都發送到同一伺服器
retries 3 #三次連接配接失敗,則判斷服務不可用
contimeout 5000 #連接配接逾時
clitimeout 50000 #用戶端逾時
srvtimeout 50000 #伺服器逾時
timeout check 5s #檢測逾時
timeout http-request 5s #http請求逾時時間
timeout queue 30s #一個請求在隊列裡的逾時時間
timeout http-keep-alive 5s #設定http-keep-alive的逾時時間
stats refresh 30s #統計頁面自動重新整理時間
stats uri /haproxy-status #統計頁面URL路徑
stats realm haproxy-status #統計頁面輸入密碼框提示資訊
stats auth admin:123456 #統計頁面使用者名和密碼
stats hide-version #隐藏統計頁面上HAProxy版本資訊
frontend web #自定義描述資訊
bind :80 #監聽80端口
acl www.ccqq.com hdr(host) -i www.ccqq.com #規則設定,-i後面是要通路的域名,如果通路bbs.osyunwei.com這個域名,就負載均衡到bbs.osyunwei.com作用域
use_backend www.ccqq.com if www.ccqq.com #acl和if後面的名稱必須相同這裡為bbs.osyunwei.com
acl img.ccqq.com hdr(host) -i img.ccqq.com #規則設定,-i後面是要通路的域名,如果通路sns.osyunwei.com這個域名,就負載均衡到sns.osyunwei.com作用域
use_backend img.ccqq.com if img.ccqq.com
backend www.ccqq.com
mode http
balance roundrobin
#option httpchk /index.php #檢測伺服器此檔案是否存在,如果沒有,則認為伺服器連接配接異常,此參數可以不設定
server web01 192.168.1.120:80 check inter 2000 rise 3 fall 3 weight 100
#inter 2000 心跳檢測時間;rise 3 三次連接配接成功,表示伺服器正常;fall 3 三次連接配接失敗,表示伺服器異常; weight 100 權重設定
server web02 192.168.1.119:80 check inter 2000 rise 3 fall 3 weight 100
backend img.ccqq.com
mode http
balance roundrobin #設定負載均衡模式,source儲存session值,roundrobin輪詢模式
#option httpchk /index.php #檢測伺服器此檔案是否存在,如果沒有,則認為伺服器連接配接異常,此參數可以不設定
server web01 192.168.1.119:80 check inter 2000 rise 3 fall 3 weight 100
server web02 192.168.1.120:80 check inter 2000 rise 3 fall 3 weight 100
#errorloc 503 http://www.osyunwei.com/404.html
errorfile 403 /etc/haproxy/errorfiles/403.http
errorfile 500 /etc/haproxy/errorfiles/500.http
errorfile 502 /etc/haproxy/errorfiles/502.http
errorfile 503 /etc/haproxy/errorfiles/503.http
errorfile 504 /etc/haproxy/errorfiles/504.http
在windows下修改 hosts :
192.168.1.20 www.ccqq.com
192.168.1.30 img.ccqq.com
二、安裝配置keepalived(2配置參考1,大體上一樣)
1、安裝配置keepalived
[root@node1 src]# yum -y install popt popt-devel popt-static openssl-devel kernel-devel libnl libnl-devel
[root@node1 src]# wget http://www.keepalived.org/software/keepalived-1.2.4.tar.gz
[root@node1 src]# tar xf keepalived-1.2.4.tar.gz
[root@node1 src]# cd keepalived-1.2.4
[root@node1 keepalived-1.2.4]# ./configure --prefix=/usr/local/keepalived
[root@node1 keepalived-1.2.4]# make && make install
[root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
[root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@node1 keepalived-1.2.4]# mkdir -p /etc/keepalived
[root@node1 keepalived-1.2.4]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@node1 keepalived-1.2.4]# chmod +x /etc/init.d/keepalived
配置
[root@node1 keepalived-1.2.4]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/opt/check_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
mcast_src_ip 192.168.1.117
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.1.20
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 52
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.30
}
}
BACKUP 機的 keepalived 配置:

! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_http_port {
script "/opt/check_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
mcast_src_ip 192.168.1.118
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.1.20
}
}
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 52
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.30
}
}
View Code
檢測腳本,為了防止haproxy服務關閉導緻keepalived不自動切換。 測了有問題
1 2 3 4 5 6 7 8 9 | |
9、啟動兩台keepalived和Haproxy服務。
|
ip addr 檢視兩台機的VIP
域名測試 是否正常
---日志問題 沒試成功------------------------------------------
1.vim /etc/rsyslog.conf
添加local0.* /var/log/haproxy.log
2.Haproxy.conf代碼
global
log 127.0.0.1 local0 info
......
3. 日志輸出在/var/log/haproxy.log下
centos 下,修改 vim /etc/sysconfig/rsyslog ,把
SYSLOGD_OPTIONS=”-m 0″ 改為 SYSLOGD_OPTIONS=”-m 0 -r”
service rsyslog restart
-----------------------------------------------
cd /
find -name haproxy
[root@carbonlinux /]rm -rf /usr/share/haproxy
[root@carbonlinux /]# rm -rf /usr/sbin/haproxy
[root@carbonlinux /]# rm -rf /usr/local/sbin/haproxy
[root@carbonlinux /]# rm -rf /usr/local/doc/haproxy
[root@carbonlinux /]# rm -rf /etc/haproxy
[root@carbonlinux /]# rm -rf /etc/rc.d/init.d/haproxy
[root@carbonlinux /]# rm -rf /var/lock/subsys/haproxy