LVS集群

一、LVS概述

1.1 简介

LVS(Linux Virtual Server)是基于Linux系统实现的负载均衡解决方案。

它利用Linux的IP负载均衡(IPVS)内核模块来实现负载均衡功能。

IPVS在内核空间中拦截并分发进入的网络流量,将流量按照一定的负载均衡算法分发给后端多台服务器,实现负载均衡的目的。

这样可以提高系统的性能、可伸缩性和高可用性。

LVS现在已成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自己调用。

modprobe ip_vs
​
cat /proc/net/ip_vs
​

1.2 LVS工作原理

1)当用户向负载均衡器(Director Server)发起请求,调度器将请求发送至内核空间;

2)PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发送到INPUT链;

3)IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已经定义好的集群服务进行对比,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发送到POSTROUTING链;

4)POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送到后端的服务器;

2.3 LVS 的三种工作模式简介

2.3.1 NAT模式

调度器会作为所以节点服务器的默认网关,也是客户端的访问入口和节点服务器返回响应消息的出口,也就是说调度器会承载双向数据流量的负载压力,可能会成为整个群集的性能瓶颈。

由于节点服务器都处于内网环境,使用私网IP地址,所以具有一定安全性。

2.3.2 TUN模式

调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。

但是由于节点服务器需要部署在不同位置的公网环境中,需要具有独立的公网IP,调度器与节点服务器是通过专用的IP隧道实现相互通信的,因此IP隧道模式的成本较高、安全性较低,且IP隧道需要额外的封装和解封装,性能会受到一定的影响。

2.3.3 DR 模式

调度器仅作为客户端的访问入口,节点服务器的响应消息是直接返回给客户端的,不需要经过调度器。(与NAT模式的区别) 节点服务器与调度器是部署在同一个物理网络内,因此不需要建立专用的IP隧道。(与TUN模式的区别) DR模式是企业首选的LVS模式。

2.3.4 对比

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

工作模式特点区别应用情况
NAT通过网络地址转换实现的虚拟服务器,大并发访问时,调度器的性能成为瓶颈调度器作为网关,是访问请求得到入口,也是响应访问的出口,在高并发场景当中负载压力很高,NAT地址转换可以提高安全性,但使用性能降低一半因性能使用率问题,实际应用不多
DR使用路由技术实现虚拟服务器,节点服务器需要配置VIP,注意MAC地址广播调度器仅是访问请求的入口,响应数据不经过调度器。节点服务器和调度器在同一个物理网络中,数据转发不受额外影响该模式是生产环境中最常用的
TUN通过隧道方式实现虚拟路由器调度器仅是访问请求的入口,响应数据不经过调度器。但是需要大量公网IP,还需要专用的IP隧道,数据转发受IP隧道影响因公网IP问题,实际应用不多,常用于大型企业的异地灾备

2.4LVS 调度算法

rr 轮询 wrr 加权轮询 sh 源地址哈希 dh 目的地址哈希 lc 最小连接 wlc 加权最小连接 lblc 基于地址的最小连接0

2.4.1 固定调度算法:rr、wrr、dh、sh

rr:轮询算法,将请求依次分配给不同的rs节点,即RS节点中均摊分配。适合于RS所有节点处理性能接近的情况。 wrr:加权轮询调度,一句不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值低的RS更多,相同权值的RS得到相同数目的连接数。 dh:目的地址哈希调度(destination hashing)以目的地址为关键字查找一个静态hash表来获得所需RS。 sh:源地址哈希调度(source hashing)以源地址为关键字查找一个静态hash表来获得需要的RS。

2.4.2 动态调度算法:wlc、lc、lblc

wlc:加权最小连接数调度,架设各台RS的权值依次为Wi,当前tcp连接数依次为Ti,依次去Ti/Wi为最小的RS作为下一个分配的RS。 lc:最小连接数调度(least-connection),ipvs表存储了所有活动的连接。LB会比较连接请求放到当前连接最少的RS。 lblc:基于地址的最小连接数(locality-based least-connection),将来自同一个目的地址的请求分配给同一台RS,此时这台服务器是尚未满负荷的。否则就将这个请求分配给连接数最小的RS,并以它作为下一次分配的首先考虑。

2.4 ipvsadm工具

yum install -y ipvsadm
​
已安装:
  ipvsadm.x86_64 0:1.27-8.el7                                                   
​
完毕!
​
​
2.4.1 ipvsadm工具的功能

LVS群集创建与管理:

  1. 创建虚拟服务器

  2. 添加、删除服务器节点

  3. 查看群集及节点情况

  4. 保存负载分配策略

2.4.2 ipvsadm工具选项

-A: 添加虚拟服务器 -D: 删除整个虚拟服务器 -s: 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc) -a: 添加真实服务器(节点服务器) -d: 删除某一个节点 -t: 指定VIP地址及TCP端口 -r: 指定RIP地址及TCP端口 -m: 表示使用NAT群集模式 -g: 表示使用DR模式 -i: 表示使用TUN模式 一w: 设置权重(权重为0时表示暂停节点) -p 60: 表示保持长连接60秒 -l: 列表查看 LVS虚拟服务器(默认为查看所有) -n: 以数字形式显示地址、端口等信息,常与"-l“选项组合使用。ipvsadm -ln

三、LVS-NAT模式详解

节点服务器
添加一块网卡仅主机模式
systemctl stop firewalld
setenforce 0
cd  /etc/sysconfig/network-scripts/
cp ifcfg-ens33   ifcfg-ens36
vim   ifcfg-ens36
IPADDR=12.0.0.1
NETMASK=255.255.255.0
GATEWAY=12.0.0.1
yum install ipvsadm -y 
#开启路由转发
vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
sysctl  -p
#启动服务前需保存负载分配策略
ipvsadm-save  >   /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
#添加策略
ipvsadm  -A  -t 12.0.0.1:80 -s rr
ipvsadm  -a  -t 12.0.0.1:80 -r 192.168.10.20:80 -m 
ipvsadm  -a  -t 12.0.0.1:80 -r 192.168.10.30:80 -m 
ipvsadm  -Ln
​
7-2 真实服务器
systemctl stop firewalld
setenforce 0
cd  /etc/sysconfig/network-scripts/
vim   ifcfg-ens33
网关指向  节点服务器内网网址
yum  install   httpd  -y
systemctl   start  httpd
echo  7-2  >  /var/www/html/index.html
​
7-3  真实服务器
systemctl stop firewalld
setenforce 0
cd  /etc/sysconfig/network-scripts/
vim   ifcfg-ens33
网关指向  节点服务器内网网址
yum  install   httpd  -y
systemctl   start  httpd
echo  7-2  >  /var/www/html/index.html
​
客户机  修改
ip地址   12.0.0.12  
和网卡类型 仅主机
​
测试  curl  12.0.0.1

四、LVS-DR模式详解

6.2实际操作:
#环境简介
DR 服务器:192.168.91.100
web 服务器1:192.168.91.101
web 服务器2:192.168.91.103
vip(虚拟回环):192.168.91.188
客户端:192.168.91.200
6.2.1配置负载调度器
systemctl stop firewalld.service
setenforce 0
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#setenforce 0
​
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActConn
[root@localhost ~]#yum install ipvsadm.x86_64 -y
#安装服务
​
#配置虚拟IP地址(VIP:192.168.91.188)
​
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens33:0
#配置虚拟网卡,若为隧道模式ifcfg-tunl0
[root@localhost network-scripts]#vim ifcfg-ens33:0
#删除dns与网关,注意子网
NAME=ens33:0
DEVICE=ens33:0
IPADDR=192.168.91.188
NETMASK=255.255.255.255
[root@localhost network-scripts]#systemctl restart network
[root@localhost network-scripts]#ifup ifcfg-ens33:0
#启动网卡
[root@localhost network-scripts]#ifconfig ifcfg-ens33:0
​
​
#调整/proc响应参数
[root@localhost network-scripts]# vi /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
​
[root@localhost network-scripts]#sysctl -p
#刷新配置
#调整/proc响应参数  对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能
​
#配置负载分配策略
[root@localhost ~]#modprobe ip_vs
[root@localhost ~]#cat /proc/net/ip_vs
#加载模块
[root@localhost network-scripts]#ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost network-scripts]#systemctl start ipvsadm.service
[root@localhost network-scripts]#ipvsadm -C
[root@localhost ~]#ipvsadm -A -t 192.168.91.188:80 -s rr
[root@localhost ~]#ipvsadm -a -t 192.168.91.188:80 -r 192.168.91.101:80 -g
[root@localhost ~]#ipvsadm -a -t 192.168.91.188:80 -r 192.168.91.103:80 -g
#添加真实服务器-a  指定VIP地址及TCP端口-t   指定RIP地址及TCP端口 -r 指定DR模式-g
[root@localhost network-scripts]#ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost.localdomain:http rr
  -> 192.168.91.101:http          Route   1      0          0         
  -> 192.168.91.103:http          Route   1      0          0         
[root@localhost network-scripts]#ipvsadm-save >/etc/sysconfig/ipvsadm
#保存设置
6.2.2节点服务器
节点1
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#setenforce 0
[root@localhost ~]#yum install httpd -y
[root@localhost ~]#systemctl start httpd
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-lo ifcfg-lo:0
[root@localhost ~]#ifconfig lo:0 192.168.91.188/32
[root@localhost ~]#ifconfig lo:0 192.168.91.188 255.255.255.255
[root@localhost network-scripts]#vim ifcfg-lo:0
#修改回环网卡名,IP地址,子网掩码
DEVICE=lo:0
IPADDR=192.168.91.188
NETMASK=255.255.255.255
NETWORK=127.0.0.0
[root@localhost network-scripts]#route add -host 192.168.91.188 dev lo:0
#设置路由
[root@localhost network-scripts]#route -n
#开机执行命令,或者写入 /etc/profile 文件
[root@localhost network-scripts]#vim /etc/rc.d/rc.local 
/usr/sbin/route add -host 192.168.91.188 dev lo:0
[root@localhost network-scripts]#chmod +x /etc/rc.d/rc.local
[root@localhost network-scripts]#ll /etc/rc.d/rc.local 
-rwxr-xr-x. 1 root root 484 11月 17 16:56 /etc/rc.d/rc.local
​
[root@localhost network-scripts]#vim /etc/sysctl.conf 
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
[root@localhost network-scripts]#sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
​
​
节点2
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#setenforce 0
[root@localhost ~]#yum install httpd -y
[root@localhost ~]#systemctl start httpd
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-lo ifcfg-lo:0
[root@localhost network-scripts]#vim ifcfg-lo:0
#修改回环网卡名,IP地址,子网掩码
DEVICE=lo:0
IPADDR=192.168.91.188
NETMASK=255.255.255.255
NETWORK=127.0.0.0
[root@localhost network-scripts]#route add -host 192.168.91.188 dev lo:0
#设置路由
[root@localhost network-scripts]#route -n
#开机执行命令,或者写入 /etc/profile 文件
[root@localhost network-scripts]#vim /etc/rc.d/rc.local 
/usr/sbin/route add -host 192.168.91.188 dev lo:0
[root@localhost network-scripts]#chmod +x /etc/rc.d/rc.local
[root@localhost network-scripts]#ll /etc/rc.d/rc.local 
-rwxr-xr-x. 1 root root 484 11月 17 16:56 /etc/rc.d/rc.local
​
[root@localhost network-scripts]#vim /etc/sysctl.conf 
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
[root@localhost network-scripts]#sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值