LVS-NAT负载均衡群集部署的原理、模式分析及工作模式介绍
下文给大家带来LVS-NAT负载均衡群集部署的原理、模式分析及工作模式介绍,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用创新互联在行业内累计的经验来做一个解答。
创新互联公司从2013年创立,是专业互联网技术服务公司,拥有项目成都网站设计、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元夹江做网站,已为上家服务,为夹江各地企业和个人服务,联系电话:18982081108
LVS简介
LVS(Linux Virtual Server)即Linux虚拟云服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户,LVS工作模式分为NAT模式、TUN模式、以及DR模式。
了解负载均衡群集的原理
群集的含义
**Cluster,集群,群集**
由多台主机构成,但对外只表现为一个整体
在互联网应用中,随着站点对硬件性能,响应速度,服务稳定性,数据可靠性等要求越来越高,单台服务器力不从心
** 解决方法**
使用价格昂贵的小型机,大型机
使用普通服务器构建服务群集
群集的分类
根据群集所针对的目标差异,可分为三种类型
负载均衡群集
高性能运算群集
**负载均衡群集(Load,Balance Cluster)**
以提高应用系统的响应能力,尽可能处理更多的访问请求,减少延迟为目标,获得高并发,高负载LB的整体性能
LB的负载分配依赖主节点的分流算法
**高可用群集**
以提高应用系统的可靠性,尽可能地减少中断时间为目标,确保服务的连续性达到高可用
HA的容错效果
HA的工作方式包括双工和主从模式
**高性能运算群集**
以提高应用系统的CPU运算速度,扩展硬件资源和分析能力为目标,获得相当于大型,超级计算机的高性能运算HPC能力
高性能运算群集的高性能依赖于分布式运算,并行计算,通过专用硬件和软件将多个服务器的CPU,内存等资源整合在一起,实现只有,大型,超级计算机才具备的计算能力
负载均衡群集工作模式分析和工作模式
负载均衡群集是目前企业用的最多的群集类型
群集的负载调度技术有三种工作模式
**地址转换**
**IP隧道**
**直接路由**
NAT模式 (Network Address Translation)
**简称NAT模式**,类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
服务器节点使用私有IP地址,与负载调度器位于铜一个物理网络,安全性要优于其他两种方式
TUN模式(IP Tunnel)
**简称TUM模式**,采用开放式的网络结构,负载调度器仅作为客户机的访问入口,各节点通过各自的网络连接直接回应客户机,而不再经过负载调度器
服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用IP隧道与负载调度器相互通信。所有环境都是公网环境
DR模式 (Direct Routing)
直接路由
**简称DR模式**,采用半开放式的网络结构,与TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络
负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道
在局域网中
LVS的负载调度算法
**轮询 (Round Robin)**
将收到的访问请求安装顺序轮流分配给群集中的个节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载
**加权轮询 (Weighted Round Robin**)
根据真实服务器的处理能力轮流分配收到的访问请求,调度器可以自动查询各节点的负载情况,并动态调整其权重
保证处理能力强的服务器承担更多的访问流量
**最少连接 (Least Connections)**
根据真实服务器已建立的连接输进行分配,将收到的访问请求优先分配给连接数最少的节点
**加权最少连接 (Weighted Least Connections)**
在服务器节点的性能差异较大情况下,可以为真实服务器自动调整
权重
权重较高的节点将承担更大比例活动连接负载
下面我们来做实验
实验结构:
我们需要五台虚拟机
1 作为负载均衡调度器 外网地址:12.0.0.1 内网:192.168.200.1
4 网站服务器apache 节点:192.168.200.110
5 网站服务器 节点: 192.168.200.120
6 nfs共享存储 节点:192.168.200.130
7 客户端 12.0.0.12
先到6安装ngs和远程调用包
[root@localhost ~]# yum install nfs-utils rpcbind -y
4,5安装web服务
[root@localhost ~]# yum install httpd -y
1安装LVS负载均衡调度器
[root@localhost ~]# yum install ipvsadm -y
配置6nfs服务器
仅主机模式我们服务器都要在一个局域网
配置固定IP
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 #配置ens33网卡
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=66a1e3d6-5c57-42ab-9996-b942b049ef85
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.130 #IP地址
NETMASK=255.255.255.0 #子网掩码
GATEWAY=192.168.200.1 #网关
开启服务
[root@localhost ~]# systemctl stop firewalld.service
s[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start nfs.service
[root@localhost ~]# systemctl status nfs.service
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: active (exited) since 二 2019-11-26 1
[root@localhost ~]# systemctl start rpcbind.service
[root@localhost ~]# systemctl status rpcbind.service
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service
配置共享目录,给777权限
[root@localhost ~]# vim /etc/exports
/usr/share *(ro,sync) #只读,同步 所有服务器都可以去访问
/opt/accp 192.168.200.0/24(rw,sync) #共享给200段可以访问,可读,可写,同步
/opt/benet 192.168.200.0/24(rw,sync)
[root@localhost ~]# cd /opt/
[root@localhost opt]# mkdir benet accp
[root@localhost opt]# chmod 777 accp/ benet/ #给可读可写可执行
[root@localhost opt]# ls -l
总用量 0
drwxrwxrwx. 2 root root 6 11月 26 17:13 accp
drwxrwxrwx. 2 root root 6 11月 26 17:13 benet
drwxr-xr-x. 2 root root 6 3月 26 2015 rh
发布共享
[root@localhost opt]# exportfs -rv
exporting 192.168.200.0/24:/opt/benet
exporting 192.168.200.0/24:/opt/accp
exporting *:/usr/share
4,web服务器仅主机模式,配置固定IP
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
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=c3f0a196-6819-4702-9b54-7cad18402591
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.110
NETMASK=255.255.255.0
GATEWAY=192.168.200.1
开启服务,去测试能不能与6nfs服务器联通
[root@localhost ~]# systemctl restart network
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl start httpd.service
[root@localhost ~]# netstat -ntap | grep 80
tcp6 0 0 :::80 :::* LISTEN 100863/httpd
[root@localhost ~]# ping 192.168.200.130
PING 192.168.200.130 (192.168.200.130) 56(84) bytes of data.
64 bytes from 192.168.200.130: icmp_seq=1 ttl=64 time=0.724 ms
64 bytes from 192.168.200.130: icmp_seq=2 ttl=64 time=0.356 ms
挂载,写一个文件在web4,测试6nfs服务器有没有存储这个文件
[root@localhost ~]# showmount -e 192.168.200.130 #测试6服务器的共享目录
Export list for 192.168.200.130:
/usr/share *
/opt/benet 192.168.200.0/24
/opt/accp 192.168.200.0/24
[root@localhost ~]# mount.nfs 192.168.200.130:/opt/accp /var/www/html/ #挂载
[root@localhost ~]# df -h
问件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 20G 3.4G 17G 17% /
devtmpfs 897M 0 897M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 9.6M 903M 2% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 6.0G 179M 5.9G 3% /boot
/dev/mapper/centos-home 10G 37M 10G 1% /home
tmpfs 183M 40K 183M 1% /run/user/0
tmpfs 183M 4.0K 183M 1% /run/user/42
192.168.200.130:/opt/accp 20G 3.8G 17G 19% /var/www/html
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo "THII IS ACCP WEB" > index.html
#6服务器去测试
[root@localhost opt]# cd accp/
[root@localhost accp]# ls
index.html
5web服务器也是同样的操作,仅主机模式,绑定固定IP
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
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=a6cf69fe-eb42-4a99-9239-0da4cdeae0c7
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.120
NATMASK=255.255.255.0
GATEWAT=192.168.200.1
[root@localhost ~]# systemctl restart network
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
挂载,写一个文件在web4,测试6nfs服务器有没有存储这个文件
[root@localhost ~]# mount.nfs 192.168.200.130:/opt/benet /var/www/html/
[root@localhost ~]# df -h
问件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 20G 4.3G 16G 22% /
devtmpfs 897M 0 897M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 9.5M 903M 2% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 6.0G 179M 5.9G 3% /boot
/dev/mapper/centos-home 10G 36M 10G 1% /home
tmpfs 183M 44K 183M 1% /run/user/0
192.168.200.130:/opt/benet 20G 3.8G 17G 19% /var/www/html
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# echo "this is benet web" > index.html
[root@localhost html]# systemctl start httpd.service
#6去测试
[root@localhost accp]# cd ../
[root@localhost opt]# cd benet/
[root@localhost benet]# ls
index.html
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=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=12.0.0.1
NETMASK=255.255.255.0
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=849aa04e-1874-490f-8cb0-b2fde4b9a6f8
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.200.1
NETMASK=255.255.255.0
[root@localhost ~]# systemctl restart network #重启网络服务
开启路由转发,NAT转换
vim /etc/sysctl.conf #修改配置文件
net.ipv4.ip_forward=1 #加一条
[root@localhost ~]# sysctl -p #生效路由转发
net.ipv4.ip_forward = 1
[root@localhost ~]# iptables -t nat -F #清除NAT表
[root@localhost ~]# iptables -F #清除转发表
[root@localhost ~]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.200.0/24 -j SNAT --to-source 12.0.0.1
#在nat表中-A在POSTROUTING列中-o指定出口-s指定源地址 -j做nat 转换成12.0.0.1
去7客户端绑定IP
去4web服务器去测试能不能与客户端联通
[root@localhost html]# ping 12.0.0.12
PING 12.0.0.12 (12.0.0.12) 56(84) bytes of data.
64 bytes from 12.0.0.12: icmp_seq=1 ttl=127 time=0.815 ms
64 bytes from 12.0.0.12: icmp_seq=2 ttl=127 time=0.752 ms
64 bytes from 12.0.0.12: icmp_seq=3 ttl=127 time=0.727 ms
64 bytes from 12.0.0.12: icmp_seq=4 ttl=127 time=0.712 ms
加载LVS内核模块
[root@localhost ~]# modprobe ip_vs
[root@localhost ~]# cat /proc/net/ip_vs #查看LVS内核版本
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
开启LVS内核
先保存
[root@localhost ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl start ipvsadm.service
[root@localhost ~]# systemctl status ipvsadm.service
● ipvsadm.service - Initialise the Linux Virtual Server
Loaded: loaded (/usr/lib/systemd/system/ipvsadm.service; disabled; vendor preset: disabled)
Active: active (exited) since 二 2019-11-26 17:59:41 CST; 9s ago
写LVS虚拟服务器脚本,启动脚本
[root@localhost ~]# cd /opt/
[root@localhost opt]# vim nat.sh
#!/bin/bash
ipvsadm -C #清除缓存
ipvsadm -A -t 12.0.0.1:80 -s rr #添加虚拟服务器,-A -t指定端口 -s指定算法轮询
ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.110:80 -m #-a -t指定端口 -r指定真实节点服务器 -m指定NAT
ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.120:80 -m
ipvsadm
[root@localhost opt]# source nat.sh #启动脚本
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.200.110:http Masq 1 0 0
-> 192.168.200.120:http Masq 1 0 0
NAT地址转换
[root@localhost opt]# iptables -F #清除转发表
[root@localhost opt]# iptables -t nat -F #清除转发表
[root@localhost opt]# iptables -t nat -A POSTROUTING -o ens36 -s 192.168.200.0/24 -j SNAT --to-source 12.0.0.1
#在nat表中-A在POSTROUTING列中-o指定出口-s指定源地址 -j做nat 转换成12.0.0.1
再去客户端测试一下能不能通过外网地址访问到web服务器的内容
看了以上关于LVS-NAT负载均衡群集部署的原理、模式分析及工作模式介绍,如果大家还有什么地方需要了解的可以在创新互联行业资讯里查找自己感兴趣的或者找我们的专业技术工程师解答的,创新互联技术工程师在行业内拥有十几年的经验了。
新闻名称:LVS-NAT负载均衡群集部署的原理、模式分析及工作模式介绍
当前网址:http://pwwzsj.com/article/ppcope.html