部署LVS负载均衡集群架构

目录

[一、ipvsadm 工具](#一、ipvsadm 工具)

二、NAT模式下部署LVS负载均衡

1、部署NFS共享存储服务器

[1.1 安装NFS软件](#1.1 安装NFS软件)

[1.2 新建共享目录和站点文件](#1.2 新建共享目录和站点文件)

[1.3 设置共享策略](#1.3 设置共享策略)

2、部署节点服务器1

[2.1 安装并启动nginx软件](#2.1 安装并启动nginx软件)

[2.2 挂载共享目录到网页站点目录](#2.2 挂载共享目录到网页站点目录)

[2.3 修改网关](#2.3 修改网关)

3、部署节点服务器2

[3.1 安装并启动nginx软件](#3.1 安装并启动nginx软件)

[3.2 挂载共享目录到网页站点目录](#3.2 挂载共享目录到网页站点目录)

[3.3 修改网关](#3.3 修改网关)

4、部署负载均衡调度服务器

[4.1 添加新网卡并配置网卡信息](#4.1 添加新网卡并配置网卡信息)

[4.2 开启路由转发功能](#4.2 开启路由转发功能)

[4.3 搭建本地yum仓库安装ipvsadm](#4.3 搭建本地yum仓库安装ipvsadm)

[4.4 配置负载分配策略,](#4.4 配置负载分配策略,)

5、客户端测试

[三、 DR模式下部署LVS负载均衡](#三、 DR模式下部署LVS负载均衡)

1、部署节点服务器1

[1.1 设置虚拟回环网卡](#1.1 设置虚拟回环网卡)

[1.1.1 临时设置虚拟回环网卡](#1.1.1 临时设置虚拟回环网卡)

[1.1.2 永久设置虚拟回环网卡](#1.1.2 永久设置虚拟回环网卡)

[1.2 设置路由](#1.2 设置路由)

[1.3 忽略arp请求](#1.3 忽略arp请求)

[1.4 安装并启动nginx软件](#1.4 安装并启动nginx软件)

[1.5 新建网页站点文件](#1.5 新建网页站点文件)

2、部署节点服务器2

[2.1 设置虚拟回环网卡](#2.1 设置虚拟回环网卡)

[2.1.1 临时设置虚拟回环网卡](#2.1.1 临时设置虚拟回环网卡)

[2.1.2 永久设置虚拟回环网卡](#2.1.2 永久设置虚拟回环网卡)

[2.2 设置路由](#2.2 设置路由)

[2.3 忽略ARP请求](#2.3 忽略ARP请求)

[2.4 安装并启动nginx软件](#2.4 安装并启动nginx软件)

[2.5 新建网页站点文件](#2.5 新建网页站点文件)

3、部署负载均衡调度服务器

[3.1 设置虚拟网卡](#3.1 设置虚拟网卡)

[3.1.1 临时设置虚拟网卡](#3.1.1 临时设置虚拟网卡)

[3.1.2 永久设置虚拟网卡](#3.1.2 永久设置虚拟网卡)

[3.2 调整/proc响应参数](#3.2 调整/proc响应参数)

[3.3 搭建本地yum仓库安装ipvsadm](#3.3 搭建本地yum仓库安装ipvsadm)

[3.4 配置负载分配策略](#3.4 配置负载分配策略)

4、客户端测试


一、ipvsadm 工具

ipvsadm是用于配置IP负载均衡的工具,实现LVS内核的工具,用于实现负载均衡,将传入的连接分发给一组后端服务器

| 选项 | 说明 |
| -A | 添加虚拟服务器 |
| -D | 删除整个虚拟服务器 |
| -s | 指定负载调度算法(轮询: rr、加权轮询: wrr、最少连接: lc、加权最少连接: wlc) |
| -a | 添加真实服务器(节点服务器) |
| -d | 删除某一个节点 |
| -t | 指定VIP地址及TCP端口 |
| -r | 指定RIP地址及TCP端口 |
| -m | 表示使用NAT群集模式 |
| -g | 表示使用DR模式 |
| -j | 表示使用TUN模式 |
| -w | 设置权重(权重为0时表示暂停节点) |
| -p | -p 60 表示保持长连接60秒 |
| -l | 列表查看 LVS虚拟服务器(默认为查看所有) |

-n 以数字形式显示地址、端口等信息,常与"-l"选项组合使用。ipvsadm -ln
bash 复制代码
#管理集群服务
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address #删除
ipvsadm --C #清空
ipvsadm --R #重载,相当于ipvsadm-restore
ipvsadm -S [-n] #保存,相当于ipvsadm-save
#管理集群中的RS
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]  
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]

选项:
lvs类型:
    -g: gateway, dr类型,默认
    -i: ipip, tun类型
    -m: masquerade, nat类型        
-w weight:权重

例子:
ipvsadm -A -t 12.0.0.1:80 -s rr
-A 新建代理服务器
-t tcp协议
12:0.0.1:80
-s 指定调度算法

ipvsadm -a -t 12.0.0.1:80 -r 192.168.80.11:80 -m
-r 真实服务器
-m 表示使用NAT群集模式
bash 复制代码
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvs调度规则文件:/etc/sysconfig/ipvsadm

二、NAT模式下部署LVS负载均衡

前提:关闭所有设备的防火墙和核心防护

bash 复制代码
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0

注:

  • 当客户端访问负载调度服务器,负载调度服务器会根据轮询的调度算法,将请求调度到节点服务器1或节点服务器2上(比例1:1)。
  • 然后节点服务器1和节点服务器2从NFS共享存储服务器上获取网页资源,然后再通过负载调度服务器返回给客户端

在现实环境中,节点服务器1和节点服务器2从NFS共享存储服务器上获取的网页资源内容是一样的,但这里,为了方便展示效果,就使用不同的网页资源,方便区分。

浏览器访问:

情况一:

http://172.16.12.10/ ---> 负载调度服务器 ---> 节点服务器1 ---> NFS共享存储服务器:welcome to web 1

情况二:

http://172.16.12.10/ ---> 负载调度服务器 ---> 节点服务器2 ---> NFS共享存储服务器:welcome to web 2

1、部署NFS共享存储服务器

NFS 是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。通过使用 NFS

协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。对于大多数负载均衡

群集来说,使用 NFS 协议来共享数据存储是比较常见的做法,NFS 也是 NAS 存储设备必然支

持的一种协议

NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,以完成远程

到本地的映射过程。在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS

共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持

1.1 安装NFS软件

bash 复制代码
[root@localhost ~]#yum install nfs-utils rpcbind -y
[root@localhost ~]#systemctl start rpcbind
[root@localhost ~]#systemctl start nfs

1.2 新建共享目录和站点文件

bash 复制代码
[root@localhost ~]#mkdir /opt/web1 /opt/web2
[root@localhost ~]#chmod 777 /opt/web1 /opt/web2
[root@localhost ~]#echo 'welcome to web 1' > /opt/web1/index.html
[root@localhost ~]#echo 'welcome to web 2' > /opt/web2/index.html

1.3 设置共享策略

bash 复制代码
[root@localhost ~]#vim /etc/exports
/opt/web1 172.16.12.0/24(rw,sync)
/opt/web2 172.16.12.0/24(rw,sync)
[root@localhost ~]#exportfs -r
[root@localhost ~]#exportfs -v
[root@localhost ~]#systemctl restart nfs

2、部署节点服务器1

2.1 安装并启动nginx软件

bash 复制代码
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install -y nginx
[root@localhost ~]#systemctl start nginx

2.2 挂载共享目录到网页站点目录

bash 复制代码
[root@localhost ~]#showmount -e 172.16.12.13
[root@localhost ~]#mount 172.16.12.13:/opt/web1 /usr/share/nginx/html

2.3 修改网关

bash 复制代码
[root@localhost ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=172.16.12.11
NETMASK=255.255.255.0
GATEWAY=172.16.12.10
DNS1=8.8.8.8
DNS2=114.114.114.114
[root@localhost ~]#systemctl restart network

3、部署节点服务器2

3.1 安装并启动nginx软件

bash 复制代码
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install -y nginx
[root@localhost ~]#systemctl start nginx

3.2 挂载共享目录到网页站点目录

bash 复制代码
[root@localhost ~]#showmount -e 172.16.12.13
[root@localhost ~]#mount 172.16.12.13:/opt/web2 /usr/share/nginx/html

3.3 修改网关

bash 复制代码
[root@localhost ~]#vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=172.16.12.12
NETMASK=255.255.255.0
GATEWAY=172.16.12.10
DNS1=8.8.8.8
DNS2=114.114.114.114
[root@localhost ~]#systemctl restart network

4、部署负载均衡调度服务器

4.1 添加新网卡并配置网卡信息

bash 复制代码
#添加新网卡并配置网卡信息,修改旧网卡网关
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]#vim ifcfg-ens36
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=11.0.0.10
NETMASK=255.255.255.0
GATEWAY=11.0.0.10
DNS1=8.8.8.8
DNS2=114.114.114.114
[root@localhost network-scripts]#vim ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=172.16.12.10
NETMASK=255.255.255.0
GATEWAY=172.16.12.10
DNS1=8.8.8.8
DNS2=114.114.114.114
[root@localhost network-scripts]#systemctl restart network
[root@localhost network-scripts]#ifconfig

4.2 开启路由转发功能

bash 复制代码
[root@localhost ~]#echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
[root@localhost ~]#sysctl -p
[root@localhost ~]#sysctl -a | grep ip_forward

4.3 搭建本地yum仓库安装ipvsadm

bash 复制代码
#加载模块
[root@localhost ~]#modprobe ip_vs
[root@localhost ~]#cat /proc/net/ip_vs
bash 复制代码
#搭建本地yum仓库安装ipvsadm
[root@localhost ~]#mount /dev/sr0 /mnt
[root@localhost ~]#cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#mkdir bak
[root@localhost yum.repos.d]#mv *.repo bak
[root@localhost yum.repos.d]#vim local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
[root@localhost yum.repos.d]#yum clean all
[root@localhost yum.repos.d]#yum makecache
[root@localhost ~]#yum install -y ipvsadm.x86_64
bash 复制代码
#开启ipvsadm服务
[root@localhost ~]#ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost ~]#systemctl start ipvsadm.service
[root@localhost ~]#systemctl status ipvsadm.service

4.4 配置负载分配策略,

bash 复制代码
[root@localhost ~]#ipvsadm -C
[root@localhost ~]#ipvsadm -ln
[root@localhost ~]#ipvsadm -A -t 11.0.0.10:80 -s rr
[root@localhost ~]#ipvsadm -a -t 11.0.0.10:80 -r 172.16.12.11:80 -m
[root@localhost ~]#ipvsadm -a -t 11.0.0.10:80 -r 172.16.12.12:80 -m
[root@localhost ~]#ipvsadm -ln
[root@localhost ~]#ipvsadm-save >/etc/sysconfig/ipvsadm

5、客户端测试

bash 复制代码
[root@localhost ~]#curl 11.0.0.10

模拟节点服务器1宕机:

即关闭节点服务器1的nginx服务,那么NAT模式下的LVS负载调度服务器会有对后端节点服务器的健康检查机制吗?

客户端测试得知,当节点服务器1宕机,LVS负载调度服务器仍会调度到宕机的节点服务器1上,所以LVS负载调度服务器不会对后端的节点服务器进行健康检测,不会检测后端的服务器是否正常工作

注:

在调度服务器可查看,当前系统上 IPVS 的配置信息

bash 复制代码
[root@localhost ~]#cat /proc/net/ip_vs
[root@localhost ~]#ipvsadm -ln

三、 DR模式下部署LVS负载均衡

前提:关闭所有设备的防火墙和核心防护

bash 复制代码
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0

注:

  • 当客户端发送请求时,请求会首先到达负载调度服务器。负载调度服务器根据轮询的调度算法,将请求转发给节点服务器1或节点服务器2
  • 当节点服务器1或节点服务器2接收到请求后,处理并生成响应,直接将响应数据包发送回客户端,不需要经过负载调度服务器
  • 需要在负载调度服务器、所有的节点服务器上的配置虚拟IP(VIP),关闭所有节点服务器的arp广播

在现实环境中,从节点服务器1和节点服务器2获取的网页资源内容是一样的,但这里,为了方便展示效果,就使用不同的网页资源,方便区分。

浏览器访问:

情况一:

http://172.16.12.200/ ---> 负载调度服务器 ---> 节点服务器1 ---> welcome to web 1

客户端 <----

情况二:

http://172.16.12.200/ ---> 负载调度服务器 ---> 节点服务器2 ---> welcome to web 2

客户端 <----

1、部署节点服务器1

1.1 设置虚拟回环网卡

1.1.1 临时设置虚拟回环网卡
bash 复制代码
[root@localhost ~]#ifconfig lo:0 172.16.12.200/32
[root@localhost ~]#ip a
1.1.2 永久设置虚拟回环网卡
bash 复制代码
[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=172.16.12.200
NETMASK=255.255.255.255
NETWORK=127.0.0.0
[root@localhost network-scripts]#systemctl restart network
[root@localhost network-scripts]#ip a

1.2 设置路由

bash 复制代码
[root@localhost network-scripts]#route add -host 172.16.12.200 dev lo:0
[root@localhost network-scripts]#route -n

1.3 忽略arp请求

bash 复制代码
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
[root@localhost ~]#vim /etc/sysctl.conf
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
[root@localhost ~]#sysctl -p

1.4 安装并启动nginx软件

bash 复制代码
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install -y nginx
[root@localhost ~]#systemctl start nginx

1.5 新建网页站点文件

bash 复制代码
[root@localhost ~]#echo "welcome to web 1" > /usr/share/nginx/html/index.html
[root@localhost ~]#cat /usr/share/nginx/html/index.html

2、部署节点服务器2

2.1 设置虚拟回环网卡

2.1.1 临时设置虚拟回环网卡
bash 复制代码
[root@localhost ~]#ifconfig lo:0 172.16.12.200/32
[root@localhost ~]#ip a
2.1.2 永久设置虚拟回环网卡
bash 复制代码
[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=172.16.12.200
NETMASK=255.255.255.255
NETWORK=127.0.0.0
[root@localhost network-scripts]#systemctl restart network
[root@localhost network-scripts]#ip a

2.2 设置路由

bash 复制代码
[root@localhost network-scripts]#route add -host 172.16.12.200 dev lo:0
[root@localhost network-scripts]#route -n

2.3 忽略ARP请求

bash 复制代码
#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP
[root@localhost ~]#vim /etc/sysctl.conf
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
[root@localhost ~]#sysctl -p

2.4 安装并启动nginx软件

bash 复制代码
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install -y nginx
[root@localhost ~]#systemctl start nginx

2.5 新建网页站点文件

bash 复制代码
[root@localhost ~]#echo "welcome to web 2" > /usr/share/nginx/html/index.html
[root@localhost ~]#cat /usr/share/nginx/html/index.html

3、部署负载均衡调度服务器

3.1 设置虚拟网卡

3.1.1 临时设置虚拟网卡
bash 复制代码
[root@localhost ~]#ifconfig ens33:0 172.16.12.200/32
[root@localhost ~]#ip a
3.1.2 永久设置虚拟网卡
bash 复制代码
[root@localhost ~]#cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]#cp ifcfg-ens33 ifcfg-ens33:0
[root@localhost network-scripts]#vim ifcfg-ens33:0
#删除dns与网关,注意子网
NAME=ens33:0
DEVICE=ens33:0
IPADDR=172.16.12.200
NETMASK=255.255.255.255
[root@localhost network-scripts]#systemctl restart network
[root@localhost ~]#ip a

3.2 调整/proc响应参数

对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能

bash 复制代码
[root@localhost ~]#vim /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 ~]#sysctl -p

3.3 搭建本地yum仓库安装ipvsadm

bash 复制代码
#加载模块
[root@localhost ~]#modprobe ip_vs
[root@localhost ~]#cat /proc/net/ip_vs
bash 复制代码
#搭建本地yum仓库安装ipvsadm
[root@localhost ~]#mount /dev/sr0 /mnt
[root@localhost ~]#cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#mkdir bak
[root@localhost yum.repos.d]#mv *.repo bak
[root@localhost yum.repos.d]#vim local.repo
[local]
name=local
baseurl=file:///mnt
gpgcheck=0
[root@localhost yum.repos.d]#yum clean all
[root@localhost yum.repos.d]#yum makecache
[root@localhost ~]#yum install -y ipvsadm.x86_64
bash 复制代码
#开启ipvsadm服务
[root@localhost ~]#ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost ~]#systemctl start ipvsadm.service
[root@localhost ~]#systemctl status ipvsadm.service

3.4 配置负载分配策略

bash 复制代码
[root@localhost ~]#ipvsadm -C
[root@localhost ~]#ipvsadm -ln
[root@localhost ~]#ipvsadm -A -t 172.16.12.200:80 -s rr
[root@localhost ~]#ipvsadm -a -t 172.16.12.200:80 -r 172.16.12.11:80 -g
[root@localhost ~]#ipvsadm -a -t 172.16.12.200:80 -r 172.16.12.12:80 -g
[root@localhost ~]#ipvsadm -ln
[root@localhost ~]#ipvsadm-save >/etc/sysconfig/ipvsadm

4、客户端测试

bash 复制代码
#客户端访问负载调度服务器的虚拟网卡
[root@localhost ~]#curl 172.16.12.200

模拟节点服务器1宕机:

即关闭节点服务器1的nginx服务,那么DR模式下的LVS负载调度服务器会有对后端节点服务器的健康检查机制吗?

客户端测试得知,当节点服务器1宕机,LVS负载调度服务器仍会调度到宕机的节点服务器1上,所以LVS负载调度服务器不会对后端的节点服务器进行健康检测,不会检测后端的服务器是否正常工作

注:

在调度服务器可查看,当前系统上 IPVS 的配置信息

bash 复制代码
[root@localhost ~]#cat /proc/net/ip_vs
[root@localhost ~]#ipvsadm -ln
相关推荐
_.Switch3 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410833 小时前
文件系统和日志管理
linux·运维·服务器
JokerSZ.3 小时前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
芯盾时代4 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方5 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘5 小时前
NFS服务器
运维·服务器
苹果醋36 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰6 小时前
[linux]docker基础
linux·运维·docker
Jason-河山6 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化
lihuhelihu7 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算