LVS-NAT与LVS-DR配置详解

文章目录

  • 集群
    • 集群概述
      • 什么是集群
      • 集群的目的
      • 集群的分类
    • LVS项目介绍
      • LVS集群组成
      • LVS的常用术语
      • LVS的工作模式
        • NAT模式:
        • TUN模式:
        • DR模式:(直连路由模式)
      • LVS负载均衡调度算法
    • LVS-NAT集群:
      • ipvsadm命令用法
        • 问题:
        • 方案:
        • 步骤:使用命令增删改LVS集群规则
      • 部署LVS-NAT集群
        • 问题:
        • 方案:
        • 步骤:
          • 步骤一:配置基础环境
          • 步骤二:部署LVS-NAT模式调度器
    • LVS-DR集群
        • 问题:
        • 方案:
        • 步骤:
          • 步骤一:配置实验网络环境
          • 步骤二:proxy调度器安装软件并部署LVS-DR模式调度器
          • 步骤三:客户端测试

集群

集群概述

什么是集群

  • 一组通过高速网络互联的计算机组,并以单一系统的模式加以管理
  • 讲很多服务器集中起来一起,提供同一种服务,在客户端看来就像是一个服务器
  • 可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益
  • 任务调度是集群系统中的核心技术

集群的目的

  • 提高性能

    如计算密集型应用,如:天气预报、核试验模拟

  • 降低成本

    相对百万级别得超级计算机,价格便宜

  • 提高可扩展性

    只要增加集群节点即可

  • 提高可靠性

    多个节点完成相同功能,避免单点失败

集群的分类

  • 高性能计算集群HPC

    通过以集群卡法的并行应用程序,解决复杂的科学问题

  • 负载均衡(LB)集群

    客户端负载在计算机集群中尽可能平均分摊

  • 高可用(HA)集群

    避免单点故障,当一个系统发生故障时,可以快速迁移

符合以上部分需求的软件有LVS,keepalived等

LVS项目介绍

  • Linux虚拟服务器(LVS)是章文蒿在国防科技大学就读博士期间创建的
  • LVS可以实现高可用的,可伸缩的web,Mail、Cache和Media等网络服务
  • 最终目标是利用Linux操作系统和LVS集群软件实现一个高可用,高性能,低成本的服务器应用集群
  • 该软件内置于Linux的内核之中

LVS集群组成

  • 前端:负载均衡层

    由一台或多台负载调度器构成

  • 中间:服务器群组层

    由一组实际运行应用服务的服务器组成

  • 底端:数据共享存储层

    提供共享存储空间的存储区域

LVS的常用术语

  • Director Server:调度服务器

    将负载分发到Real Server服务器

    有两个IP,一个为VIP,一个为DIP

  • Real Server:真实服务器

    真正提供应用服务的服务器(RIP)

  • VIP: 虚拟IP地址

    公布给用户访问的虚拟IP地址(一般为调度器的IP)

  • RIP:真实IP地址

    集群节点上使用的IP地址

  • DIP:调度器连接节点服务器的IP地址

LVS的工作模式

lvs原理是路由器(数据包转发)

工作流程:客户机访问lvs,lvs转发数据包给web服务器,web服务器回应数据包给客户端

nginx原理为代理(帮客户访问)

工作流程:客户机访问nginx代理服务器,代理服务器帮客户机访问web服务器,web服务器把内容返回给nginx代理服务器,通过代理服务器返回给客户端

lvs和路由器相比,比路由器多了一个调度功能,调度功能是集群的核心

lvs是内核层面的东西,相比较nginx(nginx是操作系统层面的软件),lvs的性能更高,但是他的一些功能更少,比如就缺少健康检查等
LVS-NAT与LVS-DR配置详解_第1张图片

NAT模式:

用户访问调度器,调度器把请求转给web1,web1从调度器回复用户

当用户访问量过多,所有的数据都会经过调度器,这时,网络的带宽就会成为整个集群的瓶颈。这种适合小规模的集群

  • 通过网络地址转换实现的虚拟服务器
  • 大并发访问时,调度器的性能成为瓶颈

TUN模式:

调度器和服务器不在同一个网,例:用户访问地址在A的调度器,调度器转发到地址为B的web服务器,中间跨过公网,所以要在代理服务器和web服务器中间搭建隧道

  • 通过隧道方式实现虚拟服务器

DR模式:(直连路由模式)

用户访问调度器,调度器转发给web服务器,web服务器直接回复给用户

这种模式,缓解了调度器返回数据的压力,提高了并发访问量,适合较大规模的集群

  • 直接使用路由技术实现虚拟服务器
  • 节点服务器需要配置VIP,注意MAC地址广播

LVS负载均衡调度算法

  • LVS目前实现了10种调度算法

  • 常用调度算法有四种

    轮询(rr):将客户端请求平均分发到Real Server

    加权轮询(wrr):根据Real Server权重值进行轮询调度

    最少连接(lc):选择连接数最少的服务器

    加权最少连接(wlc):根据Real Server权重值,选择连接数最少的服务器

  • 其他调度算法

    源地址散列算法:(sh)根据请求的目标IP地址,作为散列键(Hash Key)从静态分配到散列表中赵出对应的服务器,与nginx中的ip_hash效果一致(客户端IP不变,服务器集群中有固定服务器进行回应)

    基于局部性的最少连接

    带复制的基于局部性最少连接

    目标地址散列(dh)

    最短的期望的延迟

    最少队列调度

LVS-NAT集群:

LVS的IP负载均衡技术是通过IPVS模块实现的,这里需要使用ipvsadm命令

这里先进行实验前的准备

ipvsadm命令用法

问题:

使用Linux服务器,安装ipvsadm软件包,练习使用ipvsadm命令,实现以下功能

  • 使用命令添加基于TCP的一些集群服务
  • 在集群中添加若干台后端真实服务器
  • 实现一些客户端访问,调度器分配固定服务器
  • 会使用ipvsadm实现规则的增删改
  • 保存ipvsadm规则

方案:

安装ipvsadm软件包

常用ipvsadm命令语法如下所示

命令选项 含义
ipvsadm -A 添加虚拟服务器
ipvsadm -E 修改虚拟服务器
ipvsadm -D 删除虚拟服务器
ipvsadm -C 清空所有
ipvsadm -a 添加真实服务器
ipvsadm -e 修改真实服务器
ipvsadm -d 删除真实服务器
ipvsadm -L 查看LVS规则表
-s [rr|wrr|lc|wlc|sh] 指定集群算法

实例

命令 含义
ipvsadm -A -t|u 192.168.19.10:80 -s [算法] 添加虚拟服务器,协议为tcp(-t)或者udp(-u)
ipvsadm -E -t|u 192.168.19.10:80 -s [算法] 修改虚拟服务器,协议为tcp(-t)或者udp(-u)
ipvsadm -D -t|u 192.168.19.10:80 删除虚拟服务器,协议为tcp(-t)或者udp(-u)
ipvsadm -C 清空所有
ipvsadm -a -t|u 192.168.19.10:80 -r 192.168.20.10 [-g|i|m] [-w 权重] 添加真实服务器-g(DR模式)-i(隧道模式)-m(NAT模式)
ipvsadm -e -t|u 192.168.19.10:80 -r 192.168.20.10 [-g|i|m] [-w 权重] 修改真实服务器
ipvsadm -d -t|u 192.168.19.10:80 -r 192.168.20.10 删除真实服务器
ipvsadm -Ln 查看LVS的规则表

步骤:使用命令增删改LVS集群规则

1)创建LVS虚拟集群服务器(算法为加权轮询:wrr)

yum -y install ipvsadm   #先安装相应的软件包
ipvsadm -A -t 192.168.19.130:80 -s wrr
ipvsadm -L
ipvsadm -Ln  #以数字显示

LVS-NAT与LVS-DR配置详解_第2张图片

2)为集群添加若干Real Server

ipvsadm -a -t 192.168.19.130:80 -r 192.168.20.10 -w 1
ipvsadm -a -t 192.168.19.130:80 -r 192.168.20.20 -w 1
ipvsadm -Ln
ipvsadm -a -t 192.168.19.130:80 -r 192.168.20.30 -w 1 -m #使用nat模式
ipvsadm -a -t 192.168.19.130:80 -r 192.168.20.40 -w 1 -i #使用隧道模式
#默认为dr模式
ipvsadm -Ln
#在forward中可以看出类型,router为dr模式,masq为nat模式,tunnel是隧道模式

LVS-NAT与LVS-DR配置详解_第3张图片

3)修改集群服务器设置(修改调度器算法,将加权轮询修改为轮询)

ipvsadm -E -t 192.168.19.130:80 -s rr
ipvsadm -Ln
#ipvsadm -e 可以修改权重和工作模式

LVS-NAT与LVS-DR配置详解_第4张图片

4)修改Read server(使用-g选项,将模式改为DR模式)

ipvsadm -e -t 192.168.19.130:80 -r 192.168.20.10 -g

5)查看LVS状态

ipvsadm -Ln

6)创建另一个集群(算法为最少连接算法:使用-m,设置工作模式为NAT模式)

ipvsadm -A 	192.168.19.100:80 -s lc
ipvsadm -a -t 192.168.19.100:80 -r 192.168.20.30 -m 
ipvsadm -a -t 192.168.19.100:80 -r 192.168.20.40 -m 

7)永久保存所有规则

ipvsadm-save -n > /etc/sysconfig/ipvsadm-config
#在版本7中,这个配置文件为ipvsadm

8)清空所有规则

ipvsadm -C   #在进行下面实验时,记得清空我们刚刚的练习

部署LVS-NAT集群

问题:

使用LVS实现NAT模式的集群调度服务器,为用户提供web服务

  • 集群对外公网IP地址为192.168.19.130
  • 调度器内网IP地址为192.168.20.100
  • 真实web服务器地址分别为192.168.20.10、192.168.20.20
  • 使用加权轮询调度算法,真实服务器权重分别为1和2

方案:

实验拓扑主机配置如下

主机名 IP地址
client 192.168.19.1/24
proxy eth0 :192.168.19.30/24
eth1:192.168.20.30/24
web1 192.168.20.10 网关:192.168.20.30
web2 192.168.20.20 网关:192.168.20.30

注意:这里真实服务器的网关要设置为lvs连接真实主机的IP,否则会转发失败

需要4台虚拟机,1台作为Director调度器,2台作为Real Server服务器,一台作为客户机,拓扑结构如下

LVS-NAT与LVS-DR配置详解_第5张图片

具体IP以表格为准

步骤:

步骤一:配置基础环境

1)部署基础环境

web1
yum -y install httpd
echo "web1 我是192.168.20.10" > /var/www/html/index.html

web2
yum -y install httpd
echo "web2 我是192.168.20.20" > /var/www/html/index.html

2)启动web服务器软件(web1和web2同时操作 )

systemctl start httpd

3)关闭防火墙和SELinux(web1和web2同时操作)

systemctl stop firewalld
setenforce 0

4)测试网页

LVS-NAT与LVS-DR配置详解_第6张图片

步骤二:部署LVS-NAT模式调度器

1)确认调度器的路由转发功能(如果已经开启,可以忽略)

echo 1  > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf #修改配置文件,设置永久规则

2)创建集群服务器

yum -y install ipvsadm
ipvsadm -A -t 192.168.19.30:80 -s wrr  #创建虚拟服务器

3)添加真实服务器

ipvsadm -a -t 192.168.19.30:80 -r 192.168.20.10:80 -w 1 -m
ipvsadm -a -t 192.168.19.30:80 -r 192.168.20.20:80 -w 1 -m

4)查看规则表,并保存规则

ipvsadm -Ln
ipvsadm-save -n > /etc/sysconfig/ipvsadm-config #永久保存规则

5)客户端测试

LVS-NAT与LVS-DR配置详解_第7张图片

LVS-DR集群

问题:

  • 使用DR模式的集群调度服务器,为用户提供web服务:
  • 客户端IP地址为192.168.4.1
  • LVS调度器VIP地址为192.168.4.15
  • LVS调度器DIP地址设置为192.168.4.5
  • 真实web服务器地址分别为192.168.4.100、192.168.4.200
  • 使用加权轮询调度算法,web1的权重为1,web2的权重为2

说明:

CIP是客户端的IP地址

VIP是对客户端提供服务的IP地址

RIP是后端服务器的真实IP地址

DIP是调度器与后端服务器通信的IP地址(VIP必须配置在虚拟接口)

方案:

使用四台虚拟机,1台作为客户端,1台作为Director调度器,2台作为Real Server,拓扑结构如下,

LVS-NAT与LVS-DR配置详解_第8张图片

主机名 网络配置
client eth0 192.168.4.1/24
proxy eth0 192.168.4.5/24
eth0:0 192.168.4.15/24
web1 eth0 192.168.4.100/24
lo:0 192.168.4.15/32 #注意子网掩码必须为32位
web2 eth0 192.168.4.200/24
lo:0 192.168.4.15/32 #注意子网掩码必须为32位

步骤:

步骤一:配置实验网络环境

1)注意:为了防止冲突,VIP必须要配置在网卡的虚拟接口

为了完成实验,我清空了网络配置,重新进行配置,防止地址冲突

proxy的网络配置

nmcli connection add type ethernet con-name ens192 ifname ens192
nmcli connection modify ens192 ipv4.add 192.168.4.5/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192

nmcli connection add type ethernet con-name ens224 ifname ens224
nmcli connection modify ens224 ipv4.add 192.168.4.15/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens224

2)设置web1服务器网络参数

nmcli connection add type ethernet con-name ens192 ifname ens192
nmcli connection modify ens192 ipv4.add 192.168.4.100/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192

接下来给web1配置VIP地址

注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样

web1
ifconfig lo:10 192.168.4.15 netmask 255.255.255.255 broadcast 192.168.4.15 up

防止地址冲突问题

这里因为web1也配置与代理一样的VIP地址,默认肯定会出现地址冲突;sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样也防止地址冲突的问题

web1
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1  #所有网卡
net.ipv4.conf.lo.arp_ignore=1     #lo回环 忽略arp请求包
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
#arp_ignore 忽略掉arp请求包
#arp_announce  声明宣告
#修改内核参数,关闭arp响应
#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播
#本机不要向外宣告自己的lo回环地址是192.168.4.15
或者使用这种方式,也能完成上述功能
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 

sysctl -p   #刷新参数

重启网络服务,设置防火墙与SELinux

systemctl restart NetworkManager
ifconfig
systemctl stop firewalld
setenforce 0

3)接下来配置web2,web2的操作与web1操作一致

设置web2的服务器网络参数

nmcli connection add type ethernet con-name ens192 ifname ens192
nmcli connection modify ens192 ipv4.add 192.168.4.200/24 ipv4.dns 114.114.114.114 ipv4.gateway 192.168.4.2 ipv4.method manual
nmcli connection up ens192

接下来配置web的VIP地址

注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样

ifconfig lo:10 192.168.4.15 netmask 255.255.255.255 broadcast 192.168.4.15 up

防止地址冲突问题

这里因为web1也配置与代理一样的VIP地址,默认肯定会出现地址冲突;sysctl.conf文件写入这下面四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应,这样也防止地址冲突的问题

web2
vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore=1  #所有网卡
net.ipv4.conf.lo.arp_ignore=1     #lo回环 忽略arp请求包
net.ipv4.conf.lo.arp_announce=2
net.ipv4.conf.all.arp_announce=2
#arp_ignore 忽略掉arp请求包
#arp_announce  声明宣告
#修改内核参数,关闭arp响应
#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播
#本机不要向外宣告自己的lo回环地址是192.168.4.15
sysctl -p   #刷新参数

重启网络服务,设置防火墙与SELinux

systemctl restart NetworkManager
ifconfig
systemctl stop firewalld
setenforce 0
步骤二:proxy调度器安装软件并部署LVS-DR模式调度器

1)安装软件(如果已经安装请忽略)

yum -y install ipvsadm
echo 1  > /proc/sys/net/ipv4/ip_forward

2)清理之前的实验规则,创建新的集群服务器规则

ipvsadm -C           #清空所有规则
ipvsadm -A -t 192.168.4.15:80 -s wrr

3)添加真实服务器(-g参数设置LVS工作模式为DR模式,-w设置权重)

ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -g -w 1
ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -g -w 2

4)查看规则列表,并保存规则

ipvsadm -Ln
ipvsadm-save -n > /etc/sysconfig/ipvsadm-config #永久保存规则
步骤三:客户端测试

客户端使用curl命令反复进行测试,查看访问的页面是否会轮询到不同的后端真实服务器

LVS-NAT与LVS-DR配置详解_第9张图片

因为web2的权重为2,所以测试结果如上

扩展知识:默认LVS不带健康检查功能,需要自己手动编写动态检测脚本,实现该功能

参考脚本

vim check.sh
#! /bin/bash
VIP=192.168.4.15:80
RIP1=192.168.4.100
RIP2=192.168.4.200
while:
do
        for IP in $RIP1 $RIP2
        do
                curl -s http://$IP &> /dev/null
                if [ $? -eq 0 ];then
                        ipvsadm -Ln | grep -q $IP || ipvsadm -a -t $VIP -r $IP
                else
                        ipvsadm -Ln | grep -q $IP && ipvsadm -d -t $VIP -r $IP
                fi
        done
        sleep 1
done

用循环一直访问LVS集群,如果其中有web服务器发生故障,就把服务器从集群中删除,如果服务器回复正常,则再次添加

你可能感兴趣的:(集群和存储,运维,linux)