haproxy+keepalived的搭建

 HAProxy集群(LB负载均衡)
工作模式:
 Mode http
 客户端请求被深度分析后再发往服务器
Mode tcp 
  客户端与服务器之间会话,不检查第七层信息
Mode health
  仅做健康状态检查 

HTTP协议是事物驱动的每个请求(Request)仅对应一个响应(Response)
常见模型:
  1.HTTP close
  2.HTTP-alive
  3.Pipelinig

HTTP close 
客户端向服务器建议一个TCP连接
客户端发送请给服务器
服务器响应客户端请求后即断开连接
如果客户端到服务器的请求不止一个,那么就要不断的去建立连接
TCP三次握手消耗相对较大的系统资源,同时延迟较大

HTTP-alive
一次连接可以传输多个请求
客户端需要知道传输内容的长度,以避免无限期的等待传输结果
降低两个HTTP事物间的延迟
需要相对较少的服务资源

Pipelining
任然使用Keep-alive
在发送后续请求前,不用等前面的请求已经得到回应
适用于有大量的图片页面
降低了多次请求之间的网络延迟

HAProxy配置参数来源
命令行:总是具有最高优先级
global部分:全局设置进程级别参数
代理声明部分:default、listen、frontend、backend
配置文件的构成:
default:为后续的其他部分设置缺省参数
缺省参数可以被后续部分重置
listen:把frontend和backend结合在一起的完整声明
frontend:描述接收客户端侦听套接字(socket)集
backend:描述转发链接的服务器集

搭建LAMP环境
yum -y install php-mysql mysql-server mysql php httpd

起服务:service httpd  start
        chkconfig httpd on

        service mysqld start
        chkconfig mysqld on

配置分发器(192.168.4.50) ,web1(192.168.4.53),web2(192.168.4.54)
1 装包
yum list |grep -i haproxy 在yum源里查看有没有haproxy软件包
rpm -ivh haproxy-1.5.4-2.el6.x86_64.rpm
rpm -qc haproxy 查看配置文件

2 修改配置
cp /etc/haproxy/haproxy.cfg  /root/
vim  /etc/haproxy/haproxy.cfg
.....
global
log 127.0.0.1 local2  
chroot /usr/local/haproxy
pidfile /var/run/haproxy.pid  ##haproxy的pid存放路径
maxconn 4000   ##最大连接数,默认4000
user haproxy   ##默认用户
group haproxy  ##默认用户组
daemon         ##创建1个进程进入deamon模式运行
.....
defaults
mode http      ##默认的模式mode{tcp|http|health}log global 采用全局定义的日志
option dontlognull ##不记录健康检查的日志信息
option httpclose   ##每次请求完毕后主动关闭http通道
option httplog     ##日志类别http日志格式
option forwardfor  ##后端服务器可以从http header中国的客户端ip
option redispatch  ##serverid服务器挂掉后强制定向到其他健康服务器
timeout connect 10000 ##如果backend没有指定,默认为10s
timeout client 300000 ##客户端连接超时
timeout server 300000 ##服务器连接超时
maxconn 60000         ##最大连接数
retries 3          ##3次连接失败就认为服务不可用,也可以通过后面设置

   #listen stats
   # bind  0.0.0.0:1080    ##监听端口
   # stats  refresh 30s   ##统计页面自动刷新时间
   # stats  uri /stats    ##统计页面URL
   #stats  realm Haproxy Manager ##统计页面密码框上提示文本
   # stats  auth admin:admin ##统计页面用户名和密码设置
   #stats hide-version   ##显示统计页面上HProxy的版本信息

    stats  uri /admin
    listen  weblb  0.0.0.0:80
     cookie  SERVERID rewrite 
     balance roundrobin
     server web1 192.168.4.53:80 cookie app1inst1 check inter 2000 rise 2 fall 5
     server web2 192.168.4.54:80 cookie app1inst1 check inter 2000 rise 2 fall 5

mv /etc/haproxy/haproxy.cfg  /etc/haproxy/haproxy.cfg.back
vim  /etc/haproxy/haproxy.cfg
........
defaults
.......
stats  uri  /admin  (定义控制板)

frontend  weblb *:80 
acl url_static          path_beg (匹配开头)       -i (不区分大小写) 
acl urlhtml (名字)      path_end  (匹配结尾)   -i .html
acl urlphp             path_end                    -i .php
use_backend htmlgrp (名字)         if urlhtml (调用acl)
use_backend phpgrp                if urlphp 

default_backend   htmlgrp  (默认backend)   
backend htmlgrp  (定义转发连接的服务器)
    balance  roundrobin (rr调度算法)
    server  web51 192.168.4.51:80 check
    server  web52 192.168.4.52:80 check
backend  phpgrp
    balance  roundrobin
    server  web53 192.168.4.53:80 check
    server  web54 192.168.4.54:80 check

service haproxy start
chkconfig haproxy on
chkconfig --list haproxy 

http://www.baidu.com/abc  URL
                                    abc  uri

=====================================================================
=====================================================================

  keepalived(HA)任意单故障节点的高可用集群
1 在高可用集群主机上分别安装keepalived软件
2 分别修改服务的配置文件 
3 分别启动keepalived服务
4 在高可用集群主机上分别是否获取VIP地址
5 254客户端访问

1 在高可用集群主机上分别安装keepalived软件
yum list |grep -i keepalived
yum -y install  keepalived
rpm -qc keepalived

2 分别修改服务的配置文件
主:
vim /etc/kepalived/kepalived.conf 
 global_defs {
  notification_email {
  abc@localhost   设置报警邮件人邮箱
  }
   notification_email_from [email protected] 设置发件人
   smtp_server 192.168.200.1  定义邮件服务器      
   smtp_connect_timeout 30            
   router_id LVS_DEVEL          设置路由ID号          
   } 
   vrrp_instance webha {  
   state MASTER         主服务器为MASTER,辅助为SLAVE或BACKUP
   interface eth0       定义网卡接口
   virtual_router_id 51  主辅VRID号必须一致
     priority 150       服务器优先级,越大优先级越高
     advert_int 1     
      authentication {
        auth_type PASS 
        auth_pass 123456  主辅服务器密码必须一致
     }
     virtual_ipaddress { 设置VIP
          192.168.4.251   可用多个    
      }
}

辅:
 vim /etc/kepalived/kepalived.conf 
 global_defs {
  notification_email {
  abc@localhost   
  }
   notification_email_from [email protected] 
   smtp_server 192.168.200.1        
   smtp_connect_timeout 30            
   router_id LVS_DEVEL                   
   } 
   vrrp_instance webha {  
   state BACKUP         
   interface eth0       
   virtual_router_id 51  
     priority 100      
     advert_int 1     
      authentication {
        auth_type PASS 
        auth_pass 123456  
     }
     virtual_ipaddress { 
          192.168.4.251       
      }
}

3 起服务(先起主服务)
ip add show  |grep 192.168.4
service keepalived start 

    nginx分析
优点:
     工作在7层协议,可以针对http做分流策略
     正则表达式比HAProxy强大
     安装,配置,测试简单,通过日志可以解决多数问题
     并发量可以达到几万次
    Nginx还可以作为web服务器使用
缺点: 
     仅支持http,https,mail协议,应用面小
     监控检查仅通过端口,无法使用URL检查

     LVS分析
优点:
     负载能力强,工作在4层协议,对内存,CPU消耗低
     配置性低,没有太多可配置性,减少人为错误
     应用面广,几乎可以为所有应用提供负载均衡
缺点:
     不支持正则表达式,不能实现动静分离
     如果网站架构庞大,LVS-DR配置比较繁琐

     HAProxy分析
优点:
     支持session,cookie功能
     可以通过url进行健康性检查
     效率,负载均衡速度,高于Nginx,低于LVS
    HAProxy支持TCP,可以对MySQL进行负载均衡
     调度算法丰富
缺点:
     正则弱与Nginx
     日志依赖于syslogd,不支持apache日志

猜你喜欢

转载自blog.51cto.com/13399294/2161032