Haproxy+Keepalivedマスター高可用性
8164 ワード
博文転自http://fighter.blog.51cto.com/1318618/1254815
紹介HAProxyは高性能のプロキシサーバーで、7階と4階のプロキシを提供することができ、healthcheck、負荷バランスなど多くの特性を持ち、Twitter、Reddit、StackOverflow、GitHubを含む多くの有名なインターネット会社が使用しています.KeepAlivedは、VIP(すなわち仮想IP)および心拍検出によって高可用性を実現する高可用性スキームである.その原理は1組(2台)のサーバーが存在し、それぞれMaster、Backupの2つの役割を与え、デフォルトではMasterはVIPを自分のネットワークカードにバインドし、対外的にサービスを提供する.Master,Backupは一定の時間間隔で相手に心拍パケットを送信して相手の状態を検出する.この時間間隔は一般的に2秒である.BackupがMasterダウンを発見すると、BackupはARPパケットをゲートウェイに送信し、VIPを自分のネットワークカードにバインドする.このときBackupは対外的にサービスを提供し、自動化されたフェイルオーバを実現する.Masterが回復すると、サービスは再引き継ぎされます.
私たちのkeepalivedマスターのアプリケーションシーン:プライマリドメイン名とピクチャサーバドメイン名を同時に配布要求を提供する必要があるため、Haproxy+keepalivedマスターモードを使用しました.
デフォルトでは、最初の負荷イコライザは主にwww.baisonを配布する.com.cnの要求は、2台目の負荷イコライザが主にimgを配布する.baison.com.cnのリクエスト.いずれのダウンタイムも、Webサイトの配布に影響しません.これにより、サーバが無駄になりません.
インストール構成プロセス
3、プロファイルの編集(2台のHaproxyプロファイルが同じ)
4、Haproxyサービスを起動し、状態を確認する
5、インストール構成keepalived(2台のkeepalivedのインストール手順は同じ)
6、最初のkeepalivedプロファイル.第1台は192.168.150.222 vipのmasterをして、192.168.150.23のbackup
7、2台目のkeepalivedのプロファイル
8、スクリプトを検出し、haproxyサービスが閉鎖されてkeepalivedが自動的に切り替えられないことを防止する.
9、keepalivedとHaproxyサービスを2台起動する.
10、2台のサーバーのVIPを見る
11、公式サイトのカーネル最適化の提案.
12、テスト、任意の1台のkeepalivedを閉じるか、または任意のkeepalivedのネットワークケーブルを抜く.imgとwwwドメイン名のアクセスは正常です.
紹介HAProxyは高性能のプロキシサーバーで、7階と4階のプロキシを提供することができ、healthcheck、負荷バランスなど多くの特性を持ち、Twitter、Reddit、StackOverflow、GitHubを含む多くの有名なインターネット会社が使用しています.KeepAlivedは、VIP(すなわち仮想IP)および心拍検出によって高可用性を実現する高可用性スキームである.その原理は1組(2台)のサーバーが存在し、それぞれMaster、Backupの2つの役割を与え、デフォルトではMasterはVIPを自分のネットワークカードにバインドし、対外的にサービスを提供する.Master,Backupは一定の時間間隔で相手に心拍パケットを送信して相手の状態を検出する.この時間間隔は一般的に2秒である.BackupがMasterダウンを発見すると、BackupはARPパケットをゲートウェイに送信し、VIPを自分のネットワークカードにバインドする.このときBackupは対外的にサービスを提供し、自動化されたフェイルオーバを実現する.Masterが回復すると、サービスは再引き継ぎされます.
私たちのkeepalivedマスターのアプリケーションシーン:プライマリドメイン名とピクチャサーバドメイン名を同時に配布要求を提供する必要があるため、Haproxy+keepalivedマスターモードを使用しました.
デフォルトでは、最初の負荷イコライザは主にwww.baisonを配布する.com.cnの要求は、2台目の負荷イコライザが主にimgを配布する.baison.com.cnのリクエスト.いずれのダウンタイムも、Webサイトの配布に影響しません.これにより、サーバが無駄になりません.
VIP1=192.168.150.222 (www.baison.com.cn)
VIP2=192.168.150.223 (img.baison.com.cn)
haproxy01=192.168.150.110
haproxy02=192.168.150.112
web1=192.168.158.116
web2=192.168.158.117
web3=192.168.158.118
img1=192.168.158.119
img2=192.168.158.120
インストール構成プロセス
1、 ,( Haproxy )
haproxy :http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
#cd /usr/local/src
#wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
#tar xf haproxy-1.4.24.tar.gz
#cd haproxy-1.4.24
#make TARGET=linux26 ARCH=x86_64
# README, TARGET ,ARCH CPU ,
#make install
2、 , 。
#mkdir /etc/haproxy
#cp examples/haproxy.cfg /etc/haproxy
#cp examples/haproxy.init /etc/init.d/haproxy
#chmod +x /etc/init.d/haproxy
#ln -s /usr/local/sbin/haproxy /usr/sbin/
3、プロファイルの編集(2台のHaproxyプロファイルが同じ)
# vim /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
log 127.0.0.1 local0 # , , local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 65535 #
chroot /usr/local/ # 。
uid 99 # uid
gid 99 # gid
daemon # haproxy
defaults
log global
mode http
# mode { tcp|http|health },tcp 4 ,http 7 ,health OK
option dontlognull
option httplog
retries 3 #
option redispatch
# serverId ,
option abortonclose
# ,
maxconn 65535 #
#timeout http-keep-alive 10s
# timeout queue 1m
contimeout 5000 #
clitimeout 50000 #
srvtimeout 50000 #
timeout check 5s #
stats refresh 30s #
stats uri /stats # url
stats realm baison-test-Haproxy #
stats auth admin:admin123 #
stats hide-version # HAProxy
frontend www
bind :80
# bind *:80 , ,vip 。
acl web hdr(host) -i www.baison.com.cn
#acl ,-i , www.baison.com webserver 。
acl img hdr(host) -i img.baison.com.cn
# img.baison.com.cn imgserver 。
use_backend webserver if web
use_backend imgserver if img
backend webserver #webserver
mode http
balance roundrobin
#banlance roundrobin ,balance source session , static-rr,leastconn,first,uri
option httpchk /index.html
# , index.html 。
server web01 192.168.158.116:80 check inter 2000 fall 3 weight 20
server web02 192.168.158.117:80 check inter 2000 fall 3 weight 10
server web03 192.168.158.118:80 check inter 2000 fall 3 weight 10
backend imgserver
mode http
option httpchk /index.php
balance roundrobin
server img01 192.168.149.119:80 check inter 2000 fall 3
server img02 192.168.149.120:80 check inter 2000 fall 3
4、Haproxyサービスを起動し、状態を確認する
#service haproxy start
5、インストール構成keepalived(2台のkeepalivedのインストール手順は同じ)
#tar zxvf -1.2.7.tar.gz
#cd keepalived-1.2.7
#./configure --prefix=/usr/local/keepalived
#make
#make install
#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
#mkdir /etc/keepalived
#cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
6、最初のkeepalivedプロファイル.第1台は192.168.150.222 vipのmasterをして、192.168.150.23のbackup
#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_haproxy {
script "/usr/local/keepalived/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 5555
}
track_script {
chk_haproxy # haproxy
}
virtual_ipaddress {
192.168.150.222
}
}
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.150.223
}
}
7、2台目のkeepalivedのプロファイル
#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_haproxy {
script "/usr/local/keepalived/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 5555
}
track_script {
chk_haproxy # haproxy
}
virtual_ipaddress {
192.168.150.222
}
}
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.150.223
}
}
8、スクリプトを検出し、haproxyサービスが閉鎖されてkeepalivedが自動的に切り替えられないことを防止する.
#vim /usr/local/keepalived/check_haproxy.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/etc/init.d/haproxy start
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
/etc/init.d/keepalived stop
fi
9、keepalivedとHaproxyサービスを2台起動する.
#servcie haproxy start
#service keepalived start
10、2台のサーバーのVIPを見る
#ip addr
11、公式サイトのカーネル最適化の提案.
echo 1024 60999 > /proc/sys/net/ipv4/ip_local_port_range
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 262144 > /proc/sys/net/ipv4/tcp_max_tw_buckets
echo 262144 > /proc/sys/net/ipv4/tcp_max_orphans
echo 300 > /proc/sys/net/ipv4/tcp_keepalive_time
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
echo 0 > /proc/sys/net/ipv4/tcp_timestamps
echo 0 > /proc/sys/net/ipv4/tcp_ecn
echo 1 > /proc/sys/net/ipv4/tcp_sack
echo 0 > /proc/sys/net/ipv4/tcp_dsack
12、テスト、任意の1台のkeepalivedを閉じるか、または任意のkeepalivedのネットワークケーブルを抜く.imgとwwwドメイン名のアクセスは正常です.