首页 > 其他分享 >架构设计:负载均衡层设计方案(5)——LVS单节点安装

架构设计:负载均衡层设计方案(5)——LVS单节点安装

时间:2024-09-20 08:55:42浏览次数:3  
标签:架构设计 LVS IP 192.168 Server 设计方案 服务器 root

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

1、概述

上篇文章《架构设计:负载均衡层设计方案(4)——LVS原理》(架构设计:负载均衡层设计方案(4)——LVS原理_负载均衡设计原理-CSDN博客),我们介绍了LVS的工作模式,和每一种模式的具体工作过程。这篇文章中,我们将介绍单一LVS节点的安装方式。比起上一篇文章,这一片要提到的安装和配置就是非常简单的了,只要您了解原理,实践就是从容的事情。

您可以在您的电脑上使用VMware虚拟机,按照下面介绍的过程一步一步实践。我们将采用两台虚拟机,一台作为LVS节点,另外一台安装了Nginx的服务器作为Real Server节点。

2、LVS-NAT 模式安装

2.1、准备工作——LVS Server:

LVS Server:LSV Server有两张网卡。

  • eth0:192.168.100.10:这张网卡对应一个封闭的内网,不能访问外网资源,外网也不能直接通过这个IP访问这台主机
  • eth1:192.168.220.100:这张网卡设置的IP可以访问外网,也可以被外网访问。eth1的网关:192.168.220.1。
        以下是设置的eth0    ip信息,
        [root@lvs1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
        DEVICE="eth0"
        BOOTPROTO="static"
        HWADDR="00:0C:29:3E:4A:4F"
        ONBOOT="yes"
        TYPE="Ethernet"
        IPADDR="192.168.100.10"
        NETMASK="255.255.255.0"
        ====================================
        以下是设置的eth1  ip信息
        [root@lvs1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
        DEVICE="eth1"
        BOOTPROTO="static"
        HWADDR="00:0C:29:3E:4A:59"
        ONBOOT="yes"
        TYPE="Ethernet"
        IPADDR="192.168.220.100"
        NETMASK="255.255.255.0"
        GATEWAY="192.168.220.1"

记得设置完成后,要重启network服务:

    [root@lvs1 ~]# service network restart

ping ping更健康(说明到外网的网管工作是正常的):

    [root@lvs1 ~]# ping 192.168.220.1
    PING 192.168.220.1 (192.168.220.1) 56(84) bytes of data.
    64 bytes from 192.168.220.1: icmp_seq=1 ttl=128 time=0.447 ms
    64 bytes from 192.168.220.1: icmp_seq=2 ttl=128 time=0.154 ms

另外还可以通过route命令检查:

    [root@lvs1 ~]# route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.100.0   *               255.255.255.0   U     1      0        0 eth0
    192.168.220.0   *               255.255.255.0   U     1      0        0 eth1
    default         192.168.220.1   0.0.0.0         UG    0      0        0 eth1

注意,route表中有一项eth1的default的信息,指向192.168.220.1。说明路由配置是正确的。

2.2、准备工作——Real Server:

Real Server:Real Server有一张网卡,在一个封闭的内网环境中。

  • eth0:192.168.100.11:这样LVS Server和Real Server就组成了一个相对封闭的局域网络。注意按照我们介绍的NAT原理,Real Server的eth0的默认网关要设置成Lvs Server:192.168.100.10.
  • 在Real Server上运行了一个Nginx程序,在80端口上。这样以便在后续的过程中,测试LVS-NAT的工作是否正常。

以下是设置的Real Server eth0 的IP信息:

    [root@vm1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
    DEVICE="eth0"
    BOOTPROTO="static"
    HWADDR="00:0C:29:45:04:32"
    ONBOOT="yes"
    TYPE="Ethernet"
    IPADDR=192.168.100.11
    NETMASK=255.255.255.0
    GATEWAY="192.168.100.10"

一定注意Real Server的网管要设置到LVS的IP:192.168.100.10。接着,看看Nginx是不是工作正常的:

202307271854220861.png

当然,同样的ping ping更健康:

    [root@vm1 ~]# ping 192.168.100.10
    PING 192.168.100.10 (192.168.100.10) 56(84) bytes of data.
    64 bytes from 192.168.100.10: icmp_seq=1 ttl=64 time=0.259 ms
    64 bytes from 192.168.100.10: icmp_seq=2 ttl=64 time=0.215 ms
    64 bytes from 192.168.100.10: icmp_seq=3 ttl=64 time=0.227 ms

另外一个检查方式,也可以通过route命令:

    [root@vm1 ~]# route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.100.0   *               255.255.255.0   U     1      0        0 eth0
    default         192.168.100.10  0.0.0.0         UG    0      0        0 eth0

注意,默认的路由指向192.168.100.10。
完成准备工作后,我们可以开始安装和配置LVS了。

2.3、开始安装和配置LVS-NAT模式:

ipvsadm是一个LVS的管理程序。我们队LVS的配置都是通过这个管理程序进行实现的。首先我们要安装ipvsadm:

    yum -y install ipvsadm

然后开始配置。首先我们要设置LVS机器支持IP转发功能。注意默认IP转发功能是关闭的,重启机器后,又会关闭:

    [root@lvs1 ~]# echo 1 >> /proc/sys/net/ipv4/ip_forward

然后我们查看一下,是否改写成功:

    [root@lvs1 ~]# cat /proc/sys/net/ipv4/ip_forward 
    1

注意,如果您使用vim或者vi命令,改写文件,是不会成功的。因为这个文件存在于内存。不在硬盘上。所以只能通过echo这样的命令改写。

接下来执行如下的命令:

    [root@lvs1 ~]# ipvsadm -At 192.168.220.100:80 -s rr
    [root@lvs1 ~]# ipvsadm -at 192.168.220.100:80 -r 192.168.100.11 -m

我们来解释一下其中的参数:

    -A --add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。
    -t --tcp-service service-address 说明虚拟服务器提供的是tcp 的服务。
    -s --scheduler scheduler 使用的调度算法,可选项包括:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq(关于调度算法我们在上篇文章中已经详细介绍了)
    -r --real-server server-address 真实的服务器[Real-Server:port]。
    -m --masquerading 指定LVS 的工作模式为NAT 模式。

当然ipvsadm还包括很多参数,后面慢慢讲,然后再本文章的最后部分,会给出一个比较完整的参数汇总。最后我们测试一下:

202307271854230172.png

我们在相对于Real Server的外网,通过192.168.220.100的LVS Server IP访问到了Real Server上的Nginx服务。安装和配置成功。

2.4、关于iptables和重启服务的说明

在配置LVA-NAT过程中,建议关闭LVS和Real Server的防火墙服务。这样可以避免不必要的错误发生,增加一次配置成功的几率。但是正常生产环境中,LVS的防火墙根据实际情况最好还是要打开。

请注意,刚才使用ipvsadm配置的信息,在LVS服务器重启后,就会失效。包括ip_forward的配置 。所以,最好制作一个脚本文件,并加入到/etc/profile中:

    vim /usr/lvsshell.sh
    
    #!/bin/bash
    echo 1 > /proc/sys/net/ipv4/ip_forward 
    ipvsadm -C
    ipvsadm -At 192.168.220.100:80 -s rr
    ipvsadm -at 192.168.220.100:80 -r 192.168.100.11 -m

3、LVS-DR 模式安装

3.1、准备工作——LVS Server

为了让您了解LVS的另外设置方式,本次我们使用VIP的方式,而不是两张网卡的方式(当然您也可以用两张网卡的方式)。VIP的方式是后面我们将讲到的LVS + Keepalived组合工作模式的常用方式。所谓VIP就死虚拟IP,是指这个IP不会固定捆绑到某一个网卡设备,而是通过ifconfig命令绑定,并在“适当时候”这种绑定关系会随之变化:

DIP:192.168.220.137
VIP:192.168.220.100

首先我们看看在没有设置VIP之前,LVS主机上的IP信息:

    [root@lvs1 ~]# ifconfig 
    eth1      Link encap:Ethernet  HWaddr 00:0C:29:3E:4A:59  
              inet addr:192.168.220.137  Bcast:192.168.220.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fe3e:4a59/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:2612 errors:0 dropped:0 overruns:0 frame:0
              TX packets:117 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:159165 (155.4 KiB)  TX bytes:8761 (8.5 KiB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:210 errors:0 dropped:0 overruns:0 frame:0
              TX packets:210 errors:0 dropped:0 overruns:0 carrier:0 
              collisions:0 txqueuelen:0 
              RX bytes:16944 (16.5 KiB)  TX bytes:16944 (16.5 KiB)

然后我们来设置VIP信息:

    [root@lvs1 ~]# ifconfig eth1:0 192.168.220.100 broadcast 192.168.220.100 netmask 255.255.255.255 up
    [root@lvs1 ~]# route add -host 192.168.220.100 dev eth1:0

路由表会有新的路由信息:

    [root@lvs1 ~]# route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.220.100 *               255.255.255.255 UH    0      0        0 eth1
    192.168.100.0   *               255.255.255.0   U     1      0        0 eth0
    192.168.220.0   *               255.255.255.0   U     1      0        0 eth1
    default         192.168.220.1   0.0.0.0         UG    0      0        0 eth1

这时,通过一个外网IP,可以ping通这个VIP(下面这个DOS系统是VM的母机):

    C:\Users\yinwenjie>  ping 192.168.220.100
    正在 Ping 192.168.220.100 具有 32 字节的数据:
    来自 192.168.220.100 的回复: 字节=32 时间<1ms TTL=64
    来自 192.168.220.100 的回复: 字节=32 时间<1ms TTL=64

以上,我们完成了LVS主机设置LVS-DR工作模式的准备工作。注意:

  • 在您设置过程中,防火前最好关闭,但在正式生产环境中,LVS的防火强最好打开。
  • VIP信息在LVS主机重启后,会消失。所以您最好将设置VIP的命令做成一个脚本。

3.2、准备工作——Real Server

RIP:192.168.220.132

真实服务器的准备工作,需要保证真实服务器能够访问外网网关,并且保证由LVS改写的报文能够被Real Server处理(请参见我的上一篇介绍LVS原理的博文),这就需要做一个回环IP。首先我们看看没有开始设置之前的IP信息:

    [root@localhost ~]# ifconfig 
    eth0      Link encap:Ethernet  HWaddr 00:0C:29:FC:91:FC  
              inet addr:192.168.220.132  Bcast:192.168.220.255  Mask:255.255.255.0
              inet6 addr: fe80::20c:29ff:fefc:91fc/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:2384 errors:0 dropped:0 overruns:0 frame:0
              TX packets:1564 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:1551652 (1.4 MiB)  TX bytes:144642 (141.2 KiB)
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:65536  Metric:1
              RX packets:44 errors:0 dropped:0 overruns:0 frame:0
              TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:3361 (3.2 KiB)  TX bytes:3361 (3.2 KiB)

使用route命令,查看原始route信息:

    [root@localhost ~]# route
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.220.0   *               255.255.255.0   U     1      0        0 eth0
    default         192.168.220.1   0.0.0.0         UG    0      0        0 eth0

另外,这台Real Server上有一个Nginx,以保证我们观测LVS-DR的运行情况。我们在外网使用192.168.220.132这个IP,能够访问到Nginx的页面:

202307271854240263.png

接下来,我们开始设置Real Server上的回环IP,首先关闭这台机器进行ARP查询的功能,否则,Real Server会在路由器或者交换机上去查询192.168.220.100这个IP对应的MAC地址(注意,以下的信息都会被还原):

    echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

然后可以设置回环IP了:

    [root@vm3 ~]# ifconfig lo:0 192.168.220.100 broadcast 192.168.220.100 netmask 255.255.255.255 up
    [root@vm3 ~]# route add -host 192.168.220.100 dev lo:0

检查新的路由信息:

    [root@vm3 ~]# route 
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.220.100 *               255.255.255.255 UH    0      0        0 lo
    192.168.220.0   *               255.255.255.0   U     1      0        0 eth0
    default         192.168.220.1   0.0.0.0         UG    0      0        0 eth0

以上设置完成。 完成后,您需要通过ping命令,检查一下网关是否可用(最好可以瓶ping一下外网的某个地址,例如163.com)。LVS-DR模式下,Real Server是直接向请求方返回结果,所以一定要保证网关时可用的。

3.3、开始安装和配置LVS-DR模式

在验证了LVS Server和Real Server都准备好以后,就可以进行LVS-DR模式的设置了。LVS管理软件ipvsadm的安装我们就不敷述了,在LVS-NAT的小结中有关于LVS管理软件安装的介绍。

    [root@lvs1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
    [root@lvs1 ~]# cat /proc/sys/net/ipv4/ip_forward
    1
    [root@lvs1 ~]# ipvsadm -C
    [root@lvs1 ~]# ipvsadm -At 192.168.220.100:81 -s rr 
    [root@lvs1 ~]# ipvsadm -at 192.168.220.100:81 -r 192.168.220.132 -g

介绍一下新出现的参数:

  • -g –gatewaying 指定LVS 的工作模式为直接路由模式DR模式(也是LVS默认的模式)

配置完成,是不是很简单。接下来,我们就可以在外网,通过192.168.220.100这个IP访问132这台Real Server上的Nginx服务了:

202307271854247754.png

4、LVS-TUN 模式安装

LVS-TUN模式的安装我不打算再花很大的篇幅讲了,在您通过上一篇文章了解了DR和TUN的不同以后,其配置的过程都是差不多的,只不过一个可以跨越子网,一个不能。所以LVS-TUN模式的安装和配置请首先参考LVS-DR模式。

5、IPVSADM参数汇总

-A –add-service 在内核的虚拟服务器表中添加一条新的虚拟服务器记录。也就是增加一台新的虚拟服务器。

-E –edit-service 编辑内核虚拟服务器表中的一条虚拟服务器记录。

-D –delete-service 删除内核虚拟服务器表中的一条虚拟服务器记录。

-C –clear 清除内核虚拟服务器表中的所有记录。

-R –restore 恢复虚拟服务器规则

-S –save 保存虚拟服务器规则,输出为-R 选项可读的格式

-a –add-server 在内核虚拟服务器表的一条记录里添加一条新的真实服务器记录。也就是在一个虚拟服务器中增加一台新的真实服务器

-e –edit-server 编辑一条虚拟服务器记录中的某条真实服务器记录

-d –delete-server 删除一条虚拟服务器记录中的某条真实服务器记录

-L –list 显示内核虚拟服务器表

-Z –zero 虚拟服务表计数器清零(清空当前的连接数量等)

–set tcp tcpfin udp 设置连接超时值

–start-daemon 启动同步守护进程。他后面可以是master 或backup,用来说明LVS Router 是master 或是backup。在这个功能上也可以采用keepalived 的VRRP 功能。

–stop-daemon 停止同步守护进程

-t –tcp-service service-address 说明虚拟服务器提供的是tcp 的服务[vip:port] or [real-server-ip:port]

-u –udp-service service-address 说明虚拟服务器提供的是udp 的服务[vip:port] or [real-server-ip:port]

-f –fwmark-service fwmark 说明是经过iptables 标记过的服务类型。

-s –scheduler scheduler 使用的调度算法,选项:rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, 默认的调度算法是: wlc.

-p –persistent [timeout] 持久稳固的服务。这个选项的意思是来自同一个客户的多次请求,将被同一台真实的服务器处理。timeout 的默认值为300 秒。

-M –netmask netmask persistent granularity mask

-r –real-server server-address 真实的服务器[Real-Server:port]

-g –gatewaying 指定LVS 的工作模式为直接路由模式DR模式(也是LVS默认的模式)

-i –ipip 指定LVS 的工作模式为隧道模式

-m –masquerading 指定LVS 的工作模式为NAT 模式

-w –weight weight 真实服务器的权值

–mcast-interface interface 指定组播的同步接口

-c

–connection 显示LVS 目前的连接 如:ipvsadm -L -c

–timeout 显示tcp tcpfin udp 的timeout 值 如:ipvsadm -L –timeout

–daemon 显示同步守护进程状态

–stats 显示统计信息

–rate 显示速率信息

–sort 对虚拟服务器和真实服务器排序输出

–numeric -n 输出IP 地址和端口的数字形式

好吧,这个就是我网上抄的。

6、后文介绍

LVS的设置实际上没有什么难度,充其量是一个高级玩意儿,是解决特定问题的特定方法 。您需要的基础知识涉及到IP协议、子网分割、IP映射、Linux脚本等基本知识。打通任督二脉才是您的根本。

LVS的设置过程中肯定会遇到实际问题,特别是您头几次配置。别慌,别怕,透过现象猜测本质,一个一个的解决问题。就我的经验总结,无非几种问题分类:

  • 网关不通
  • 回环IP设置问题
  • 防火墙问题
  • VIP设置问题
  • 网段或者子网问题

通过包括这篇博客在内的这几篇文章,您已经分别了解了Nginx、LVS的功能、原理、特 点和工作模式。后面一篇文章,我们将把这些负载层的技术混合在一起,介绍Nginx + Keepalived、LVS + Keepalived、LVS + Keepalived + Nginx的安装和配置方式。

标签:架构设计,LVS,IP,192.168,Server,设计方案,服务器,root
From: https://blog.csdn.net/smart_an/article/details/142374391

相关文章

  • 基于MicroPython的Raspberry Pi Pico控制LED灯闪烁的设计方案
       以下是一个基于MicroPython的RaspberryPiPico控制LED灯闪烁的设计方案:一、硬件准备:1. RaspberryPiPico开发板2. 一个LED灯3. 一个220Ω4. 杜邦线若干。5.3.3V直流电源二、硬件连接:1.将Pico开发板的VSYS连接到3.3V直流电源的正极,开发板的GND引脚连......
  • 55页可编辑PPT | 集团制造企业数字化转型顶层设计方案
    这份PPT文档是一份关于集团制造企业数字化转型的顶层业务设计方案。文档详细介绍了企业在后ERP时代面临的挑战,以及如何通过Oracle解决方案来实现数字化转型。数字化转型的三大要点集中在满足利益相关者的期望,以企业价值为核心引领业务模式的创新,并利用信息技术作为企业运营的神经中......
  • 设计方案:372-基于7VX690T的万兆光纤、双FMC扩展的综合计算平台 RISCV 芯片验证平台
    基于7VX690T的万兆光纤、双FMC扩展的综合计算平台RISCV芯片验证平台 一、板卡概述      基于V7的高性能PCIe信号处理板,板卡选用Xilinx 公司Virtex7系列FPGA 7VX690T-2FFG1761C为处理芯片,板卡提供两个标准FMC插槽,适用于高性能采集、回放以及相关处理。通过连接不同的FMC......
  • 系统架构设计师 大数据架构篇二
    大数据架构......
  • 系统架构设计师教程 第5章 5.7 软件项目管理 笔记
    5.7软件项目管理★★☆☆☆5.7.1项目管理概述软件项目管理的对象是软件工程项目。它所涉及的范围覆盖了整个软件工程过程。为使软件项目开发获得成功,关键问题是必须对软件项目的工作范围、可能风险、需要资源(人、硬件/软件)、要实现的任务、经历的里程碑、花费工作量......
  • 架构设计——概念和基础
    ......
  • LVS三种负载均衡模式的比较
    文章目录三种模式对比三种模式对比LVS-NATLVS-DRLVS-TUN服务器操作系统可以使用任何支持TCP/IP的操作系统大多数常见的操作系统都可以使用需要支持IP隧道技术的操作系统服务器网络需要私有网络,所有真实服务器(RS)必须位于同一局域网内同样需要局域网,但RS可以使用公网......
  • 【架构设计】多级缓存:应用案例与问题解决策略
    【架构设计】多级缓存:应用案例与问题解决策略多级缓存系统的工作原理及其在提升应用性能方面的关键作用。通过对比本地缓存与分布式缓存的特点| 原创作者/编辑:凯哥Java                    | 分类:架构设计系列教程多级缓存系统:提升性能的......
  • 【架构设计】多级缓存:应用案例与问题解决策略
      【架构设计】多级缓存:应用案例与问题解决策略 多级缓存系统的工作原理及其在提升应用性能方面的关键作用。通过对比本地缓存与分布式缓存的特点 | 原创作者/编辑:凯哥Java                    | 分类:架构设计系列教程 ......
  • Arduino Uno控制LED灯闪烁设计方案
        以下是使用ArduinoUno控制LED灯闪烁的设计方案: 一、硬件准备1. ArduinoUno开发板。2. 一个LED灯。3. 220Ω电阻(用于限流,保护LED和Arduino引脚)。4. 面包板。5. 若干杜邦线。                       ......