LVS负载均衡集群——NAT模式

一.LVS是什么

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。

二.LVS的作用

LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。
它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
另外可扩展性也非常好。

 

因为lvs工作在网络层,所以相对于其他的负载均衡的解决办法(DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的)

LVS的通过控制IP来实现负载均衡。IPVS是其具体的实现模块。

三.LVS常见的负载调度算法

轮询调度RR:

  将外部请求按照顺序轮流分配到真实的服务器上

加权轮询WRR:

  根据真实服务器的不同处理能力来调度访问请求

最少链接数LC:

调度器通过最少连接调度算法动态的将网络请求调度到以建立的连接数最少的服务器上

(两台服务器配置差不多时使用)

加权最少连接WLC:

  优化负载的性能,较高权重的服务器将承受较大比例的活动连接负载

  (两台服务器 有一台比较弱时 可以使用)

基于局部性的最少连接 LBLC:

  针对目标的IP地址的负载均衡,应用于cache集群上。会根据请求的目标IP地址找出该目标IP地址最近使用的服务器,如果该服务器是可用的没有超载,则将请求发送到服务器上,若服务器不存在,或服务器处于一半的工作负载,则用最少连接数选出一个服务器

带复制的基于局部性的最少连接(locality-Based Least Connections with Replication)

也是针对目标IP地址的负载均衡,用于cache集群。它与LBLC算法不同之处是它要维护的是从一个目标IP地址到一组服务器的映射,而LBLC算法维护的是从一个目标IP地址到一台服务器的映射。

目标地址散列(Destination IP Hashing)
    目标地址散列调度算法根据请求的目标IP地址,作为散列键(Hash KEY)从静态分配的散列表中找出对应的服务器,若服务器是可用的且未超载,则请求发送到该服务器,否则返回空。

源地址散列

  根据请求的源IP地址,作为散列键从静态分配的散列表中找出对应的服务器,若服务器是可用的且未超载,则请求发送到该服务器,否则返回空。

源IP端口散列  

   通过hash函数将来自用一个源IP地址和源端口号的请求映射到后端同一台服务器上。

   (适合按服务的类型分类)

随机

  随机地将请求分发到不同的服务器上

  典型的负载均衡集群中,包括三层次的组件,前端至少一个负载均衡调度器(LB)负责相应并发来自客户端的访问请求;后端有大量真实服务器构成服务池(server pool)提供实际的应用服务

透明性 一致性和伸缩性

第一层:

负载调度器,这是访问整个集群系统唯一入口,对外使用所有服务器共有VIP,也称为集群IP,通常会配置主备两台调度器实现热备份。

第二层:

   服务器池,集群符提供的应用服务,由服务器池承担。每个节点具有独立的真实IP,只处理调度器分发过来的客户机请求。当某个节点失效时,负载调度器的容错机制会将它隔离,等排出错误后,在从新纳入服务器池

第三层:

  共享存储,为服务池中的所有节点提供稳定的,一致的文件存取服务,保证整个集群的统一性

工作模式: 调度技术可以基于IP、端口、内容进行分发。基于IP的效率最高。常见的有三种,地址转换、IP隧道和直接路由。

四.ipvsadm工具


 

五.LVS-NAT实验

NFS服务器192.168.100.10

关闭防火墙并下载NFS服务

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
cd /opt/
mkdir nfs
cd nfs
mkdir aa  bb            创建新目录
ls
aa  bb
echo "this is aa" >aa/index.html            创建站点文件
echo "this is bb" >bb/index.html

给文件权限

设置共享策略 

vim /etc/exports

/opt/nfs/aa 192.168.100.0/24(rw,sync,no_root_squash)
/opt/nfs/bb 192.168.100.0/24(rw,sync,no_root_squash)

 开启服务发布共享

systemctl start rpcbind
systemctl start nfs
showmount -e

 web1服务器192.168.100.20

关闭防火墙

systemctl stop firewalld.service
setenforce 0

查询刚才设置的NFS服务器192.168.100.10

showmount -e 192.168.100.10

 安装Apache服务

yum install httpd -y

mount 192.168.100.10:/opt/nfs/aa /var/www/html/  挂载

[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
index.html
[root@localhost html]# cat index.html 
this is aa

 重启Apache并查看ip地址

[root@localhost html]# systemctl restart httpd.service

网关配置 

[root@localhost html]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

IPADDR=192.168.100.20
NETMASK=255.255.255.0
GATEWAY=192.168.100.40

[root@localhost html]# systemctl restart network

web2服务器 192.168.100.30

关闭防火墙

systemctl stop firewalld.service
setenforce 0
[root@localhost ~]# showmount -e 192.168.100.10
Export list for 192.168.100.10:
/opt/nfs/bb 192.168.100.0/24
/opt/nfs/aa 192.168.100.0/24

和web1一样安装Apache

yum install httpd -y
[root@localhost ~]# mount 192.168.100.10:/opt/nfs/bb /var/www/html/
[root@localhost ~]# df -h
文件系统                    容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root      20G  3.6G   17G   18% /
devtmpfs                    897M     0  897M    0% /dev
tmpfs                       912M     0  912M    0% /dev/shm
tmpfs                       912M  9.1M  903M    1% /run
tmpfs                       912M     0  912M    0% /sys/fs/cgroup
/dev/sda1                   5.0G  179M  4.9G    4% /boot
tmpfs                       183M  8.0K  183M    1% /run/user/42
tmpfs                       183M   24K  183M    1% /run/user/0
/dev/sr0                    4.3G  4.3G     0  100% /mnt/cdrom
192.168.100.10:/opt/nfs/bb   20G   14G  6.8G   67% /var/www/html
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# ls
index.html
[root@localhost html]# cat index.html 
this is bb

重启Apache并查看ip地址

[root@localhost html]# systemctl restart httpd.service

 网关配置

vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.100.30
NETMASK=255.255.255.0
GATEWAY=192.168.100.40
systemctl restart network

调度服务器192.168.100.40

关闭防火墙

[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0

下载ipvsadm

yum install ipvsadm.x86_64 -y

添加网卡为NAT模式

 修改网络配置

[root@localhost ~]# vim /etc/sysconfig/network-scripts/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=85cbd491-2694-4d8e-85ed-17d330c9c5fa
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.40
#NETMASK=255.255.255.0               网关和DNF删掉或注释掉
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens36

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
#UUID=85cbd491-2694-4d8e-85ed-17d330c9c5fa   这里注释掉UUID
DEVICE=ens36
ONBOOT=yes
IPADDR=12.0.0.1
#NETMASK=255.255.255.0
#GATEWAY=12.0.0.2                             同样网关和DNS也注释掉   

重启一下网卡  查看网卡信息

[root@localhost ~]# systemctl restart network
[root@localhost ~]# ifconfig 
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.40  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::e89:2652:a28a:1391  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:da:12:c1  txqueuelen 1000  (Ethernet)
        RX packets 915  bytes 130373 (127.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 123  bytes 18646 (18.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens36: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 12.0.0.1  netmask 255.0.0.0  broadcast 12.255.255.255
        inet6 fe80::1364:2076:640:37ab  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:da:12:cb  txqueuelen 1000  (Ethernet)
        RX packets 124  bytes 14032 (13.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 113  bytes 14645 (14.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

开启路由转发

[root@localhost ~]# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1   #添加

 防火墙策略

[root@localhost ~]# iptables -nL    #查看规则
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
[root@localhost ~]# iptables -F     #清空规则
[root@localhost ~]# iptables -nL -t nat   #查看规则
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens36 -j SNAT --to 12.0.0.1   #添加ens36出站网卡和12.0.0.1外网网卡
[root@localhost ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  192.168.100.0/24     0.0.0.0/0            to:12.0.0.1

 加载ip_vs模块,安装ipvsadm工具

[root@localhost network-scripts]# modprobe ip_vs
[root@localhost network-scripts]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port Forward Weight ActiveConn InActCon

开启ipvsadm服务

使用客户机测试

客户机网关设置为网关服务器的外网网卡,使用浏览器搜索

 稍等再刷新一下

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值