首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >配置HAProxy和Nginx负载均衡实验教程

配置HAProxy和Nginx负载均衡实验教程

原创
作者头像
神秘泣男子
发布2025-01-16 14:44:47
发布2025-01-16 14:44:47
4380
举报
文章被收录于专栏:nginx专栏nginx专栏Linux

前言

本文旨在为用户提供一份详细的 Nginx 和 HAProxy 安装与配置指南,适用于 CentOS 7 系统。通过本文,您将学会如何设置两个 Nginx 网站并使用 HAProxy 进行负载均衡,同时解决可能遇到的常见问题。本文还会补充一些扩展知识,帮助您更好地理解相关技术。


环境准备

在开始之前,请确保您的系统满足以下条件:

  • 操作系统:CentOS 7
  • 网络环境:能够访问外网(用于下载必要的依赖和配置源)
  • 权限:root 用户或具有 sudo 权限的用户

基础设置

  1. 关闭防火墙和 SELinux
代码语言:javascript
复制
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

注:关闭防火墙和 SELinux 是为了简化配置过程,但在生产环境中,请根据实际需求调整安全策略。

  1. 配置阿里云 Yum 源 替换默认的 Yum 源为阿里云源,以提高软件包下载速度。
代码语言:javascript
复制
cd /etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache

Nginx 的安装与配置

第一步:安装 Nginx

  1. 安装 Nginx:
代码语言:javascript
复制
yum install -y nginx
  1. 启动 Nginx 服务:
代码语言:javascript
复制
systemctl start nginx
systemctl enable nginx

第二步:配置第一个 Nginx 网站

  1. 设置网站内容:
代码语言:javascript
复制
echo "server1 192.168.192.111" > /usr/share/nginx/html/index.html
  1. 测试 Nginx 服务:
代码语言:javascript
复制
curl 127.0.0.1

输出结果应为:

代码语言:javascript
复制
server1 192.168.192.111

第三步:配置第二个 Nginx 网站

  1. 按照与第一个网站相同的步骤安装 Nginx。
  2. 设置网站内容:
代码语言:javascript
复制
echo "server2 192.168.192.112" > /usr/share/nginx/html/index.html
  1. 测试 Nginx 服务:
代码语言:javascript
复制
curl 127.0.0.1

输出结果应为:

代码语言:javascript
复制
server2 192.168.192.112

HAProxy 的安装与配置

关闭防火墙 selinux

安装所需组件

yum groupinstall -y 'Development Tools' pcre-devel zlib-devel

官网地址:官网地址点击

第一步:安装 HAProxy

  1. 安装所需依赖:
代码语言:javascript
复制
yum groupinstall -y 'Development Tools'
yum install -y pcre-devel zlib-devel
  1. 上传 HAProxy 安装包并解压:
代码语言:javascript
复制
tar -zxf haproxy-2.9.9.tar.gz
cd haproxy-2.9.9/
  1. 编译并安装:
代码语言:javascript
复制
make TARGET=linux-glibc && make install
  1. 创建配置目录:
代码语言:javascript
复制
mkdir /etc/haproxy

第二步:配置 HAProxy

  1. 复制默认配置文件:
代码语言:javascript
复制
cp /root/haproxy-2.9.9/addons/ot/test/be/haproxy.cfg /etc/haproxy/
  1. 编辑配置文件:
代码语言:javascript
复制
vim /etc/haproxy/haproxy.cfg

配置内容如下:

代码语言:javascript
复制
vim /etc/haproxy/haproxy.cfg




global
    nbthread 1       # 使用的线程数;'1' 表示单线程。
    maxconn 5000     # 允许的最大连接数。
    hard-stop-after 10s # 在关闭过程中,强制停止 HAProxy 的最长等待时间。
    # log localhost:514 local7 debug  # 日志配置(已注释)。
    # debug  # 启用调试模式(已注释)。
    stats socket /tmp/haproxy-be.sock mode 666 level admin # 创建用于管理级别统计信息的 Unix 套接字。


defaults
    log     global  # 使用全局日志配置。
    mode    http    # 处理连接的默认模式;此处为 HTTP。
    option  httplog # 启用 HTTP 请求日志记录。
    option  dontlognull # 不记录没有数据的连接。
    option  httpclose # 在每个响应后强制关闭连接。
    retries 3       # 尝试连接服务器失败时的重试次数。
    maxconn 4000    # 每个进程的最大连接数。
    timeout connect 5000  # 等待与服务器建立连接的最长时间(毫秒)。
    timeout client  50000 # 客户端侧的最大不活动时间(毫秒)。
    timeout server  50000 # 服务器侧的最大不活动时间(毫秒)。


listen stats
    mode http   # 统计接口使用 HTTP 模式。
    bind *:8080 # 将统计接口绑定到所有 IP 地址上的 8080 端口。
    stats uri / # 访问统计接口的 URI。
    stats admin if TRUE # 允许通过统计接口执行管理级别的命令。
    stats refresh 10s # 每 10 秒刷新一次统计信息。


#frontend ot-test-be-frontend
#    mode http   # 前端使用 HTTP 模式(已注释)。
#    default_backend servers-backend # 使用的默认后端(已注释)。


listen servers-backend
    bind *:80   # 将后端绑定到所有 IP 地址上的 80 端口。
    mode http   # 后端使用 HTTP 模式。
    server server-1 192.168.180.200:80 # 定义 server-1 及其 IP 和端口。
    server server-2 192.168.180.190:80 # 定义 server-2 及其 IP 和端口。

以下是关键修改的部分:

第三步:启动 HAProxy 服务

  1. 复制启动脚本并设置权限:
代码语言:javascript
复制
cp ~/haproxy-2.9.9/examples/haproxy.init /etc/init.d/haproxy
ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
chmod +x /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
  1. 启动服务:
代码语言:javascript
复制
/etc/init.d/haproxy start
  1. 检查服务状态:
代码语言:javascript
复制
/etc/init.d/haproxy status

常见问题解决

  • 启动报错: 如果出现以下错误:
代码语言:javascript
复制
/etc/init.d/haproxy: 第 26 行:[: =: 期待一元表达式
Usage: haproxy {start|stop|restart|reload|condrestart|status|check}

解决方法:

代码语言:javascript
复制
vim /etc/init.d/haproxy

将第 26 行修改为:

代码语言:javascript
复制
[ "$NETWORKING" = "no" ] && exit 0

测试配置

  1. 访问 HAProxy 的 8080 端口: 打开浏览器,访问 http://<HAProxy_IP>:8080,可以看到 HAProxy 的统计页面。
  2. 测试负载均衡: 在浏览器中访问 http://<HAProxy_IP>,页面会随机显示:
代码语言:javascript
复制
server1 192.168.192.111

代码语言:javascript
复制
server2 192.168.192.112


拒绝访问无法访问的问题

修改配置文件

代码语言:javascript
复制
frontend http_front
    bind *:80
    default_backend servers-backend


backend servers-backend
    mode http
    server server-1 192.168.192.111:80 check
    server server-2 192.168.192.112:80 check

扩展知识

  1. HAProxy 的工作原理
    • HAProxy 是一种高性能的 TCP/HTTP 负载均衡器和代理服务器,适用于高流量网站。
    • 它通过分发请求到多个后端服务器,提升服务的可用性和性能。
  2. Nginx 与 HAProxy 的区别
    • Nginx 主要用于 Web 服务和反向代理。
    • HAProxy 专注于负载均衡和高可用性。
  3. 生产环境中的安全建议
    • 启用防火墙并仅开放必要端口。
    • 配置 SSL/TLS 以确保数据传输安全。
    • 定期更新软件以修复已知漏洞。

总结

本文详细介绍了如何在 CentOS 7 系统中安装和配置 Nginx 与 HAProxy,并实现负载均衡功能。通过本文的学习,您应该能够搭建一个简单的高可用 Web 服务环境。在实际生产中,请根据需求进一步优化配置,并考虑安全性和性能的提升。

成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 环境准备
    • 基础设置
  • Nginx 的安装与配置
    • 第一步:安装 Nginx
    • 第二步:配置第一个 Nginx 网站
    • 第三步:配置第二个 Nginx 网站
  • HAProxy 的安装与配置
    • 第一步:安装 HAProxy
    • 第二步:配置 HAProxy
    • 第三步:启动 HAProxy 服务
    • 常见问题解决
  • 测试配置
  • 拒绝访问无法访问的问题
  • 扩展知识
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档