lamp的架构之haproxy

来源:互联网 发布:ubuntu用u盘安装 编辑:程序博客网 时间:2024/05/22 14:42

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 startStarting haproxy:                                          [  OK  ]


测试一下效果。

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

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

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

取消注释(开启udp端口)


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


重启日志服务。

[root@proxy log]# service rsyslog restartShutting 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/bashif [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then     /etc/init.d/haproxy  startfisleep 2if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then       /etc/init.d/keepalived stopfi


改完配置文件就可以直接启动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 stopStopping keepalived:                                       [  OK  ]You have new mail in /var/spool/mail/root[root@proxy keepalived]# 

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



0 0
原创粉丝点击