目录
[一、ipvsadm 工具](#一、ipvsadm 工具)
[1.1 安装NFS软件](#1.1 安装NFS软件)
[1.2 新建共享目录和站点文件](#1.2 新建共享目录和站点文件)
[1.3 设置共享策略](#1.3 设置共享策略)
[2.1 安装并启动nginx软件](#2.1 安装并启动nginx软件)
[2.2 挂载共享目录到网页站点目录](#2.2 挂载共享目录到网页站点目录)
[2.3 修改网关](#2.3 修改网关)
[3.1 安装并启动nginx软件](#3.1 安装并启动nginx软件)
[3.2 挂载共享目录到网页站点目录](#3.2 挂载共享目录到网页站点目录)
[3.3 修改网关](#3.3 修改网关)
[4.1 添加新网卡并配置网卡信息](#4.1 添加新网卡并配置网卡信息)
[4.2 开启路由转发功能](#4.2 开启路由转发功能)
[4.3 搭建本地yum仓库安装ipvsadm](#4.3 搭建本地yum仓库安装ipvsadm)
[4.4 配置负载分配策略,](#4.4 配置负载分配策略,)
[三、 DR模式下部署LVS负载均衡](#三、 DR模式下部署LVS负载均衡)
[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.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.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 配置负载分配策略)
一、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