在各种互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器将难以承担所有的访问(即负载均衡及高可用性的要求),除了使用价格昂贵的大型机、专用负载分流设备外,企业还有另外一种选择来解决难题,那就是构建集群服务器——通过整合多台对廉价的普通服务器,以同一个地址对外提供相同的服务,接下来我们将要学习在企业中常用的一种集群技术——LVS(Linux Virtual Server,Linux 虚拟服务器)
无论哪种群集,都至少包括两台节点服务器,而对外表现为一个整体,只提供一个访问入口(域名或IP系统)
根据群集所针对的目标差异,可分为以下三种类型:
LVS 实际上相当于基于IP地址的虚拟化应用,为基于 IP 地址和内容请求分发的负载均衡提出了一种高效的解决方法
LVS 现在已成为 Linux 内核的一部分,默认编译为 ip_vs 模块,必要时能够自动调用
在 CentOS 7 系统中,以下操作可以手动加载 ip_vs 模块,并查看当前系统中 ip_vs 模块的版本信息
[root@localhost ~]# modprobe ip_vs #加载 ip_vs 模块
[root@localhost ~]# cat /proc/net/ip_vs #查看 ip_vs 版本信息
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
针对不同的网络服务和配置需要,LVS 调度器提供多种不同的负载调度算法,其中最常见的四种算法包括轮询、加权轮询、最少连接和加权最少连接
[root@localhost ~]# yum -y install ipvsadm
[root@localhost ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
常用选项 | 说明 |
---|---|
-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 |
1.管理虚拟服务器
#添加一个虚拟服务192.168.1.100:80,使用轮询算法
ipvsadm -A -t 192.168.1.100:80 -s rr
#修改虚拟服务的算法为加权轮询
ipvsadm -E -t 192.168.1.100:80 -s wrr
#删除虚拟服务
ipvsadm -D -t 192.168.1.100:80
2.管理真实服务
#添加一个真实服务器192.168.1.123,使用DR模式,权重2
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.123 -g -w 2
#修改真实服务器的权重
ipvsadm -E -t 192.168.1.100:80 -r 192.168.1.123 -g -w 5
#删除真实服务器
ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.123
3.查看统计
#查看当前配置的虚拟服务和各个RS的权重
ipvsadm -Ln
#查看当前ipvs模块中记录的连接(可用于观察转发情况)
ipvsadm -lnc
#查看ipvs模块的转发情况统计
ipvsadm -Ln --stats | --rate
客户端(Win10):12.0.0.12
负载调度器(CentOS 7-1):内网关 ens33:192.168.126.11,外网关 ens32:12.0.0.1
Web节点服务器1(CentOS 7-2):192.168.126.12
Web节点服务器2(CentOS 7-3):192.168.126.13宿主机:Windows 10 专业工作站版本
VWware 16 Pro(16.1.0)
CentOS7
虚拟机网络适配器均为 NAT 模式
网卡配置均为静态获取
本地 YUM 源仓库
[root@xjj xjj]# systemctl stop firewalld.service
[root@xjj xjj]# systemctl disable firewalld.service
[root@xjj xjj]# setenforce 0
#安装nfs共享所需软件包及开启nfs功能
[root@xjj xjj]# yum install nfs-utils rpcbind -y
[root@xjj xjj]# systemctl start nfs.service
[root@xjj xjj]# systemctl start rpcbind.service
[root@xjj xjj]# systemctl enable nfs.service
[root@xjj xjj]# systemctl enable rpcbind.service
#给予共享文件最大权限
[root@xjj xjj]# mkdir /opt/xcf /opt/zxc
[root@xjj xjj]# chmod 777 /opt/xcf /opt/zxc
#给共享文件输出内容,以作网站首页内容
[root@xjj xjj]# cd /opt/xjj
[root@xjj xjj]# echo 'hello xjj' > index.html
[root@xjj xjj]# cd /opt/xcf
[root@xjj xcf]# echo 'hello xcf' > index.html
[root@xjj ~]# vim /etc/exports
/usr/share *(ro,sync)
/opt/xjj 192.168.126.0/24(rw,sync)
/opt/xcf 192.168.126.0/24(rw,sync)
[root@xjj ~]# exportfs -rv
exporting 192.168.126.0/24:/opt/xjj
exporting 192.168.126.0/24:/opt/xcf
exporting *:/usr/share
[root@xjj ~]# showmount -e
Export list for xjj:
/usr/share *
/opt/xcf 192.168.126.0/24
/opt/xjj 192.168.126.0/24
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@localhost ~]# yum -y install nfs-utils.x86_64 rpcbind
[root@localhost ~]# systemctl start nfs.service
[root@localhost ~]# systemctl enable nfs.service
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@localhost ~]# systemctl start rpcbind.service
[root@localhost ~]# systemctl enable rpcbind.service
[root@localhost ~]# showmount -e 192.168.126.14
Export list for 192.168.126.14:
/usr/share *
/opt/xcf 192.168.126.0/24
/opt/xjj 192.168.126.0/24
[root@localhost ~]# mount 192.168.126.14:/opt/xjj /var/www/html/
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
index.html
[root@localhost html]# cat index.html
hello xjj
[root@localhost html]# vim /etc/fstab
192.168.126.14:/opt/xjj /var/www/html nfs defaults,_netdev 0 0
[root@localhost html]# mount -a
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
#添加一块网卡后开机
ifconfig ens36 12.0.0.1/24
①配置SNAT转发规则
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
#先清空iptables规则
iptables -t nat -F
iptables -F
iptables -t nat -A POSTROUTING -s 192.168.126.0/24 -o ens32 -j SNAT --to-source 12.0.0.1
②加载LVS内核模块
#加载ip_vs模块
modprobe ip_vs
#查看ip_vs版本信息
cat /proc/net/ip_vs
③安装ipvsadm管理工具
yum install -y ipvsadm
#启动服务前须保存负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
或
ipvsadm --save > /etc/sysconfig/ipvsadm
[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl start ipvsadm.service
④配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
#清除原有策略
[root@localhost ~]# ipvsadm -C
[root@localhost ~]# ipvsadm -A -t 12.0.0.1:80 -s rr
[root@localhost ~]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.126.12:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 12.0.0.1:80 -r 192.168.126.13:80 -m -w 1
#启用策略
[root@localhost ~]# 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.126.12:http Masq 1 0 0
-> 192.168.126.13:http Masq 1 0 0
#查看节点状态,Masq代表 NAT模式
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 12.0.0.1:80 rr
-> 192.168.126.12:80 Masq 1 0 0
-> 192.168.126.13:80 Masq 1 0 0
#保存策略
[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
补充
两台负载均衡的主机,记得把网关都指向调度器的网关
#删除群集中某一节点服务器
ipvsadm -d -t 12.0.0.1:80 -r 192.168.126.12:80 -m [-w 1]
#删除整个虚拟服务器
ipvsadm -D -t 12.0.0.1:80
#停止服务(清除策略)
systemctl stop ipvsadm
#启动服务(重建规则)
systemctl start ipvsadm
#恢复LVS 策略
ipvsadm-restore < /etc/sysconfig/ipvsadm
#时间同步
[root@localhost ~]# ntpdate ntp1.aliyun.com
19 Oct 16:03:43 ntpdate[68619]: adjust time server 120.25.115.20 offset -0.000822 sec
LVS四层的负载均衡服务
①LVS模式
NAT DR TUN
②分流算法
RR WRR LC WLC
③集群的分类
负载均衡集群、高可用集群、高性能运算集群
LVS负载均衡的三种模式,NAT,DR,TUN隧道
在我们公司里,我们经常会用DR模式,由于TUN费用比较高,所以我们会很少选择TUN,NAT模式中,由于接收和应答,路由都在lvs上,所以压力比较大,管理难度比较大,所以我们选择了DR模式
其次我们在使用DR模式的时候,我们可以隐藏自己的ip地址,这点也非常优于NAT的,在结合最后我们DR和Keepalive结合使用,增加了我们使用的安全和高可用的性能