Haproxy+nginx搭建web群集 - Go语言中文社区

Haproxy+nginx搭建web群集


一、haproxy是什么?

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

二、环境

三、实施

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 [<address>:<port_range>] interface <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 <method> <url> <vesion>
#mothod: OPTION、GET、HEAD (其中HEAD仅检测是否返回状态码200 更快,更简单)
option httpchk GET /index.php  //启用HTTP服务状态检测功能
#server <name> <address>[: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的网页。说明当一台几点服务器故障,不会影响群集的使用。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/bpb_cx/article/details/81568963
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2023-01-03 14:29:29
  • 阅读 ( 87 )
  • 分类:Go Web框架

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢