1. Nginx 负载均衡基础配置

首先,搭建一个基础的 Nginx 负载均衡器,用于将流量分发到多个后端服务器上。

步骤 1.1:安装 Nginx

在每台要作为负载均衡器的服务器上,安装 Nginx。可以使用包管理工具进行安装,例如在 Ubuntu 上执行以下命令:

sudo apt update
sudo apt install nginx

步骤 1.2:配置 Nginx 负载均衡

Nginx 的核心是配置文件 nginx.conf,我们可以在其中定义后端服务器池以及负载均衡策略。以下是一个简单的 Nginx 负载均衡配置:

# 定义一个名为 backend 的后端服务器池
upstream backend {
   server backend1.example.com weight=5;  # 设置权重
   server backend2.example.com weight=3;
   server backend3.example.com weight=2;
   
   # 启用健康检查(需要 Nginx Plus 支持开箱配置,开源版本需要第三方模块)
   # Nginx Plus 示例:
   health_check interval=10s fails=3 passes=2;
}

# 配置 HTTP 服务器
server {
   listen 80;
   server_name loadbalancer.example.com;

   location / {
       proxy_pass http://backend;
       proxy_set_header Host $host;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
  }
}

配置详解:

  • upstream 指令:定义了后端服务器池(backend),并为各服务器分配了不同的权重,Nginx 根据权重将流量按照比例分发到后端服务器。

  • 健康检查:此配置会定期检查后端服务器是否可用,确保当某个服务器宕机时,不会继续向其发送请求。

  • proxy_pass:将客户端请求代理到后端服务器池。

步骤 1.3:启动和测试 Nginx

确保配置无误后,启动或重启 Nginx 服务:

sudo nginx -t  # 测试配置文件是否正确
sudo systemctl restart nginx  # 重启 Nginx

测试:通过访问 http://loadbalancer.example.com,验证请求是否被均匀分发到后端服务器。

2. 高可用性配置(Keepalived + Nginx)

单独使用 Nginx 进行负载均衡仍然会面临单点故障问题。如果前端的 Nginx 宕机,整个服务将不可用。因此,我们需要通过 Keepalived 实现高可用的 Nginx 集群。

步骤 2.1:安装 Keepalived

在每台 Nginx 服务器上安装 Keepalived。以 Ubuntu 为例:

sudo apt install keepalived

步骤 2.2:配置 Keepalived

Keepalived 通过虚拟 IP 地址(VIP)实现故障转移。当主服务器宕机时,VIP 自动切换到备用服务器,确保服务的高可用性。

在主 Nginx 服务器上,编辑 Keepalived 的配置文件 /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {
  state MASTER  # 主服务器
  interface eth0  # 网络接口
  virtual_router_id 51
  priority 100  # 主服务器优先级较高
  advert_int 1  # 广播间隔
  authentication {
      auth_type PASS
      auth_pass 123456  # 密码
  }
  virtual_ipaddress {
       192.168.0.100  # 虚拟IP地址
  }
  track_script {
      chk_nginx  # 监控 Nginx 状态的脚本
  }
}

在备用 Nginx 服务器上,将 state 设置为 BACKUP,并将 priority 设置为较低的值,例如 90。

步骤 2.3:监控 Nginx 状态

Keepalived 可以通过监控 Nginx 的运行状态来决定是否切换 VIP。创建一个监控脚本 /etc/keepalived/check_nginx.sh

#!/bin/bash
if ! pidof nginx > /dev/null
then
  systemctl stop keepalived  # 如果 Nginx 停止,关闭 Keepalived 以触发 VIP 切换
fi

将此脚本添加为可执行:

sudo chmod +x /etc/keepalived/check_nginx.sh

在 Keepalived 的配置文件中添加监控脚本:

vrrp_script chk_nginx {
  script "/etc/keepalived/check_nginx.sh"
  interval 2
}

步骤 2.4:启动 Keepalived

完成配置后,启动或重启 Keepalived 服务:

sudo systemctl restart keepalived

测试:关闭主服务器的 Nginx,VIP 应该自动切换到备用服务器,确保服务不中断。

3. Nginx 健康检查和动态扩展

Nginx 可以结合健康检查功能,确保只有状态正常的服务器参与负载均衡。另外,动态扩展是应对突发流量的关键。以下是相关配置和实战方案。

步骤 3.1:配置健康检查(开源版本)

Nginx 开源版本不自带健康检查模块,可以通过第三方模块(如 ngx_http_healthcheck_module)实现健康检查。假设已安装此模块,配置如下:

upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;

# 使用第三方模块实现健康检查
check interval=5000 rise=2 fall=5 timeout=2000;
}

步骤 3.2:动态扩展后端服务器

结合容器化技术(如 Docker 或 Kubernetes),可以根据流量自动扩展后端服务器。例如,在 Kubernetes 集群中可以使用 Horizontal Pod Autoscaler (HPA) 自动扩展应用服务的副本数。

以下是在 Kubernetes 中配置自动扩展的示例:

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: backend-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: backend
minReplicas: 3
maxReplicas: 10
targetCPUUtilizationPercentage: 70 # 当 CPU 利用率超过 70% 时扩容

通过这种方式,后端服务可以根据负载动态扩展,Nginx 通过配置服务发现机制可以自动识别新的后端服务器。

4. Nginx SSL/TLS 配置

在生产环境中,启用 HTTPS 是必不可少的。以下是启用 SSL/TLS 的配置:

步骤 4.1:生成或获取 SSL 证书

使用 Let's Encrypt 生成免费的 SSL 证书:

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com

步骤 4.2:配置 Nginx 使用 SSL

server {
listen 443 ssl;
server_name yourdomain.com;

ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

# 自动将 HTTP 请求重定向到 HTTPS
server {
listen 80;
server_name yourdomain.com;
return 301 https://$host$request_uri;
}

总结

通过 Nginx 的负载均衡、Keepalived 实现高可用、动态扩展后端服务器以及健康检查,构建了一个高效、可扩展且高可用的互联网集群架构。

基于 Nginx 的大型互联网集群架构与实战方案的更多相关文章

  1. .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡

    1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...

  2. LVS+Keepalived+Squid+Nginx+MySQL主从高性能集群架构部署方案

    方案一,在tomcat的workers.properties里面配置相关条件 worker.tomcat.lbfactor= worker.tomcat.cachesize= worker.tomca ...

  3. windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,所以我打算分几篇分享文章来讲解,一步一步实现分 ...

  4. 网站集群架构(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

    前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高 ...

  5. 基于docker,consul,consul-template, registrator, nginx服务注册发现集群

      介绍 该工程主要实现服务的自动注册发现,从而达到提高运维效率,做到服务的自动发现和动态扩展. 服务注册发现 服务启动后自动被发现 动态变更负载均衡 自动伸缩 工具 1.Registrator 这是 ...

  6. rabbitmq系统学习(三)集群架构

    RabbitMQ集群架构模式 主备模式 实现RabbitMQ的高可用集群,一般在并发和数据量不高的情况下,这种模型非常的好用且简单.主备模式也称为Warren模式 HaProxy配置 listen r ...

  7. Nginx + Keepalived 高可用集群部署

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行.在使用 Nginx 做反向代理或者负载均衡 ...

  8. linux集群架构

    Linux集群架构   根据功能划分为两大类:高可用和负载均衡 高可用集群通常为两台服务器,一台工作,另外一台作为冗余,当提供服务的机器宕机,冗余将接替继续提供服务 实现高可用的开源软件有:heart ...

  9. Linux集群架构(一)

    第二十八课 Linux集群架构(一) 目录 一. 集群介绍 二. keepalived介绍 三. 用keepalived配置高可用集群 四. 负载均衡集群介绍 五. LVS介绍 六. LVS调度算法 ...

  10. Galera Cluster——一种新型的高一致性MySQL集群架构

    原文链接:https://www.sohu.com/a/147032902_505779,最近被分配定位mysql的问题,学习下. 1. 何谓Galera Cluster 何谓Galera Clust ...

随机推荐

  1. Python将本地文件上传到服务器

    1.首先本地有一个文件"E:\Double\python\dataCheck\html_detail\20221206140345_activeBug.html",我需要上传到服务 ...

  2. 【Java】MultiThread 多线程 Re01

    学习参考: https://www.bilibili.com/video/BV1ut411T7Yg 一.线程创建的四种方式: 1.集成线程类 /** * 使用匿名内部类实现子线程类,重写Run方法 * ...

  3. 【Java】Collection子接口:其一 List 列接口

    Collection子接口 其一:List接口List 接口存储结构:元素有序,且可重复,每个元素都有对应的索引根据索引获取容器元素 实现类有:ArrayList.LinkedList.Vector ...

  4. 【Vue】Re23 组件封装

    视频地址: https://www.bilibili.com/video/BV15741177Eh?p=119 common.css /* 演示案例是base.css */ body { paddin ...

  5. FFmpeg开发笔记(四十四)毕业设计可做的几个拉满颜值的音视频APP

    ​一年一度的毕业季就要到了,毕业设计算是大学生毕业前的最后一个大作业,尤其是计算机相关专业的毕业设计,通常要通过编程开发一个软件,比如开发一个图书馆管理系统,开发一个电商APP等等. 一个好的毕业设计 ...

  6. python3.13是否移除了GIL的限制

    近日看到新闻: https://baijiahao.baidu.com/s?id=1773013936355276204&wfr=spider&for=pc https://www.t ...

  7. 神秘 Arco 样式出现,祭出 Webpack 解决预期外的引用问题

    神秘 Arco 样式出现,祭出 Webpack 解决预期外的引用问题 Webpack是现代化的静态资源模块化管理和打包工具,其能够通过插件配置处理和打包多种文件格式,生成优化后的静态资源,核心原理是将 ...

  8. 【CMake系列】08-debug release特性设置

    在构建的程序版本中,一共有 debug release minisize relwithDebugInfo四种,其中我们主要使用到就是 debug release 两种,这两种存在着一定的不同,deb ...

  9. 【解决方法】libGL.so.1: cannot open shared object file: No such file or directory

    在配云端GPU服务器时,出现这个错误 File "/usr/local/lib/python3.6/dist-packages/cv2/__init__.py", line 8, ...

  10. C#二叉搜索树算法

    二叉搜索树算法实现原理 二叉搜索树(Binary Search Tree,简称BST)是一种节点有序排列的二叉树数据结构.它具有以下性质: 每个节点最多有两个子节点. 对于每个节点,其左子树的所有节点 ...