haproxy+keepalived實現高可用負載平衡(執行個體配置)

來源:互聯網
上載者:User

作者:split_two

環境四台機器都是RedHat4.8(64位)版本:

IP地址 用處
192.168.5.55 MASTER
192.168.2.73 BACKUP
192.168.5.54 負載A
192.168.5.57 負載B
192.168.2.100 VIP

1、MASTER上安裝haproxy

複製代碼 代碼如下:wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz /root

解壓到目前的目錄
tar zxvf haproxy-1.3.20.tar.gz
進到此目錄
cd haproxy-1.3.20
編譯及安裝,安裝到/usr/local目錄,但是安裝完此目錄下沒有haproxy檔案夾,我也很奇怪!
make TARGET=linux26 prefix=/usr/local/haproxy install
但是出來的結果會提示如下資訊

install -d /usr/local/sbin
install haproxy /usr/local/sbin
install -d /usr/local/share/man/man1
install -m 644 doc/haproxy.1 /usr/local/share/man/man1
install -d /usr/local/doc/haproxy
for x in configuration architecture haproxy-en haproxy-fr; do \
install -m 644 doc/$x.txt /usr/local/doc/haproxy ; \
done

提示你啟動haproxy在sbin目錄,其餘的在doc目錄
進入到haproxy目錄
cd /usr/local/doc/haproxy
建立一個haproxy主設定檔

複製代碼 代碼如下:vi haproxy.cfg
global
log 127.0.0.1 local0
maxconn 4096
chroot /usr/local/doc/haproxy
uid 501
gid 501
daemon
nbproc 1
pidfile /usr/local/doc/haproxy/haproxy.pid
defaults
log 127.0.0.1 local3
mode http
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
retries 2
maxconn 2000
balance roundrobin
stats uri /haproxy-status 查看狀態
stats hide-version 隱藏haproxy版本
stats realm Gemini\ Haproxy 查看狀態需要口令
stats auth admin:admin 使用者名稱和密碼
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen web_proxy 192.168.2.100:80
server web1 192.168.5.54:8080 cookie app1inst1 check inter 2000 rise 2 fall 5
server web2 192.168.5.57:8080 cookie app1inst2 check inter 2000 rise 2 fall 5

2、MASTER安裝keepalived
tar zxvf keepalived-1.1.15.tar.gz
vi /usr/src/kernels/2.6.9-89.EL-smp-x86_64/include/linux/types.h
將如下兩行注釋掉,否則編譯會出錯,跟我這個版本的系統有關係,你的也許不要!

複製代碼 代碼如下:/*
typedef __u16 __bitwise __sum16;
typedef __u32 __bitwise __wsum;
*/
cd keepalived-1.1.15
./configure
make
make install

將keepalived作為系統服務啟動

cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived/
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/
vi /etc/keepalived/keepalived.conf內容如下:

複製代碼 代碼如下:! Configuration File for keepalived
global_defs {
router_id LVA_DEVEL
}
vrrp_script chk_http_port {
script "/root/check_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.2.100
}
}

上面調用了一個指令碼check_haproxy.sh,內容如下:複製代碼 代碼如下:#!/bin/bash
A=`ps -C haproxy --no-header | wc -l`
if [ $A -eq 0 ];then
/usr/local/sbin/haproxy -f /usr/local/doc/haproxy/haproxy.cfg
echo "haproxy start"
sleep 3
if [ `ps -C haproxy --no-header | wc -l` -eq 0 ];then
/etc/init.d/keepalived stop
echo "keepalived stop"
fi
fi

3、BACKUP上安裝haproxy,步驟就不詳細介紹,和MASTER上面一樣的。
haproxy.conf內容如下複製代碼 代碼如下:global
log 127.0.0.1 local0
maxconn 4096
chroot /usr/local/doc/haproxy
uid 501
gid 501
daemon
nbproc 1
pidfile /usr/local/doc/haproxy/haproxy.pid
defaults
log 127.0.0.1 local3
mode http
option httplog
option httpclose
option dontlognull
option forwardfor
option redispatch
retries 2
maxconn 2000
balance roundrobin
stats uri /haproxy-status
stats hide-version
stats realm Gemini\ Haproxy
stats auth admin:admin
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen web_proxy 192.168.2.100:80
server web1 192.168.5.54:8080 cookie app1inst1 check inter 2000 rise 2 fall 5
server web2 192.168.5.57:8080 cookie app1inst2 check inter 2000 rise 2 fall 5

4、BACKUP上安裝keepalived,步驟也不多介紹,keepalived.conf檔案內容就兩處有變化,紅色字型標出複製代碼 代碼如下:! Configuration File for keepalived
global_defs {
router_id LVA_DEVEL
}
vrrp_script chk_http_port {
script "/root/check_haproxy.sh"
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_http_port
}
virtual_ipaddress {
192.168.2.100
}
}

呼叫指令碼check_haproxy.sh內容:複製代碼 代碼如下:#!/bin/bash
A=`ip a | grep 192.168.2.100 | wc -l`
B=`ps -ef | grep haproxy | grep -v grep | awk '{print $2}'`
if [ $A -gt 0 ];then
/usr/local/sbin/haproxy -f /usr/local/doc/haproxy/haproxy.cfg
else
kill -9 $B
fi

5、兩台負載機器我就不多介紹了,用的是系統內建的apache
登入192.168.5.54上操作:
echo 'this is 192.168.5.54!' > /var/www/html/index.html
修改/etc/httpd/conf/httpd.conf檔案的監聽連接埠為8080
sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
/etc/init.d/httpd start
登入192.168.5.57上操作:
echo 'Hello,This is 192.168.5.57!' > /var/www/html/index.html
修改/etc/httpd/conf/httpd.conf檔案的監聽連接埠為8080
sed -i 's/Listen 80/Listen 8080/g' /etc/httpd/conf/httpd.conf
/etc/init.d/httpd start

6、測試步驟

啟動MASTER上的keepalived服務,再啟動BACKUP上的keepalived服務。
確定MASTER上是否有192.168.2.100地址,用ip a查看即可!
然後手動殺掉MASTER上的haproxy進程,看看是否能馬上恢複進程?
停止MASTER上的keepalived服務,確認BACKUP是否接管VIP地址?
最後再啟動MASTER上的keepalived服務,再確認MASTER是否再接管VIP地址?
總結:我這測試都沒問題,如果有問題請給我留言!原文:http://blog.chinaunix.net/uid-23916356-id-3387261.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.