butai 发表于 2013-7-23 09:41:01

Haproxy+Keepalived主主高可用

介绍
HAProxy是高性能的代理服务器,其可以提供7层和4层代理,具有healthcheck,负载均衡等多种特性,性能卓越,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。

KeepAlived是一个高可用方案,通过VIP(即虚拟IP)和心跳检测来实现高可用。其原理是存在一组(两台)服务器,分别赋予Master,Backup两个角色,默认情况下Master会绑定VIP到自己的网卡上,对外提供服务。Master,Backup会在一定的时间间隔向对方发送心跳数据包来检测对方的状态,这个时间间隔一般为2秒钟,如果Backup发现Master宕机,那么Backup会发送ARP包到网关,把VIP绑定到自己的网卡,此时Backup对外提供服务,实现自动化的故障转移,当Master恢复的时候会重新接管服务。


我们的keepalived主主的应用场景:因为我们需要同时为主域名和图片服务器域名同时提供分发请求,所以用到了Haproxy+keepalived主主模式。
默认情况下,第一台负载均衡器主要分发www.baison.com.cn的请求,第二台负载均衡器主要分发img.baison.com.cn的请求。任意一台宕机都不会影响网站分发。这样不会导致服务器浪费。


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.118img1=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
#wgethttp://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
#tar xfhaproxy-1.4.24.tar.gz
#cd haproxy-1.4.24
#make TARGET=linux26 ARCH=x86_64
#编译参数参考README,其中TARGET是指定内核版本,ARCH指定CPU架构,
#makeinstall
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、编辑配置文件(两台Haproxy配置文件相同)


# vim /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
   log 127.0.0.1local0    #日志输出配置,所有日志都记录在本机,通过local0输出
   log 127.0.0.1 local1 notice            
   #log loghostlocal0 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等参数
optionhttpchk /index.html
#检测文件,如果分发到后台index.html访问不到就不再分发给它。
                                                                                                                                                                                                                           
server   web01 192.168.158.116:80check inter 2000 fall 3 weight 20
server   web02 192.168.158.117:80check inter 2000 fall 3 weight 10
server   web03 192.168.158.118:80check inter 2000 fall 3 weight 10
                                                                                                                                                                                                                           
backend imgserver
   mode http
   optionhttpchk /index.php
   balance   roundrobin                           
server   img01 192.168.149.119:80check inter 2000 fall 3
server   img02 192.168.149.120:80check inter 2000 fall 34、启动Haproxy服务,查看状态。


1
#servicehaproxystart
5、安装配置keepalived(两台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配置文件。第一台做192.168.150.222vip的master,192.168.150.223的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、第二台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/haproxystart
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
       /etc/init.d/keepalived stop
fi
9、启动两台keepalived和Haproxy服务。


1
2
#servcie haproxystart
#service keepalivedstart
10、查看两台服务器的VIP


1
#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_dsack12、测试,关闭任意一台keepalived,或者拔掉任意keepalived的网线。img和www域名访问正常。

lchl0388 发表于 2013-7-24 02:56:20

爱护环境,人人有病。

zxcvb12 发表于 2013-7-25 06:24:54

做爱做的事,交配交的人。

wolong 发表于 2013-7-26 12:05:00

啥时硬件也可以COPY就好了!

my11502207 发表于 2013-7-27 03:42:43

我是来刷分的,嘿嘿

hx0011yy 发表于 2013-7-28 00:48:28

流氓不可怕,就怕流氓有文化。

kingforce 发表于 2013-7-28 14:17:03

听君一席话,省我十本书!
页: [1]
查看完整版本: Haproxy+Keepalived主主高可用