Haproxy+nginx搭建web群集

一、haproxy是什么?

HAProxy是一个使用C语言编写的自由及开放源代码软件[1],其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy 的优点能够补充 Nginx 的一些缺点,比如支持 Session 的保持,Cookie 的引导;同时支持通过获取指定的 url 来检测后端服务器的状态。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。HAProxy实现了一种事件驱动单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

二、环境

Haproxy+nginx搭建web群集_第1张图片

三、实施

1)安装nginx此处省略(注不知道的关照我)

2)安装Haproxy

yum -y install pcre-devel bzip2-devel
tar zxf haproxy-1.4....gz
cd haproxy-1.4...
make TARGET=linux26   //62位os
make  install

//建立Haproxy的配置文件
mkdir /etc/haproxy    //创建配置文件目录
cp examples/haproxy/haproxy.cfg /etc/haproxy/   //将haproxy.cfg文件复制到配置文件目录下

3)Haproxy配置项介绍

HAProxy配置文件根据功能和用途,主要有5个部分组成,但有些部分并不是必须的,可以根据需要选择相应的部分进行配置。
(1)global部分
用来设定全局配置参数,属于进程级的配置,通常和操作系统配置有关。
(2)defaults部分
默认参数的配置部分。在此部分设置的参数值,默认会自动被引用到下面的frontend、backend和listen部分中,因此,如果某些参数属于公用的配置,只需在defaults部分添加一次即可。而如果在frontend、backend和listen部分中也配置了与defaults部分一样的参数,那么defaults部分参数对应的值自动被覆盖。
(3)frontend部分
此部分用于设置接收用户请求的前端虚拟节点。frontend是在HAProxy1.3版本之后才引入的一个组件,同时引入的还有backend组件。通过引入这些组件,在很大程度上简化了HAProxy配置文件的复杂性。frontend可以根据ACL规则直接指定要使用的后端backend。
(4)backend部分
此部分用于设置集群后端服务集群的配置,也就是用来添加一组真实服务器,以处理前端用户的请求。添加的真实服务器类似于LVS中的real server节点。
(5)listen部分
此部分是frontend部分和backend部分的结合体。在HAProxy1.3版本之前,HAProxy的所有配置选项都在这个部分中设置。为了保持兼容性,HAProxy新的版本仍然保留了listen组件的配置方式。目前在HAProxy中,两种配置方式任选其一即可。

4)haproxy配置文件解释

vim /etc/haproxy/haproxy.cfg
~~~~~~~~~~~~~~~~~~~~~~~~~~

global
   chroot dir     //工作目录chroot
log 127.0.0.1 locall info   //全局日志配置,使用127.0.0.1的rsyslog服务中locall日志设备,等级info
maxconn 4096    //每个进程最大并发数
nbproc 1    //后台进程数量
 #用户
user nobody   //用户
group nobody  //用户
daemon     //后台程序模式工作
pidfile /var/run/haproxy-private.pid    //HAProxy pid文件存储目录
#tune.bufsize 16384 设置buffer(B)

defaults
mode http    //模式(tcp http health)
retries 3     //连接后端服务器重试次数,超出后标为不可用
timeout connect 10S  //连接服务器最长等待时间(ms)默认为5000
timeout client 20s   //连接客户端发送数据最长等待时间。 默认为50000
timeout server 30s   //服务器回复客户端最长等待时间。  默认为50000
timeout check 5s     //对后端服务器的检测超时时间。    

frontend www    //定义名为www的前端虚拟节点
   # bind [
:] interface 监听套字节定义 bind *:80 mode http option httplog //启用日志记录HTTP请求。 option forwardfor //启用后后端服务器可以获得客户端IP option httpclose //客户端和服务器完成一次连接请求后,HAProxy主动关闭TCP链接(优化选项) log global //使用全局日志配置 default_backend htmpool //指定后端服务池(backend定义htmpool) backend htmpool //定义名为htmpool的真实服务器组 mode http option redispatch //用于cookie保持环境。(如后端服务器故障,客户端cookie不会刷新,用此来把用户请求强制定向到正常服务器) option abortonclose //负载均衡很高时,自动结束当前队列处理时间长的连接 balance roundrobin //负载均衡算法。 cookie SERVERID //允许向cookie插入SERVERID.下面server可以使用cookie定义 #option httpchk #mothod: OPTION、GET、HEAD (其中HEAD仅检测是否返回状态码200 更快,更简单) option httpchk GET /index.php //启用HTTP服务状态检测功能 #server
[:port] [param*] #[param*]为后端设定参数 #cookie server1 指定后端服务器设置cookie值,目的实现持久连接,指定的cookie值在请求时会被检查,第一次此cookie值将挑选后端服务器将一直被沿用。 #weight num权重 #check启用后端执行健康检测 #inter num 健康状态检测时间间隔 #rise num 从故障状态转换至正常需成功检测次数 #fall num 从正常转换故障需失败次数 #backup 设置后端真实服务器备份服务器,仅在所有真实服务器不可用启用 server web1 192.168.10.2:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3 //定义在线节点 server web2 192.168.10.3:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3 server web1 192.168.10.4:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3 backup //定义备份节点 listen admin_stats //定义HAProxy监控页面 bind 0.0.0.0:9188 mode http log 127.0.0.1 local3 err stats refresh 30s //HAProxy监控页面统计自动刷新时间。 stats uri /haproxy-status //设置监控页面URL路径。 http//IP:9188/haproxy-status可查看 stats realm welcome login\ Haproxy //统计页面密码框提示信息 stats auth admin:123456 //登录统计页面用户和密码 stats hide-version //隐藏HAProxy版本信息 stats admin if TRUE //设置TURE后可在监控页面手工启动关闭后端真实服务器

5)本次只需要如要内容即可

global    #全局设置
        log  /dev/log  local0 info       #日志输出配置,所有日志都记录在本机,通过local0输出
        log  /dev/log  local0 nofice
        #log loghost    local0 info

        #ulimit-n 82000       #设置每个进程的可用的最大文件描述符
        maxconn 4096         #最大连接数
        #chroot /usr/local/haproxy    #改变当前工作目录
        uid 99                       #所属运行的用户uid
        gid 99                       #所属运行的用户组
        daemon                   #以后台形式运行ha-proxy
        #nbproc 3                 #启动3个ha-proxy实例
        pidfile /var/run/haproxy.pid     #pid文件位置
        #debug        #调试模式,输出启动信息到标准输出
        #quiet        #安静模式,启动时无输出

defaults              #默认设置
        log     global
        #log     127.0.0.1       local3         #日志文件的输出定向
        mode    http                            #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
        option  httplog                         #日志类别,采用httplog
        option  httpclose                   #每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现
        option  dontlognull       #保证HAProxy不记录上级负载均衡发送过来的用于检测状态没有数据的心跳包
        #option  forwardfor       #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
        option  redispatch      #是否允许重新分配在session 失败后
        retries 3                 #3次连接失败就认为服务器不可用,主要通过后面的check检查         
        maxconn 2000              #最大连接数
        contimeout      5000                   #连接超时时间       
        clitimeout      50000                   #客户端连接超时时间
        srvtimeout      50000                 #服务器端连接超时


listen  webcluster 0.0.0.0:80                #运行的端口及主机
   option  httpchk GET /index.htm            #用于健康检测的后端页面
   balance roundrobin                        #负载均衡算法
   server web1 192.168.10.2:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3  //定义在线节点
   server web2 192.168.10.3:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3
   server web1 192.168.10.4:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3 backup  //定义备份节点

6)创建自启动脚本

cp ~/haproxy-1.4.24/examples/haproxy.init /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
/etc/init.d/haproxy start

7)haproxy的日志(修改rsysproxy配置)为了方便管理,将haproxy相关的配置独立定义到haproxy.conf 并发到/etc/rsyslog.d/下。rsyslog启动时会自动加载此目录的所有配置文件

touch  /etc/rsyslog.d/haproxy.conf
vim /etc/rsyslog.d/haproxy.conf
   if ($programname == 'haproxy' and $syslogserverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~  
   if ($programname == 'haproxy' and $syslogserverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
& ~   #表示当日志写入到日志文件后,rsyslog停止处理这个信息 ;这里配置的语法是rainerscript脚本语言写得 

service  rsyslog restart

tail /var/log/haproxy/haproxy-info.log   #查看haproxy的请求日志信息

8)测试高性能及高可用

打开一个浏览器(http://iphaproxy/test.html)   内容为  server192.168.10.2

再打开一个浏览器(http://iphaproxy/test.html)内容为  server192.168.10.3

再打开一个浏览器(http://iphaproxy/test.html)   内容为  server192.168.10.4

关闭nginx1会显示nginx2和nginx3的网页。说明当一台几点服务器故障,不会影响群集的使用。

你可能感兴趣的:(日常笔记)