从零开始搭建 LVS 高可用集群 (单机)

news2024/9/20 18:53:01

从零开始搭建 LVS 高可用集群 (单机)

背景

从零开始搭建 LVS 高性能集群 (DR模式)
从零开始搭建 Keepalaived+Lvs 高可用集群 (Aliyun部署)

经过前面2篇关于lvs集群部署文章,相信跟着部署文档,实际部署过集群的大家对lvs服务有了深刻的了解。问题是:“无法在 Aliyun 上部署keepalived + lvs 高可用集群, 那我前面学的知识点就没用了?” 。其实 lvs 在 kubernetes 集群中的使用也比较广泛。k8s 资源 service 实际上就是实现了一个 lvs 路由配置。

现在的构想就是: 我不想在单个ECS实例上部署 Kubernetes 单节点,又想实现 lvs 部署 Nginx 高可用集群?

这篇文章就是关于如何在单个ESC实例上部署 Nginx 高可用集群。

架构

架构

lvs-nginx

本设计方案采用一台阿里云服务器搭建使用容器运行的Nginx集群,并通过LVS(Linux Virtual Server)的NAT模式实现负载均衡和高可用性。LVS作为负载均衡器运行在网络层,将进入的请求分发到后端的Nginx容器实例。

流程

  1. 准备一台阿里云ECS服务器,安装必要的操作系统和软件环境,如Docker。
  2. 配置Docker环境,创建Nginx镜像,并上传到阿里云容器镜像服务。
  3. 在ECS服务器上安装并配置LVS,设置NAT模式。
  4. 启动Nginx容器实例,确保它们可以正常运行并提供服务。
  5. 在LVS中配置虚拟IP(VIP)和后端容器的IP地址及端口映射。
  6. 配置网络规则,确保流量可以正确路由到LVS监听的VIP。
  7. 测试负载均衡和高可用性,确保系统在高负载下正常工作。

各服务功能

  • LVS:作为负载均衡器,负责接收外部请求并分发到后端的Nginx容器。
  • Docker:提供容器化环境,运行Nginx服务。
  • Nginx:作为Web服务器,处理来自LVS的请求并提供内容服务。

部署

环境配置

  1. Aliyun 控制台开通 弹性EIP
  2. ECS 实例添加 弹性网卡, 并与 EIP 绑定

绑定结果

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.19.68.106  netmask 255.255.240.0  broadcast 172.19.79.255
        inet6 fe80::216:3eff:fe04:9758  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:04:97:58  txqueuelen 1000  (Ethernet)
        RX packets 435005  bytes 89706618 (89.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 403875  bytes 265589398 (265.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.19.68.108  netmask 255.255.240.0  broadcast 172.19.79.255
        inet6 fe80::216:3eff:fe27:98cd  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:27:98:cd  txqueuelen 1000  (Ethernet)
        RX packets 144077  bytes 10924805 (10.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 83727  bytes 4877299 (4.8 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

部署

  1. 在阿里云控制台创建ECS实例,选择合适的配置以满足性能需求。
  2. 连接到ECS实例,安装Docker及其他依赖。
  3. 创建Nginx Dockerfile,构建镜像,并推送到容器镜像服务。
  4. 编写Docker Compose文件定义Nginx服务,使用Docker Compose启动Nginx容器。
  5. 安装LVS软件包,并配置NAT模式,设置VIP和后端Nginx容器的端口转发规则。
  6. 配置iptables规则,实现网络地址转换。
  7. 进行压力测试和故障转移测试,确保系统稳定性和可靠性。

nginx部署

docker-compose.yaml

version: "3"
services:
   nginx-8080:
     container_name: nginx-8080
     image: nginx:1.23.0-alpine
     ports:
       - 8080:80
     volumes:
       - ./logs-8080:/var/log/nginx
     restart: always

   nginx-8081:
     container_name: nginx-8081
     image: nginx:1.23.0-alpine
     ports:
       - 8081:80
     volumes:
       - ./logs-8081:/var/log/nginx
     restart: always

   nginx-8082:
     container_name: nginx-8082
     image: nginx:1.23.0-alpine
     ports:
       - 8082:80
     volumes:
       - ./logs-8082:/var/log/nginx
     restart: always

lvs部署

director.sh

#!/bin/bash

iptables -t nat -F
# VIP=139.224.136.161
VIP=172.19.68.108 # 弹性EIP

DIP=172.19.68.106 # ECS 内网IP
RIP1=172.19.68.106

# director服务器上开启路由转发功能:
echo 1 > /proc/sys/net/ipv4/ip_forward

# 关闭 icmp 的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects

# director设置 ipvsadm
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t $VIP:8080 -s rr
$IPVSADM -a -t $VIP:8080 -r $RIP1:8080 -m # nat
$IPVSADM -a -t $VIP:8080 -r $RIP1:8081 -m
$IPVSADM -a -t $VIP:8080 -r $RIP1:8082 -m


echo "start director nat mode"

测试

  1. lvs 链路规则
root@iZuf64d3yu2ti34bwqerlqZ:/home# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.19.68.108:8080 rr
  -> 172.19.68.106:8080           Masq    1      0          0         
  -> 172.19.68.106:8081           Masq    1      0          0         
  -> 172.19.68.106:8082           Masq    1      0          0
  1. Nginx 集群服务
root@iZuf64d3yu2ti34bwqerlqZ:/home/wcq/lvs/nginx# docker-compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
nginx-8080          "/docker-entrypoint.…"   nginx-8080          running             0.0.0.0:8080->80/tcp, :::8080->80/tcp
nginx-8081          "/docker-entrypoint.…"   nginx-8081          running             0.0.0.0:8081->80/tcp, :::8081->80/tcp
nginx-8082          "/docker-entrypoint.…"   nginx-8082          running             0.0.0.0:8082->80/tcp, :::8082->80/tcp 
  1. Nginx 服务访问 EIP:8080负载均衡。

nginx-lvs

  1. lvs 转发记录
root@iZuf64d3yu2ti34bwqerlqZ:/home/w# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.19.68.108:8080 rr
  -> 172.19.68.106:8080           Masq    1      0          1         # 请求转发的次数
  -> 172.19.68.106:8081           Masq    1      0          1         
  -> 172.19.68.106:8082           Masq    1      0          2 

优劣势

  • 优势

    • 高可用性:LVS和Nginx容器的结合提供了高可用的Web服务。
    • 易于扩展:通过增加更多的Nginx容器实例来扩展服务能力。
    • 资源隔离:容器化确保了服务之间的资源隔离和安全性。
    • 快速部署:Docker容器可以快速部署和启动。
  • 劣势

    • 单点故障:如果ECS实例出现问题,整个集群将受到影响。
    • 资源限制:容器数量和性能受限于ECS实例的资源。
    • 网络复杂性:配置LVS和iptables可能相对复杂。
  • 性能监控:使用阿里云监控服务或其他第三方工具监控系统性能。

  • 日志管理:集中管理Nginx容器的日志,便于问题排查和分析。

通过这种设计,可以构建一个在阿里云上运行的高可用和负载均衡的Nginx集群。利用容器化和LVS的组合,实现了易于扩展和管理的Web服务架构。

ISSUE

  1. 单个ESC实例上,是否可以使用 DR 或 TUN 模式?
    同一台ESC实例中,运行3个Nginx服务,通过同一个端口访问,DR 与 TUN 模式都不支持端口转发。

  2. Nginx本身就支持负载均衡,采用LVS作为Nginx 集群负载均衡的意义?
    这篇文章只是一个引子,Nginx服务可以替换成其他服务。使用 lvs的高性能,替换 Nginx 做负载均衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2069429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【html+css 绚丽Loading】000015 九转轮回珠

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

Total Uninstall - 专业 Windows 卸载清理工具,让软件卸载更彻底

Total Uninstall 是一款专业的卸载清理工具&#xff0c;可帮助我们无残留卸载各类软件。 这款工具相当强大&#xff0c;卸载能做到彻底清除软件痕迹&#xff0c;同时具备软件分析、安装记录、系统清理、软件备份搬家等多种功能。 软件支持买前免费试用&#xff0c;感兴趣的朋友…

新疆旅游今年为什么这么火热?

今年新疆旅游火爆全网&#xff0c;不夸张的说&#xff0c;打开朋友圈&#xff0c;几乎一半人在新疆旅游、还有一半人在去新疆旅游的路上。 大家也纷纷在小红书上晒出新疆相关的笔记&#xff0c;覆盖旅游、美食、穿搭、养生、摄影等众多热门行业&#xff0c;相关话题多次登上小…

MySQL从入门到精通(第5-8章)

文章目录 5 排序与分页5.1 排序数据5.1.1 排序规则5.1.2 单列排序5.1.3 多列排序 5.2 分页5.2.1 实现规则5.2.2 拓展 6 多表查询6.1 笛卡尔积6.1.1 笛卡尔积&#xff08;或交叉连接&#xff09;的理解6.1.2 笛卡尔积可能存在的问题与解决 6.2 多表查询分类讲解6.2.1 等值连接与…

AI如何让销售更智能更精确?AI赋能销售的全流程深度解析

前言 随着人工智能&#xff08;AI&#xff09;技术的迅速发展&#xff0c;AI已经渗透到各个行业&#xff0c;尤其是在销售领域&#xff0c;AI正通过智能化外呼系统与CRM&#xff08;客户关系管理&#xff09;系统的结合&#xff0c;极大提升了企业的销售效率。在这篇文章中&am…

C++动态规划及九种背包问题

目录 目录 一&#xff0c;动态规划 一&#xff09;&#xff0c;动态规划的定义 二&#xff09;&#xff0c;动态规划其他的相关概念&#xff08;也是使用条件&#xff09; 1&#xff0c;重叠子问题 2&#xff0c; 最优子结构 3&#xff0c;无后效性 三&#xff09;&…

C++ 设计模式——观察者模式

观察者模式 观察者模式主要组成部分例一&#xff1a;工作流程第一步&#xff1a;定义观察者接口第二步&#xff1a;定义主题接口第三步&#xff1a;实现具体主题第四步&#xff1a;实现具体观察者第五步&#xff1a;主函数UML 图UML 图解析 例二&#xff1a;工作流程第一步&…

rocky linux配置说明

下载&#xff1a; 目前最新版的 v9.4 镜像 Download - Rocky Linux 可以在官网下载&#xff0c;不过挺慢的&#xff0c;可以试试阿里云的https://mirrors.aliyun.com/rockylinux/会稍快点 安装&#xff1a; 其步骤和centos基本一样&#xff0c;其中磁盘分区模式是gpt这个并未…

Ingress Nginx Controller

Kubernetes集群 服务暴露 Nginx Ingress Controller 一、ingress控制器 1.1 ingress控制器作用 &#xff08;类似于slb&#xff0c;做代理服务&#xff09; ingress controller可以为kubernetes 集群外用户访问Kubernetes集群内部pod提供代理服务。 提供全局访问代理访问流…

【大模型LLM第九篇】高效的微调方式:Self-Evolved多样性数据采样

前言 来自阿里巴巴和北京大学的文章&#xff1a;Self-Evolved Diverse Data Sampling for Efficient Instruction Tuning link&#xff1a;https://arxiv.org/pdf/2311.08182 github&#xff1a;https://github.com/OFA-Sys/DiverseEvol 一、摘要 提升大型语言模型的指令遵循能…

鸿蒙Harmony开发——设备发烫问题分析

&#xff1b; 本文字数&#xff1a;4207字 预计阅读时间&#xff1a;25分钟 设备过热问题是影响用户体验和设备性能的重要因素。过热不仅会导致性能下降&#xff0c;还可能损坏硬件。因此&#xff0c;开发者需要及时发现、分析并解决这一问题。本文将首先介绍评估设备过热的关键…

Qt/C++控件实例 QWidget联合动画实现卷轴效果

显示特点 动态翻页效果&#xff1a;数字在更新时&#xff0c;会有一个从前一数字向下一数字过渡的翻页效果。这种过渡动画使得数字变化过程更加平滑和自然&#xff0c;避免了突然的跳变。 高对比度显示&#xff1a;每个数字的背景框颜色为红色&#xff0c;数字颜色为白色&…

每日一个科研绘图·气泡图|24-08-24

一、气泡图 气泡图是一种数据可视化工具&#xff0c;它在传统的二维散点图的基础上增加了一个维度&#xff0c;使得我们能够同时观察三个变量之间的关系。这种图表通过点的大小来表示第三个数值变量的大小&#xff0c;从而提供了一种直观的方式来探索数据中的模式和趋势。 在…

Facebook的AI助手:如何提升用户社交体验的智能化

在现代社交媒体平台中&#xff0c;人工智能&#xff08;AI&#xff09;的应用正逐渐改变人们的社交体验。Facebook作为全球最大的社交媒体平台之一&#xff0c;已在AI技术的开发与应用上投入了大量资源&#xff0c;并通过其AI助手为用户提供了更加个性化、智能化的互动体验。这…

pycharm 隐藏 __ init __ .py 文件

pycharm 隐藏 __ init __ .py 文件 每次写python项目时&#xff0c;都会有一个自动生成__ init __ .py文件&#xff0c;看的很累&#xff0c;所以想把__ init __ .py文件给隐藏掉 方法&#xff1a; &#xff08;1&#xff09;File -> Settings (2) Appearance & Behav…

武汉流星汇聚:全球化布局与本地化运营,亚马逊电商帝国崛起秘诀

在数字时代的浪潮中&#xff0c;亚马逊如同一颗璀璨的星辰&#xff0c;照亮了全球电子商务的天空。作为美国乃至全球访问量最高的电商平台&#xff0c;亚马逊不仅重塑了消费者的购物习惯&#xff0c;更以其独特的商业模式、惊人的订单履行速度和卓越的购物体验&#xff0c;引领…

FFmpeg的入门实践系列四(AVS)

欢迎诸位来阅读在下的博文~ 在这里&#xff0c;在下会不定期发表一些浅薄的知识和经验&#xff0c;望诸位能与在下多多交流&#xff0c;共同努力 文章目录 前期博客参考书籍一、AVS简介二、基于FFmpeg配置AVS2 前期博客 FFmpeg的入门实践系列一(环境搭建) FFmpeg的入门实践系列…

零基础5分钟上手亚马逊云科技-利用MQ为应用解耦

简介&#xff1a; 欢迎来到小李哥全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;通过这篇文章大家零基础5分钟就能完全学会亚马逊云科技一个经典的服务开发架构方案。 我会每天介绍一个基于亚马逊云科技…

揭秘AI绘画赚钱之道:学会这十大技巧,轻松踏入高薪岗位,实现财务自由!

亲爱的学友们&#xff0c;当我们谈论AI绘画&#xff0c;不仅仅是在描绘科技如何重塑艺术疆界&#xff0c;更是在探索一场颠覆性的商业革命。自从AI绘画技术从萌芽走向繁荣&#xff0c;它已经从简单的图像风格转换跃升为能读懂人心、创世般生成各类视觉作品的神奇力量。今天&…

哈夫曼树和哈夫曼编码详解(包含Java代码实现)

目录 什么是哈夫曼树&#xff1f;如何构造哈夫曼树&#xff1f;构造过程代码实现哈夫曼树的结构构建哈夫曼树并计算WPL值测试代码 什么是哈夫曼编码&#xff1f;如何构建哈夫曼编码&#xff1f;构建过程代码实现 什么是哈夫曼树&#xff1f; 哈夫曼树又称为最优树&#xff0c;是…