lamp的架构之haproxy

haproxy

        haproxy是一个使用c语言编写的开放源代码软件,主要目的就是来提供高可用性和负载均衡的。
      就目前来说。Nginx,LVS,Haproxy是使用最广泛的三种负载均衡软件。
      Nginx 的博客地址: Nginx详解
      LVS的博客地址: LVS详解


        目前较为成熟的网站架构应该是Web前端采用Nginx/Haproxy+Keepalived 作为负载均衡器,后端采用的MySQL数据库,一主多从并且读写分离,读操作采用LVS+keepalive架构。(当然也可以前端采用LVS的full-nat)

    

     下面稍微介绍一下其他两个负载均衡的优缺点。

Nginx:

     优点  1.在第七层做负载均衡,可以根据域名,url等等做流量分流。强大的正则匹配比Haproxy更强大。(这也是广泛流行的原因之一)

                2.Nginx对网络的依赖小,能ping通就证明负载均衡可用。而LVS不仅需要VIP还需要根据模型需要(如DR)配置一下后台真实主机的ip。麻烦要死。

                3.配置简单,error.log的输出齐全,可以在上面查找各种错误。以备解决。

                4.高负载,epoll模型的使用,可以支持很大的并发量。

                5.Nginx的反向代理,这个功能很强大。

                6.nginx可以通过端口检测服务器内部的故障。


     缺点  1.支持的应用场景似乎也就web和mail了。

               2.对后端的服务器健康检查,只支持通过端口来检测。不支持URL检测。不支持session保存,但可以使用ip_hash解决



  LVS:

    优点     1.只是工作在第4层。也就是起到类似路由器的作用,没有流量的产生。所以在负载均衡时,对内存和cpu的消耗是最低的。
                 2.对网络的依赖强。
                 3.可以对大部分应用做负载均衡,最重要的是可以对数据库负载均衡。


    缺点     1.不支持则正处理。不能做动静分离。

Haproxy:

    优点    1.可以url重写,提供错误页面跳转,epoll(Nginx说,我也行)
                2.可以支持url来检测后端的服务器的状态。还有Session保持,Cookie引导(这两个的原理还不太懂)。
                3.支持TCP协议的负载均衡的转发。

    缺点    1.haproxy的扩展型很差,添加新功能费劲(这个没有经历)



下来重点介绍一下Haproxy吧。

haproxy 的调度算法。
(1)balance roundrobin             轮询
(2)balance static-rr                  根据权重轮询
(3)balance leastconn               最少连接
(4)balance source                    根据请求源IP
(5)balance uri                            根据请求的url
(6)balance uri_param               根据请求的url参数。
(7)balance hdr(name)               根据请求的HTTP报头。
(8)balance rdp-cookie(name)  根据cookie来锁定并hash每一个请求

服务器架构:
 
   proxy        192.168.217.16       redhat6.5
   node1           192.168.217.14       redhat6.5
   node2           192.168.217.15       redhat6.5
  

   安装配置Haproxy。

在proxy主机上安装haproxy。首先要记住配置yum源。把ha套件加进来。

   

开始下载安装haproxy。

[root@proxy ~]# yum -y install haproxy

配置haproxy。

[root@proxy ~]# rpm -ql haproxy
/etc/haproxy
/etc/haproxy/haproxy.cfg
/etc/logrotate.d/haproxy
/etc/rc.d/init.d/haproxy
其中/etc/haproxy.cfg 是主配置文件

首先修改主配置文件,实现最基本的负载均衡。

global
    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend  main *:80
    default_backend             app
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
    balance     roundrobin
    server  app1 192.168.217.14:80 check
    server  app2 192.168.217.15:80 check

好了,启动haproxy。

[root@proxy haproxy]# service haproxy start
Starting haproxy:                                          [  OK  ]


测试一下效果。

[root@localhost Desktop]# curl 192.168.217.16
node1.example.com
[root@localhost Desktop]# curl 192.168.217.16
node2.example.com
[root@localhost Desktop]# curl 192.168.217.16
node1.example.com
[root@localhost Desktop]# curl 192.168.217.16
node2.example.com
[root@localhost Desktop]# curl 192.168.217.16
node1.example.com

但是有一个问题就是,日志好像并没有啊。

修改日志配置文件/etc/rsyslog.conf

取消注释(开启udp端口)


将日志写到 /var/log/haproxy.log


重启日志服务。

[root@proxy log]# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]


开启日志。
[root@proxy log]# ls /var/log/haproxy.log -l
-rw-------. 1 root root 486 Mar 18 11:51 /var/log/haproxy.log
[root@proxy log]# 

添加如下选项,可以在浏览器打开一个监控页面。

listen status
    stats enable
    bind *:8080
    mode http
    option httplog
    log global
    maxconn 10
    stats refresh 3s
    stats uri /admin
    stats auth admin:admin
    stats hide-version
    stats admin if TRUE




实现haproxy + keepalived 。

首先安装keepalived。两个调度器都安装keepalive

先安装工具


解压并且编译

     

将配置文件链接到正确的位置


配置主配置文件/etc/keepalived/keepalived.conf


     ! Configuration File for keepalived
global_defs {
notification_email {
root@localhost#接受报警的邮箱
}
notification_email_from keepalived@dirmaster.example.com#邮件的发送地址
smtp_server 127.0.0.1
smtp_connect_timeout 30#连接smtp的超时时间
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_script chk_http_port {
        script "/etc/keepalived/check_haproxy.sh"
}

vrrp_instance VI_1 {
state MASTER#备机需要改为BACKUP
interface eth0#HA的检测网络接口
virtual_router_id 51#主和备机的id必须一样,且在0~255
priority 100#主机的优先级,备机应该此值小点
advert_int 1#主备之间的通告时间间隔秒数
authentication {
auth_type PASS#设置验证类型
auth_pass 1111#设置验证密码
}

 track_script {
chk_http_port
 }
virtual_ipaddress {
192.168.2.222#VIP
}
}


#vim /etc/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


改完配置文件就可以直接启动keepalived了,但有时还可能报错,

[root@dirmaster ~]# service keepalived start
 /etc/init.d/keepalived: Permission denied
 chmod a+x /etc/init.d/keepalived 就好了。
现象:(拥有VIP)




proxy主机关闭。

[root@proxy keepalived]# service keepalived stop
Stopping keepalived:                                       [  OK  ]
You have new mail in /var/spool/mail/root
[root@proxy keepalived]# 

还是可以正常调度。(因为dirslave启动了)



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值