haproxy

######################################haproxy负载均衡###################################
#######################################################################################
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进当前的架构中,同时可以保护web服务器不被暴露到网络上。

1.安装
yum install rpm-build -y
rpmbuild -tb haproxy-1.4.24.tar.gz    (同时需要解决依赖性)
rpm -ivh rpmbuild/RPMS/x86_64/haproxy-1.4.24-1.x86_64.rpm
2.配置
<1>基本配置
vim /etc/haproxy/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   local4 notice    ###指定日志设备
    log loghost    local4 info    ###指定日志类型
        maxconn 4096
        chroot /usr/share/haproxy    ###jail目录
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http    ###默认使用http的7层模式 tcp:4层
        option  httplog
        option  dontlognull
        retries 3
        option redispatch    ###必须添加option,否则服务开启时会报错,当 client 连接到挂掉的机器时,重新分配到健康的主机
        maxconn 2000
        contimeout      5000

        stats uri /status    ###状态监控页面,可观察到haproxy能实现健康检查

listen  westos 0.0.0.0:80    ###实现负载均衡调度
        balance roundrobin    ###调度算法为轮叫
        server  web1 172.25.104.5:80 check inter 2000 fall 3    ###检测心跳频率,三次失败为不可用
        server  web2 172.25.104.6:80 check inter 2000 fall 3
        server  back1 127.0.0.1:80    ###备机 (设置本机为备机,须更改httpd服务的默认端口,避免与haproxy端口冲突)

mkdir /usr/share/haproxy
/etc/init.d/haproxy start
开启realserver的httpd服务

测试:访问 172.25.104.4/status 可监控realserver的状态
     访问 172.25.104.4    实现了在realserver端的负载均衡
<2>监控页面访问授权
vim /etc/haproxy/haproxy.cfg

listen  stats 0.0.0.0:8000    ###监控页面端口,务必保证不与其他服务冲突
        stats enable
        stats uri /status    ###监控页面地址
        stats auth admin:westos    ###访问权限 用户名:密码
        stats refresh 5s    ###五秒自动刷新一次

测试:访问 172.25.104.4:8000/status 需要登陆
<3>日志存储
vim /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
local1.*             /var/log/haproxy.log  ##设置日志的位置

/etc/init.d/rsyslog restart
测试:关闭realserver上的服务,查看日志/var/log/haproxy.log
<4>访问权限及错误页面
vi /etc/haproxy/haproxy.cfg

listen  westos 0.0.0.0:80    
        balance roundrobin
        server  web1 172.25.104.5:80 check inter 2000 fall 3    
        server  web2 172.25.104.6:80 check inter 2000 fall 3
        server  back1 127.0.0.1:80

        acl badguy src 172.25.104.250
        block if badguy        ###如果此IP访问则跳转到403错误页面
        errorloc 403 http://172.25.104.4:8080    ###将403错误页面进行重定向

    acl badguy src 172.25.104.7    
        redirect location http://172.25.104.4:8080 if badguy    ###根据用户IP转发页面

/etc/init.d/haproxy restart
<5>通过前端调度后端,实现图文分离,访问与上传分离
vim haproxy.cfg

frontend westos *:80
        acl badguy src 172.25.104.250
    acl url_img path_end -i .jpg .js .css .png .gif    ###如果指定IP访问.jpg页面,则转发给url_img
    acl upload method POST GET PUT DELETE    ###如果指定IP执行上传动作,则转发给upload
    default_backend app    ###默认使用后端app调度规则
    use_backend image if url_img    ###url_img 使用后端名为image的调度规则
    use_backend image if upload    ###upload 使用后端名为image的调度规则
backend app
        balance roundrobin
        server  web1 172.25.104.5:80 check inter 2000 fall 3
        server  web2 172.25.104.6:80 check inter 2000 fall 3
        server  back1 127.0.0.1:8080 backup
backend image  
        balance roundrobin
        server img1 172.25.104.7:80 check inter 2000 fall 3

/etc/init.d/haproxy restart
realserver56端:
yum install php -y
/etc/init.d/httpd restart
mv index.php /var/www/html
realserver7端:
yum install php -y
mv upload_file.php  redhat.jpg /var/www/html
mkdir /var/www/html/upload    ###存放上传的文件
chmod 777 /var/www/html/upload

测试:访问 172.25.104.4/redhat.jpg 会负载均衡到realserver7的redhat.jpg
     访问 172.25.104.4会负载均衡到server56的index.php,点击上传,会负载均衡到server7的upload_file.php,上传文件会保存在server7的upload里

####################################haproxy+keepalived高可用负载均衡######################
vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
vrrp_script check_haproxy {
        script "/opt/check_haproxy.sh"
        interval 2
        weight 2
}

global_defs {
   notification_email {
     root@localhost
   }
   notification_email_from keepalived@server4.example.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id server13.example.com
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 92
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.104.100
    }

    track_script {
        check_haproxy
    }
}

检测脚本
vi /opt/check_haproxy.sh

#!/bin/bash
/etc/init.d/haproxy status &> /dev/null || /etc/init.d/haproxy restart &> /dev/null
if [ $? -ne 0 ];then
/etc/init.d/keepalived stop &> /dev/null
fi

chmod +x /opt/check_haproxy.sh

测试:
访问172.25.104.100 可实现高可用的负载均衡
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值