目录
集群概述
一、LVS 相关原理
1.LVS简介
2.LVS工作模式
3.LVS调度算法
二、ipvsadm工具
1.ipvsadm工具简介
2.ipvsadm命令
三、LVS-DR集群
1.LVS-DR集群介绍
2.LVS-DR模式工作原理
3.LVS – DR 模式集群构建
四、LVS–NAT集群
1.LVS–NAT集群介绍
2.LVS–NAT工作原理
3.LVS–NAT模式集群搭建
1.集群定义
2.集群分类
LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器。使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
NAT模式(网络地址映射)
IP TUN模式(IP Tunneling IP隧道)
DR模式(Direct Routing 直接路由)
ipvsadm是LVS在应用层的管理命令,我们可以通过这个命令去管理LVS的配置,编辑和定制lvs的功能。
-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-s --scheduler #使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
例:ipvsadm -A -t 192.168.1.2:80 -s wrr
-a --add-server #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ip #指定LVS的工作模式为隧道模式
-p #会话保持时间,定义流量被转到同一个realserver的会话存留时间
例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1
-E -edit-service #编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录。
-C -clear #清除内核虚拟服务器表中的所有记录。
-R -restore #恢复虚拟服务器规则
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
-e -edit-server #编辑一条虚拟服务器记录中的某条真实服务器记录
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表
--numeric, -n:#以数字形式输出地址和端口号
--exact: #扩展信息,精确值
--connection,-c: #当前IPVS连接输出
--stats: #统计信息
--rate : #输出速率信息
参数也可以从/proc/net/ip_vs*映射文件中查看
-Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)
需要一台电脑作为Director服务器。还需要两台虚拟机用于模拟真实服务器。网关需相同
作用 | IP地址 | 服务 | 工具 |
Director(负载调度器) | VIP:192.168.2.120 DIP:192.168.2.120 |
ipvsadm | |
node1(真实服务器1) | RIP1:192.168.2.129 | httpd | |
node2(真实服务器2) | RIP2:192.168.2.131 | httpd | |
node3(客户端) | DIP:192.168.2.128 |
1.配置Director
下载工具
yum install ipvsadm -y
配置LVS虚拟IP(VIP)
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:1
vim ifcfg-ens33:1
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33:1
UUID=809d2184-0cf8-413f-85cf-8799b0311082
DEVICE=ens33:1
ONBOOT=yes
IPADDR=192.168.2.120
NETMASK=255.255.255.0
vim ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=809d2184-0cf8-413f-85cf-8799b0311082
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.2.132
NETMASK=255.255.255.0
GATEWAY=192.168.2.2
配置转发
[root@driectory ~]# ipvsadm -A -t 192.168.2.120:80 -s rr
[root@driectory ~]# 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.2.120:80 rr
[root@driectory ~]# ipvsadm -a -t 192.168.2.120:80 -r 192.168.2.129:80 -g
[root@driectory ~]# ipvsadm -a -t 192.168.2.120:80 -r 192.168.2.131:80 -g
[root@driectory ~]# 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.2.120:80 rr
-> 192.168.2.129:80 Route 1 0 0
-> 192.168.2.131:80 Route 1 0 0
2.配置服务器(两台)
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:1
vi ifcfg-lo:1
更改配置
DEVICE=lo:1
IPADDR=192.168.2.120
NETTMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
测试
PREROUTING检查发现数据包的目标lP是本机,将数据包送至INPUT链
IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。此时报文的源IP为CIP,目标IP为RIP
POSTROUTING链通过选路,将数据包发送给Real Server
Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。此时报文的源IP为RIP,目标IP为CIP
Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。此时报文的源IP为VIP,目标IP为CIP
需要一台有两张网卡的Director服务器。其中一张网卡用于模拟Director的VIP。还需要两台相同网关的虚拟机用于模拟真实服务器。
作用 | IP地址 | 服务 | 工具 |
Director(负载调度器) | VIP:192.168.0.103 DIP:192.168.2.132 | ipvsadm | |
node1(真实服务器1) | RIP1:192.168.2.129 | httpd | |
node2(真实服务器2) | RIP2:192.168.2.131 | httpd | |
node3(客户端) | DIP:192.168.0.104 |
1.配置网络环境
给Director添加一张网卡,添加网卡为桥接模式
Director VIP网卡配置文件
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static #改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
UUID=4d5a39eb-2748-4c7b-80ab-2dff43f7ed05
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.0.103
NETMASK=255.255.255.0
Director DIP网卡配置文件
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=809d2184-0cf8-413f-85cf-8799b0311082
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.2.132
NETMASK=255.255.255.0
GATEWAY=192.168.0.103 #添加网关
~
真实服务器网卡配置文件,两个除IP不同,配置相同
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=ad8c2a22-092b-47d6-a5f7-07e6a814bcf6
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.2.129
NETMASK=255.255.255.0
GATEWAY=192.168.2.132 #添加网关
DNS1=114.114.114.114
DNS2=8.8.8.8
客户端网卡设置桥接模式即可
2.配置基础环境
设置web服务器(两台)
yum install httpd -y
echo "`hostname -I`" > /var/www/html/index.html
systemctl start httpd
关闭防火墙
systemctl stop firewalld
setenforce 0
开启httpd服务,并测试
systemctl start httpd
[root@node1 ~]# curl 192.168.2.129
192.168.2.129
3.部署LVS-NAT模式调度器
确认调度器的路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward #此文件不能使用vim编辑,此方法临时生效
echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf#永久方法
创建集群服务器
ipvsadm -A -t 192.168.0.103:80 -s rr
添加真实服务器
ipvsadm -a -t 192.168.0.103:80 -r 192.168.2.129 -w 1 -m
ipvsadm -a -t 192.168.0.103:80 -r 192.168.2.131 -w 1 -m
检查配置
[root@driectory ~]# 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.0.103:80 rr
-> 192.168.2.129:80 Masq 1 0 0
-> 192.168.2.131:80 Masq 1 0 0
[root@driectory ~]#
4.最后测试