LVS-集群(一)

LVS-集群(一)

集群简介

  • 通过高速网络将很多服务器集中起来一起
    • 提供同一种服务,在客户端看来就象是只有一个服务器
  • 可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益
  • 任务调度是集群系统中的核心技术

集群目的与分类

提高性能,如计算密集型应用,如:天气预报、核试验模拟,较低成本,相对百万美元的超级计算机,价格便宜,提高可扩展性,只要增加集群节点即可,增强可靠性,多个节点完成相同功能,避免单点失败。

  • 负载均衡(Load Balance)集群
    • 客户端负载在计算机集群中尽可能平均分摊
  • 高可用(High Availability)集群
    • 避免单点故障,当一个系统发生故障时,可以快速迁移
  • 高性能计算集群(High Performance Computing)
    • 通过以集群开发的并行应用程序,解决复杂的科学问题

LVS虚拟服务器

LVS概述

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

LVS集群组成

前端:负载均衡层,由一台或者多台负载调度器构成。中间:服务器群组层,由一组实际运行应用服务的服务的服务器组成,低端:数据共享存储层,提供共享存储空间的存储区域。

  • LVS的工作模式:

    • NAT:网络地址转换
    • DR:路由模式
    • TUN:隧道模式
  • 术语:

    • 调度器:LVS服务器
    • 真实服务器Real Server:提供服务的服务器
    • VIP:虚拟地址,提供给用户访问的地址
    • DIP:指定地址,LVS服务器上与真实服务器通信的地址
    • RIP:真实地址,真实服务器的地址
  • 常见的调度算法,共10个,常用的有4个:

    • 轮询rr:Real Server轮流提供服务
    • 加权轮询wrr:根据服务器性能设置权重,权重大的得到的请求更多
    • 最少连接lc:根据Real Server的连接数分配请求
    • 加权最少连接wlc:类似于wrr,根据权重分配请求

LVS工作模式

在这里插入图片描述

  • LVS/NAT
    • 通过网络地址转换实现的虚拟服务器
    • 大并发访问时,调度器的性能成为瓶颈
  • LVS/DR
    • 直接使用路由技术实现虚拟服务器
    • 节点服务器需要配置VIP,注意MAC地址广播
  • LVS/TUN
    • 通过隧道方式实现虚拟服务器

负载均衡调度算法

  • LVS目前实现了10种调度算法。
  • 常用调度算法有4种:
    • 轮询(Round Robin)、加权轮询(Weighted Round Robin)、最少连接(Least Connections)、加权最少连接(Weighted Least Connections)。
  • 其他调度算法:
    • 源地址散列(Source Hashing)、目标地址散列(Destination Hashing)、基于局部性的最少链接、带复制的基于局部性最少链接、最短的期望的延迟、最少队列调度。

配置LVS- NAT模式

在这里插入图片描述
准备环境

  • client1:eth0->192.168.4.10,网关192.168.4.5

  • lvs1: eth0 -> 192.168.4.5;eth1->192.168.2.5

  • web1:eth1->192.168.2.100;网关192.168.2.5

  • web2:eth1->192.168.2.200;网关192.168.2.5

  • 配置好网段后注意需要关闭selinux和防火墙

配置LVS NAT模式

  • 配置2台web服务器
  • 使用FTP搭建网络YUM或者本地YUM也行
[root@web1 ~]# vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.2.254/centos-1804
enabled=1
gpgcheck=0
[root@web2 ~]# vim /etc/yum.repos.d/local.repo 
[local_repo]
name=CentOS-$releasever - Base
baseurl=ftp://192.168.2.254/centos-1804
enabled=1
gpgcheck=0
[root@web1 ~]# yum install -y httpd
[root@web2 ~]# yum install -y httpd

# 创建测试页面
[root@web1 ~]# echo "192.168.2.100" > /var/www/html/index.html
[root@web2 ~]# echo "apache web server2" > /var/www/html/index.html
[root@web1 ~]# systemctl enable httpd --now
[root@web2 ~]# systemctl enable httpd --now

# 在lvs1上测试到web服务器的访问
[root@lvs1 ~]# curl http://192.168.2.100/
192.168.2.100
[root@lvs1 ~]# ^100^200   # 将上一条命令中的100换成200,执行
curl http://192.168.2.200/
apache web server2
  • 确保lvs1的ip转发功能已经打开。该功能需要改变内核参数
# 查看ip转发功能的内核参数
[root@lvs1 ~]# sysctl -a    # 查看所有的内核参数
[root@lvs1 ~]# sysctl -a | grep ip_forward  # 查看ip_foward参数
net.ipv4.ip_forward = 1   # 1表示打开转发,0表示关闭转发

# 永久设置打开ip_forward功能
[root@lvs1 ~]# echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf 
[root@lvs1 ~]# sysctl -p

# 测试从客户端到服务器的访问
[root@client1 ~]# curl http://192.168.2.100/
192.168.2.100
[root@client1 ~]# curl http://192.168.2.200/
apache web server2
  • 安装LVS
[root@lvs1 ~]# yum install -y ipvsadm
  • ipvsadm使用说明
[root@lvs1 ~]# ipvsadm
-A: 添加虚拟服务器
-E: 编辑虚拟服务器
-D: 删除虚拟服务器
-t: 添加tcp服务器
-u: 添加udp服务器
-s: 指定调度算法。如轮询rr/加权轮询wrr/最少连接lc/加权最少连接wlc

-a: 添加虚拟服务器后,向虚拟服务器中加入真实服务器
-r: 指定真实服务器
-w: 设置权重
-m: 指定工作模式为NAT
-g: 指定工作模式为DR
  • 配置LVS
# 为web服务器创建虚拟服务器,使用rr调度算法
[root@lvs1 ~]# ipvsadm -A -t 192.168.4.5:80 -s rr
# 查看配置
[root@lvs1 ~]# ipvsadm -Ln  # L是列出,n是使用数字,而不是名字

# 向虚拟服务器中添加RIP
[root@lvs1 ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.100 -w 1 -m
[root@lvs1 ~]# ipvsadm -a -t 192.168.4.5:80 -r 192.168.2.200 -w 2 -m
# 查看配置
[root@lvs1 ~]# ipvsadm -Ln

# 验证
[root@client1 ~]# for i in {1..4}
> do
> curl http://192.168.4.5/
> done
apache web server2
192.168.2.100
apache web server2
192.168.2.100

# 删除配置。(如果配置有错,用以下命令删除重配置)
[root@lvs1 ~]# ipvsadm -D -t 192.168.4.5:80


# 修改调度模式为加权轮询
[root@lvs1 ~]# ipvsadm -E -t 192.168.4.5:80 -s wrr
# 验证配置
[root@client1 ~]# for i in {1..6}; do curl http://192.168.4.5/; done
apache web server2
apache web server2
192.168.2.100
apache web server2
apache web server2
192.168.2.100

LVS DR模式

在这里插入图片描述

  • LVS DR模式,LVS主机和web服务器都是单网卡。它们连在同一网络中
  • 修改实验环境
    • client1:eth0-> 192.168.4.10
    • lvs1:eth0->192.168.4.5,删除eth1的IP
    • web1:eth0->192.168.4.100,删除eth1的IP
    • web2:eth0->192.168.4.200,删除eth1的IP
# 删除lvs虚拟服务器配置
[root@lvs1 ~]# ipvsadm -D -t 192.168.4.5:80
[root@lvs1 ~]# ipvsadm -Ln

# 删除lvs1上eth1的配置
[root@lvs1 ~]# nmcli connection modify eth1 ipv4.method disabled ipv4.addresses ''
[root@lvs1 ~]# ifdown eth1


# 修改web1的配置:停掉eth1的地址。配置eth0的地址为192.168.4.100
# 进入网卡配置文件目录
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
# eth0网卡的配置文件叫ifcfg-eth0
[root@web1 network-scripts]# ls ifcfg-eth*
ifcfg-eth0  ifcfg-eth1	ifcfg-eth2  ifcfg-eth3
# 配置eth0地址
[root@web1 network-scripts]# vim ifcfg-eth0
TYPE=Ethernet             # 网络类型为以太网
BOOTPROTO=none            # IP地址是静态配置的,也可以用static
NAME=eth0                 # 为设备重命名
DEVICE=eth0               # 网卡设备名
ONBOOT=yes                # 开机激活网卡
IPADDR=192.168.4.100      # IP地址
NETMASK=255.255.255.0     # 子网掩码
GATEWAY=192.168.4.254     # 网关
[root@web1 network-scripts]# ifdown eth0; ifup eth0  # 禁用激活网卡

# 在web1上停掉eth1
[root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
NAME=eth1
DEVICE=eth1
ONBOOT=no
[root@web1 ~]# ifdown eth1


# 修改web2的网络
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.4.200
NETMASK=255.255.255.0
GATEWAY=192.168.4.254
[root@web2 ~]# ifdown eth0; ifup eth0
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
NAME=eth1
DEVICE=eth1
ONBOOT=no
[root@web2 ~]# ifdown eth1   # 终端卡住,关掉它,在新终端重新连

ARP广播的问题

  • 当客户端发起访问VIP对应的域名的请求时,根据网络通信原理会产生ARP 广播
  • 因为负载均衡器和真实的服务器在同一网络并且VIP设置在集群中的每一个节点上
  • 此时集群内的真实服务器会尝试回答来自客户端的ARP广播,这就会产生问题,大家都说我是“VIP”

内核参数说明

  • arp_ignore(定义回复ARP广播的方式)
  • 0(默认值):回应所有的本地地址ARP广播,本地地址可以配置在任意网络接口
  • 1:只回应配置在入站网卡接口上的任意IP地址的ARP广播
  • arp_announce
  • 0(默认):使用配置在任意网卡接口上的本地IP地址
  • 2:对查询目标使用最适当的本地地址。在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址。首要时选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址。如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送

ARP防火墙

  • 使用ARP防火墙也可以禁止对VIP的ARP请求

    • 这个备选方案,非必须操作
[root@web ~]# yum  install  -y  arptables_if
[root@web ~]# arptables -A lN -d  <virtual_ip>-j DROP
[root@web ~]# arptables -A OUT -s  <virtual_ip>-j mangle \
> --mangle-ip-s <real_ip>

配置LVS DR模式

  • 在lvs1的eth0上配置vip 192.168.4.15。通过为eth0创建逻辑端口的方式配置vip,为逻辑端口起名为eth0:0
[root@lvs1 ~]# cd /etc/sysconfig/network-scripts/
[root@lvs1 network-scripts]# cp ifcfg-eth0 ifcfg-eth0:0
[root@lvs1 network-scripts]# vim ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0:0
DEVICE=eth0:0
ONBOOT=yes
IPADDR=192.168.4.15
PREFIX=24
[root@lvs1 network-scripts]# ifup eth0:0
# 查看新的地址
[root@lvs1 network-scripts]# ifconfig 
  • 在2台web服务器的lo上配置vip 192.168.4.15
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.15
NETMASK=255.255.255.255
NETWORK=192.168.4.15
BROADCAST=192.168.4.15
ONBOOT=yes
NAME=lo:0
[root@web1 network-scripts]# ifup lo:0
[root@web1 network-scripts]# ifconfig 
# 把web1的配置拷贝到web2上
[root@web1 network-scripts]# scp ./ifcfg-lo:0 192.168.4.200:/etc/sysconfig/network-scripts/
[root@web2 ~]# ifup lo:0
[root@web2 ~]# ifconfig 
  • 在2台web服务器上配置内核参数,使得它们不响应对192.168.4.15的请求
[root@web1 ~]# sysctl -a | grep arp_ignore
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 0
[root@web1 ~]# sysctl -a | grep arp_announce
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 0

[root@web1 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@web1 ~]# sysctl -p

[root@web2 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
[root@web2 ~]# sysctl -p
  • 在lvs1上配置虚拟服务器
# 创建虚拟服务器
[root@lvs1 ~]# ipvsadm -A -t 192.168.4.15:80 -s wlc
# 向虚拟服务器中加真实服务器
[root@lvs1 ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100 -w 1 -g
[root@lvs1 ~]# ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200 -w 2 -g
# 查看配置
[root@lvs1 ~]# ipvsadm -Ln

# 客户验证
[root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done
apache web server2
192.168.2.100
apache web server2
apache web server2
192.168.2.100
apache web server2
  • lvs本身没有应用服务器监控功能,如果web服务器出现问题,需要手工从规则中删掉
[root@web1 ~]# systemctl stop httpd
# 客户端访问时,转发到web1上的请求,将会拒绝连接
[root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done
apache web server2
curl: (7) Failed connect to 192.168.4.15:80; 拒绝连接
apache web server2
apache web server2
curl: (7) Failed connect to 192.168.4.15:80; 拒绝连接
apache web server2
# 的规则中删除web1
[root@lvs1 ~]# ipvsadm -d -t 192.168.4.15:80 -r 192.168.4.100
[root@client1 ~]# for i in {1..6}; do curl http://192.168.4.15/; done
apache web server2
apache web server2
apache web server2
apache web server2
apache web server2
apache web server2
  • 附:出错时,排错步骤:
# 在lvs上可以访问到web服务器
[root@lvs1 ~]# curl http://192.168.4.100/
192.168.2.100
[root@lvs1 ~]# curl http://192.168.4.200/
apache web server2

# 查看vip
[root@lvs1 ~]# ifconfig eth0:0
eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.15  netmask 255.255.255.0  broadcast 192.168.4.255
        ether 52:54:00:0d:fb:79  txqueuelen 1000  (Ethernet)

[root@web1 ~]# ifconfig lo:0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.4.15  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

# 查看内核参数
[root@web1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

# 查看规则
[root@lvs1 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.4.15:80 wlc
  -> 192.168.4.100:80             Route   1      0          0         
  -> 192.168.4.200:80             Route   2      0          0  
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值