LVS负载均衡群集 ---- NAT模式
一:群集的含义
1、由多台主机构成,但对外只表现为一个整体
2、在互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器力不从心
-
解决方法:
-
使用价格昂贵的小型机、大型机
-
使用普通服务器构建服务群集
二:群集的分类
以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB) 的整体性能;
LB的负载分配依赖于主节点的分流算法 。
以提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA) 的容错效果;
HA的工作方式包括双工和主从两种模式 。
以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC) 能力 ;
高性能运算群集的高性能依赖于"分布式运算”、"并行计算” ,通过
专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力 。
三:负载均衡群集工作模式
-
负载均衡群集是目前企业用的最多的群集类型
-
群集的负载调度技术的三种模式
-
地址转换 ( NAT 模式)
-
IP隧道 (TUN 模式)
-
直接路由 (DR 模式)
四:负载均衡群集结构
第一层:负载调度器
- 只负责响应客户端的请求,并将请求通过负载调度算法分发给服务器池中的服务器,是访问整个群集的唯一入口,对外使用公有的vip (Virtual IP,虚拟IP) 地址,也称为群集IP地址
第二层:服务器池
- 用于为客户端提供实际的应用服务,每个真实服务器(服务器池中的服务器称为真实服务器或节点服务器)具有独立的RIP (真实IP) ,只处理调度器分发过来的客户请求
第三层:共享存储
- 为服务器池中的所有节点提供稳定、一致的文件存取服务,用于保证群集文件的一致性(就是使即使访问的不是同一个节点服务器但看到的内容是一样的
五:LVS的负载调度算法
-
##### 轮询 (Round Robin )
-
将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载
-
##### 加权轮询(Weighted Round Robin)
-
根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整其权重
-
保证处理能力强的服务器承担更多的访问流量
-
##### 最少连接 (Least Connections)
-
根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分
配给连接数最少的节点 -
##### 加权最少连接(Weighted Least Connections)
-
在服务器节点的性能差异较大的情况下,可以为真实服务器自动调整权重
-
权重较高的节点将承担更大比例的活动连接负载
六:LVS负载均衡机制
- LVS 是四层负载均衡,即建立在 OSI 模型的第四层(传输层之上),传输层上有TCP/UDP,LVS 支持 TCP/UDP 的负载均衡。
- 因为 LVS 是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如 DNS 域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。
七:实验案例
1、实验拓扑图
2、实验环境
1台centos7作为LVS 网关 (添加一块网卡)
2台centos7作为web服务器 (web1 、web2)
1台centos7作为NFS 共享存储服务 (添加2块硬盘)
1台win7作为客户端
3、实验目的
win7 客户机访问12.0.0.1 网址,通过nat地址转换,轮询的访问web1 和web2 主机 ;
搭建出NFS网络文件存储服务 。
4、实验过程
(1)在 NFS存储服务器中需加入两块硬盘,添加好后需重启 。 可输入命令 ls /dev/ 查看是否添加成功
对两块硬盘进行分区 、格式化 :
[root@nfs ~]# fdisk /dev/sdb ‘对磁盘sdb的分区’
[root@nfs ~]# mkfs.xfs /dev/sdb1 ‘格式化’
[root@nfs ~]# fdisk /dev/sdc ‘对磁盘sdc的分区’
[root@nfs ~]# mkfs.xfs /dev/sdc1
(2)创建目录作为挂载点 ,并挂载
[root@nfs ~]# mkdir /opt/kg /opt/ac
[root@nfs ~]# vim /etc/fstab ‘添加自动挂载的设置’
‘添加2行内容’
/dev/sdb1 /opt/kg xfs defaults 0 0
/dev/sdc1 /opt/ac xfs defaults 0 0
[root@nfs ~]# mount -a
[root@nfs ~]# df -hT
(3)关闭防火墙,查看NFS相关软件是否存在
[root@nfs ~]# systemctl stop firewalld.service
[root@nfs ~]# setenforce 0
[root@nfs ~]# rpm -q nfs-utils ‘已安装nfs组件’
nfs-utils-1.3.0-0.48.el7.x86_64
[root@nfs ~]# rpm -q rpcbind
rpcbind-0.2.0-42.el7.x86_64 ‘已安装远端过程调用组件’
(4)设置规则,编辑共享配置文件
[root@nfs ~]# vim /etc/exports
‘192.168.100.0 共享可访问的地址’
/opt/kg 192.168.100.0/24(rw,sync,no_root_squash)
/opt/ac 192.168.100.0/24(rw,sync,no_root_squash)
(5)开启服务,并查看nfs共享配置文件
[root@nfs ~]# systemctl start nfs
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# showmount -e
Export list for nfs:
/opt/ac 192.168.100.0/24
/opt/kg 192.168.100.0/24
(6)把网卡改为仅主机模式,修改IP地址
[root@nfs ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 ‘修改IP地址’
[root@nfs ~]# service network restart ‘重启网络服务’
Restarting network (via systemctl): [ 确定 ]
[root@nfs ~]# ifconfig ‘查看IP地址’
(两台服务器配置相同)
(1)安装apache服务 ,关闭防火墙
[root@web1 ~]# yum install httpd -y
[root@web1 ~]# systemctl stop firewalld.service
[root@web1 ~]# setenforce 0
(2)设置网卡为仅主机模式,并修改IP地址
[root@web1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@web1 ~]# service network restart
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@web2 ~]# service network restart
(3)验证NFS服务没有问题
[root@web1 ~]# showmount -e 192.168.100.120
Export list for 192.168.100.120:
/opt/ac 192.168.100.0/24
/opt/kg 192.168.100.0/24 ‘两台服务器都需验证’
(4)自动挂载NFS共享目录到本地
[root@web1 ~]# vim /etc/fstab
‘末尾添加挂载设置’
192.168.100.120:/opt/kg /var/www/html nfs defaults,_netdev 0 0
[root@web2 ~]# vim /etc/fstab
192.168.100.120:/opt/ac /var/www/html nfs defaults,_netdev 0 0
[root@web1 ~]# mount -a '使挂载文件生效'
[root@web1 ~]# df -hT ‘查看挂载’
(5)进首页,分别给两个web服务器 写首页文件
[root@web1 ~]# cd /var/www/html/
[root@web1 html]# vim index.html
‘添加web1首页内容’
<h1>this is kg web</h1>
[root@web1 html]# systemctl start httpd ‘开启服务’
[root@web1 html]# netstat -ntap | grep 80
tcp6 0 0 :::80 :::* LISTEN 6765/httpd
[root@web2 ~]# cd /var/www/html/
[root@web2 html]# vim index.html
‘添加web2首页内容’
<h1>this is ac web</h1>
[root@web2 html]# systemctl start httpd ‘开启服务’
[root@web2 html]# netstat -ntap | grep 80
tcp6 0 0 :::80 :::* LISTEN 4815/httpd
配置LVS负载均衡
(1)安装ipvsadm 服务
[root@lvs ~]# yum install ipvsadm -y
(2)添加1块网卡,都设置成主机模式
(3)修改IP地址
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36 ‘复制一份作为另一个网卡ens36’
[root@lvs network-scripts]# ls
ifcfg-ens33 ifdown-post ifup-eth ifup-sit
ifcfg-ens36 ......
[root@lvs network-scripts]# vim ifcfg-ens33
[root@lvs network-scripts]# vim ifcfg-ens36
[root@lvs network-scripts]# service network restart
(4)在web服务器中验证
(5)开启路由转发功能,设置防火墙规则
[root@lvs network-scripts]# vim /etc/sysctl.conf
‘添加到末尾’
net.ipv4.ip_forward=1 ‘启动路由转化功能’
[root@lvs ~]# sysctl -p ‘启动’
[root@lvs network-scripts]# iptables -F ‘情况转发表’
[root@lvs network-scripts]# iptables -t nat -F ‘清空nat地址转换表’
[root@lvs network-scripts]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.100.0/24 -j SNAT --to-source 12.0.0.1 ‘添加地址转换规则’
(6)加载模块,开启ipvsadm 服务
[root@lvs ~]# cd /etc/sysconfig/network-scripts/
[root@lvs network-scripts]# modprobe ip_vs ‘加载’
[root@lvs network-scripts]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@lvs network-scripts]# systemctl start ipvsadm
(7)添加脚本设置LVS规则,加权限执行
[root@lvs network-scripts]# cd /opt/
[root@lvs opt]# vim nat.sh
‘添加脚本 ,采用轮询算法访问两个网站’
#! /bin/bash
ipvsadm -C
ipvsadm -A -t 12.0.0.1:80 -s rr ‘轮询’
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.110:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.100.111:80 -m ‘映射web两台服务器’
ipvsadm
[root@lvs opt]# chmod +x nat.sh ‘给nat.sh脚本权限’
[root@lvs opt]# ./nat.sh ‘执行脚本’
(8)在win10 中验证
外网客户机通过访问外网的网关直接映射到内网的web界面,内网的web采用轮询的方式显示出来,即一次显示web1界面,一次显示web2界面,可以有效的缓解web服务器的压力 。(访问期间若没有变动,可清空缓存)