使用 Haproxy + Nginx 实现高可用

简介: Haproxy 是目前比较流行的一种集群调度工具,同类集群调度器工具有很多,如 LVS 和 Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂;Nginx 的 upstream 模块虽然支持集群功能,但是对集群节点健康检查功能不强,性能没有 Haproxy 好。

使用 Haproxy + Nginx 实现高可用



一、基本介绍


二、使用 Haproxy + Nginx 实现高可用


     1.安装 Nginx 服务


     2.安装 Haproxy 服务


     3.验证 Web 群集


     4.Haproxy 日志管理


        1)修改 Rsyslog 配置


        2)查看日志信息


     5.Haproxy 配置优化



一、基本介绍



Haproxy 是目前比较流行的一种集群调度工具,同类集群调度器工具有很多,如 LVS 和 Nginx。相比较而言,LVS 性能最好,但是搭建相对复杂;Nginx 的 upstream 模块虽然支持集群功能,但是对集群节点健康检查功能不强,性能没有 Haproxy 好。


LVS、Haproxy、Nginx 最常用的调度器算法有三种,如下:


  • RR:最简单最常用的一种算法,即轮询调度。
  • LC:最小连接数算法,根据后端的节点连接数大小动态分配前端请求。
  • SH:基于来源访问调度算法,此算法用于一些 Session 会话记录在服务器端的场景,可以基于来源的 IP、Cookie 等做群集调度。


二、使用 Haproxy + Nginx 实现高可用



准备工作:


image.png


1.安装 Nginx 服务


[root@Nginx-1 ~]# yum -y install pcre-devel zlib-devel
[root@Nginx-1 ~]# wget http://www.nginx.org/download/nginx-1.18.0.tar.gz
[root@Nginx-1 ~]# tar zxf nginx-1.18.0.tar.gz -C /usr/src/
[root@Nginx-1 ~]# useradd -M -s /sbin/nologin nginx                     # 创建 Nginx 运行用户
[root@Nginx-1 ~]# cd /usr/src/nginx-1.18.0/
[root@Nginx-1 nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install


1)分别在两台 Nginx 上创建页面:


[root@Nginx-1 ~]# echo "<h1>this is web111</h1>" > /usr/local/nginx/html/index.html
[root@Nginx-2 ~]# echo "<h1>this is web222</h1>" > /usr/local/nginx/html/index.html


2)启动 Nginx:


[root@Nginx-1 ~]# /usr/local/nginx/sbin/nginx
[root@Nginx-1 ~]# netstat -anpt | grep nginx


2.安装 Haproxy 服务


[root@Haproxy ~]# yum -y install pcre-devel bzip2-devel
[root@Haproxy ~]# https://www.haproxy.org/download/1.5/src/haproxy-1.5.19.tar.gz
[root@Haproxy ~]# tar zxf haproxy-1.5.19.tar.gz -C /usr/src/
[root@Haproxy ~]# cd /usr/src/haproxy-1.5.19/
[root@Haproxy haproxy-1.5.19]# make TARGET=linux26                    # 64位系统
[root@Haproxy haproxy-1.5.19]# make install                           # 安装


1)配置 Haproxy


[root@Haproxy haproxy-1.5.19]# mkdir /etc/haproxy                 # 创建配置文件目录
[root@Haproxy haproxy-1.5.19]# cp examples/haproxy.cfg /etc/haproxy/        # 将配置文件复制到刚才目录中
[root@Haproxy haproxy-1.5.19]# cd
[root@Haproxy ~]# vim /etc/haproxy/haproxy.cfg
# this config needs haproxy-1.1.28 or haproxy-1.2.1
global
        log 127.0.0.1    local0               # 配置日志记录. local0 为日志设备. 默认存放到系统日志
        log 127.0.0.1    local0 notice          # notice 为日志级别. 通常为 24 个级别
        #log loghost    local0 info
        maxconn 4096                # 最大连接数
        uid 99                        # 用户ID
        gid 99                    # 组ID
        daemon
        #debug
        #quiet
defaults
        log     global
        mode    http                # 模式为 HTTP
        option  httplog                   # 采用 HTTP 日志格式记录日志
        option  dontlognull     
        retries 3                 # 检测节点服务器失败次数. 连续达到三次失败. 则认为节点不可用
        redispatch                  # 当服务器负载很高时. 自动结束当前队列处理比较久的连接
        maxconn 2000                  # 最大连接数
        contimeout      5000              # 连接超时时间
        clitimeout      50000             # 客户端超时时间
        srvtimeout      50000             # 服务器超时时间
listen  webcluster 0.0.0.0:80             # 定义一个 Web 应用
        option httpchk GET /index.html        # 检测服务器的 index.html 文件
        balance  roundrobin             # 负载调度器算法使用轮询算法
        server inst1 192.168.1.2:80 check inter 2000 fall 3           # 指定群集服务池中服务器 IP
        server inst2 192.168.1.3:80 check inter 2000 fall 3           # 这两个是 Nginx 的 IP


image.png


2)创建自启动脚本


[root@Haproxy ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
[root@Haproxy ~]# chmod +x /etc/init.d/haproxy                        # 添加可执行权限
[root@Haproxy ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy             # 软链接. 优化执行路径
[root@Haproxy ~]# /etc/init.d/haproxy restart                         # 重启 Haproxy


image.png



3.验证 Web 群集


1)验证负载均衡(使用浏览器访问:http://192.168.1.10


image.png


再次访问:


image.png


2)验证高可用(在任意一台 Nginx 服务器上关闭网站服务)


[root@Nginx-1 ~]# killall -s QUIT nginx
[root@Nginx-1 ~]# netstat -anpt | grep 80


在客户机上使用浏览器访问测试:


image.png



  • 刷新发现还是这个页面,并不会切换,原因是刚才关闭了一台 Nginx 服务器。


当测试成功后再打开 Nginx 即可


[root@Nginx-1 ~]# /usr/local/nginx/sbin/nginx


4.Haproxy 日志管理


  • Haproxy 的日志默认是输出到系统的 syslog 中,查看起来不是很方便,为了方便管理 haproxy 的日志,在生产环境中单独定义。


修改 Haproxy 配置文件中关于日志配置的选项,将原有的日志配置更改为以下配置:


[root@Haproxy ~]# vim /etc/haproxy/haproxy.cfg
global
        log /dev/log    local0 info
        log /dev/log    local1 notice
[root@Haproxy ~]# /etc/init.d/haproxy restart                   # 重启 Haproxy


image.png


1)修改 Rsyslog 配置


[root@Haproxy ~]# vim /etc/rsyslog.d/haproxy.conf
添加:
# 将 Haproxy 的 info 日志输出到 /var/log/haproxy/haproxy-info.log 文件中
if ($programname == 'haproxy' and $syslogseverity-text == 'info') then -/var/log/haproxy/haproxy-info.log
& ~
# 将 Haproxy 的 notice 日志输出到 /var/log/haproxy/haproxy-notice.log 文件中
if ($programname == 'haproxy' and $syslogseverity-text == 'notice') then -/var/log/haproxy/haproxy-notice.log
& ~
[root@Haproxy ~]# systemctl restart rsyslog                 # 重启 Rsyslog 服务


  • 如果报错如下,那可能是因为刚刚的配置文件有错误。


image.png


2)查看日志信息


在客户机使用浏览器访问:http://192.168.1.10


image.png


5.Haproxy 配置优化


image.png


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
Java 应用服务中间件 Shell
Nginx+Keepalived+Tomcat 实现Web高可用集群
Nginx+Keepalived+Tomcat 实现Web高可用集群
563 0
|
负载均衡 网络协议 关系型数据库
一口把LVS、Nginx及HAProxy工作原理讲清楚了。(附图)
一口把LVS、Nginx及HAProxy工作原理讲清楚了。(附图)
406 0
|
负载均衡 前端开发 应用服务中间件
负载均衡指南:Nginx与HAProxy的配置与优化
负载均衡指南:Nginx与HAProxy的配置与优化
1045 3
|
负载均衡 监控 应用服务中间件
在Linux中,lvs/nginx/haproxy 优缺点?
在Linux中,lvs/nginx/haproxy 优缺点?
|
运维 负载均衡 监控
Nginx加Keepalived实现高可用
使用Nginx和Keepalived来实现高可用性的方案,对于确保关键服务的稳定性和可靠性来说是非常有效的。此配置涉及多个步骤,包括各个服务的安装、设置及测试,目标是在主服务器故障时能无缝切换,以确保服务的持续可用。正确的配置和充分的测试是实现高可用性的保证,这也要求管理员对这些工具和它们背后的原理有深入的了解。
785 1
|
负载均衡 应用服务中间件 Linux
在Linux中,LVS、Nginx、HAproxy有什么区别?工作中怎么选择?
在Linux中,LVS、Nginx、HAproxy有什么区别?工作中怎么选择?
|
负载均衡 网络协议 应用服务中间件
HAProxy 与 NGINX:全面比较
【8月更文挑战第21天】
3633 0
HAProxy 与 NGINX:全面比较
|
存储 缓存 前端开发
(三)Nginx一网打尽:动静分离、压缩、缓存、黑白名单、跨域、高可用、性能优化...想要的这都有!
早期的业务都是基于单体节点部署,由于前期访问流量不大,因此单体结构也可满足需求,但随着业务增长,流量也越来越大,那么最终单台服务器受到的访问压力也会逐步增高。时间一长,单台服务器性能无法跟上业务增长,就会造成线上频繁宕机的现象发生,最终导致系统瘫痪无法继续处理用户的请求。
717 1
|
监控 负载均衡 应用服务中间件
Keepalive 解决nginx 的高可用问题
Keepalive 解决nginx 的高可用问题
|
存储 运维 负载均衡
Heartbeat+Nginx实现高可用集群
通过Heartbeat与Nginx的结合,您可以建立一个高可用性的负载均衡集群,确保在服务器故障时仍能提供无中断的服务。这种配置需要仔细的计划和测试,以确保系统在故障情况下能够正确运行。
344 2