目录
一、ipvsadm 工具
二、NAT模式下部署LVS负载均衡
1、部署NFS共享存储服务器
1.1 安装NFS软件
1.2 新建共享目录和站点文件
1.3 设置共享策略
2、部署节点服务器1
2.1 安装并启动nginx软件
2.2 挂载共享目录到网页站点目录
2.3 修改网关
3、部署节点服务器2
3.1 安装并启动nginx软件
3.2 挂载共享目录到网页站点目录
3.3 修改网关
4、部署调度服务器
4.1 添加新网卡并配置网卡信息
4.2 开启路由转发功能
4.3 搭建本地yum仓库安装ipvsadm
4.4 配置调度
5、测试
一、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 |
#管理集群服务
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群集模式
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负载均衡
前提:关闭所有设备的防火墙和核心防护
[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软件
[root@localhost ~]#yum install nfs-utils rpcbind -y
[root@localhost ~]#systemctl start rpcbind
[root@localhost ~]#systemctl start nfs
1.2 新建共享目录和站点文件
[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 设置共享策略
[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软件
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install -y nginx
[root@localhost ~]#systemctl start nginx
2.2 挂载共享目录到网页站点目录
[root@localhost ~]#showmount -e 172.16.12.13
[root@localhost ~]#mount 172.16.12.13:/opt/web1 /usr/share/nginx/html
2.3 修改网关
[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软件
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install -y nginx
[root@localhost ~]#systemctl start nginx
3.2 挂载共享目录到网页站点目录
[root@localhost ~]#showmount -e 172.16.12.13
[root@localhost ~]#mount 172.16.12.13:/opt/web2 /usr/share/nginx/html
3.3 修改网关
[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 添加新网卡并配置网卡信息
#添加新网卡并配置网卡信息,修改旧网卡网关
[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 开启路由转发功能
[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
#加载模块
[root@localhost ~]#modprobe ip_vs
[root@localhost ~]#cat /proc/net/ip_vs
#搭建本地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
#开启ipvsadm服务
[root@localhost ~]#ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost ~]#systemctl start ipvsadm.service
[root@localhost ~]#systemctl status ipvsadm.service
4.4 配置负载分配策略,
[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、客户端测试
[root@localhost ~]#curl 11.0.0.10
注:
在调度服务器可查看,当前系统上 IPVS 的配置信息
[root@localhost ~]#cat /proc/net/ip_vs
[root@localhost ~]#ipvsadm -ln
二、 DR模式下部署LVS负载均衡
前提:关闭所有设备的防火墙和核心防护
[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 临时设置虚拟回环网卡
[root@localhost ~]#ifconfig lo:0 172.16.12.200/32
[root@localhost ~]#ip a
1.1.2 永久设置虚拟回环网卡
[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 设置路由
[root@localhost network-scripts]#route add -host 172.16.12.200 dev lo:0
[root@localhost network-scripts]#route -n
1.3 忽略arp请求
#添加系统只响应目的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软件
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install -y nginx
[root@localhost ~]#systemctl start nginx
1.5 新建网页站点文件
[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 临时设置虚拟回环网卡
[root@localhost ~]#ifconfig lo:0 172.16.12.200/32
[root@localhost ~]#ip a
2.1.2 永久设置虚拟回环网卡
[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 设置路由
[root@localhost network-scripts]#route add -host 172.16.12.200 dev lo:0
[root@localhost network-scripts]#route -n
2.3 忽略ARP请求
#添加系统只响应目的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软件
[root@localhost ~]#yum install epel-release.noarch -y
[root@localhost ~]#yum install -y nginx
[root@localhost ~]#systemctl start nginx
2.5 新建网页站点文件
[root@localhost ~]#echo "welcome to web 1" > /usr/share/nginx/html/index.html
[root@localhost ~]#cat /usr/share/nginx/html/index.html
3、部署负载均衡调度服务器
3.1 设置虚拟网卡
3.1.1 临时设置虚拟网卡
[root@localhost ~]#ifconfig ens33:0 172.16.12.200/32
[root@localhost ~]#ip a
3.1.2 永久设置虚拟网卡
[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 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能
[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
#加载模块
[root@localhost ~]#modprobe ip_vs
[root@localhost ~]#cat /proc/net/ip_vs
#搭建本地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
#开启ipvsadm服务
[root@localhost ~]#ipvsadm-save >/etc/sysconfig/ipvsadm
[root@localhost ~]#systemctl start ipvsadm.service
[root@localhost ~]#systemctl status ipvsadm.service
3.4 配置负载分配策略
[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、客户端测试
#客户端访问负载调度服务器的虚拟网卡
[root@localhost ~]#curl 172.16.12.200
注:
在调度服务器可查看,当前系统上 IPVS 的配置信息
[root@localhost ~]#cat /proc/net/ip_vs
[root@localhost ~]#ipvsadm -ln