Haproxy+Keepalived主主高可用

来源:互联网 发布:c语言用户标识符 编辑:程序博客网 时间:2024/06/03 22:58
介绍
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恢复的时候会重新接管服务。


推荐阅读:


CentOS 6.3下Haproxy+Keepalived+Apache配置笔记 http://www.linuxidc.com/Linux/2013-06/85598.htm


Haproxy + KeepAlived 实现WEB群集 on CentOS 6  http://www.linuxidc.com/Linux/2012-03/55672.htm


Keepalived+Haproxy配置高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/56748.htm


Haproxy+Keepalived构建高可用负载均衡 http://www.linuxidc.com/Linux/2012-03/55880.htm


我们的keepalived主主的应用场景:因为我们需要同时为主域名和图片服务器域名同时提供分发请求,所以用到了Haproxy+keepalived主主模式。


默认情况下,第一台负载均衡器主要分发www.linuxidc.com的请求,第二台负载均衡器主要分发img.linuxidc.com的请求。任意一台宕机都不会影响网站分发。这样不会导致服务器浪费。

Haproxy+Keepalived主主高可用




VIP1=192.168.150.222            (www.linuxidc.com)
VIP2=192.168.150.223            (img.linuxidc.com)
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、编辑配置文件(两台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 linuxidc-test-Haproxy    #统计页面密码框上提示文本 
  stats auth admin:admin123          #统计页面用户名和密码设置      
  stats hide-version                  #隐藏统计页面上HAProxy的版本信息 
frontend www 
  bind :80  
  #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。 
  acl web hdr(host) -i www.linuxidc.com   
  #acl后面是规则名称,-i是要访问的域名,如果访问www.linuxidc.com这个域名就分发到下面的webserver 的作用域。 
  acl img hdr(host) -i img.linuxidc.com    
  #如果访问img.linuxidc.com就分发到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

Haproxy+Keepalived主主高可用



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/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服务。
#servcie haproxy  start 
#service keepalived  start


10、查看两台服务器的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、测试,关闭任意一台keepalived,或者拔掉任意keepalived的网线。img和www域名访问正常。


本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2013-07/87744p2.htm


0 0
原创粉丝点击