一、LB集群原理

1、实现手段

     硬件:F5负载均衡器

     软件:LVS(4层,网络层),Nginx(7层,应用层)

2、负载均衡架构图

centos 7.3 LVS的NAT模式负载均衡实操_lvs

说明:

LVS集群使用三层架构

第一层:负载均衡层(Load Balancer)

位于整个集群系统的最前端,由一台或多台负载调度器(Director Server,以下简称dir)组成。

dir的作用类似一个路由器,它含有为完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给服务器群组层的应用服务器(Real Server)

ps:客户认为服务是来自一个虚拟IP地址上

 

第二层:服务器群组层(Server Arrary)

由一组实际运行应用服务的机器组成。Real Server(以下简称rs)可以是Web服务器、Mail服务器、FTP服务器、DNS服务器等

 

第三层:共享存储层(Shared Storage)

是为所有rs提供共享存储空间和内容一致性的存储区域,一般由磁盘阵列设备组成。

一般可以通过NFS网络文件系统共享数据(在繁忙的业务系统中,性能并不太好),此时可以用集群文件系统,如 Red Hat 的 GFS 文件系统,Oracle 提供的 OCFS2 文件系统等

 

3、LVS分3种模式

(a)NAT(网络地址映射):通过网络地址转换的方法来实现调度 

     优点:支持所有操作系统及私有网络,且只需一个公网 IP 地址

     缺点:用户请求和响应报文都必须经过dr地址重写,当用户请求越来越多时,调度器的处理能力将成为瓶颈。

 

(b)DR(直接路由模式):通过改写请求报文的MAC地址,将请求发送到 rs,而 rs 将响应直接返回给客户 ——》 性能最好

 

(c)TUN(IP隧道模式):dr采用IP隧道技术将用户请求转发到某个rs,而这个rs将直接响应用户请求,不再经过dr ——》dr只处理用户的报文请求,从而使集群系统吞吐量大大提高

ps:还有第 4 种模式 FULLNAT(淘宝ospf+lvs)


二、主机环境 

服务器主机: 

系统版本:centos7.3

master:192.168.0.134 

slave:192.168.0.140

分发器

内网IP:192.168.0.139

外网ip:192.168.56.128

1、分发器 director 配置

  —— 网络配置前期工作

(a)配置网络环境,增加网卡ens37(需要添加HWADDR不同的网卡,两个网卡模式分别要属于不同的链接模式分别为桥接和NAT)

centos 7.3 LVS的NAT模式负载均衡实操_nginx_02

(b)生成ens37配置文件,配置VIP 地址为 192.168.56.128

    cp /etc/sysconfig/network-scripts/ifcfg-ens33  /etc/sysconfig/network-scripts/ifcfg-ens37

  (i)DEVICE=ens37

    (ii)IPADDR=192.168.56.128(vip)

    (iii)GATEWAY=192.168.0.1

(c)重启网络服务:service network restart

  内网ip:192.168.0.139

  外网ip:192.168.56.128

物理机可以ping通VIP

centos 7.3 LVS的NAT模式负载均衡实操_ nat _03

—— 开启路由转发功能,安装配置LVS-NAT

1、安装lvs核心软件包 yum install -y ipvsadm

2、写脚本管理(开启路由转发、添加虚拟服务、添加虚拟服务后端的real server)

vim /usr/local/sbin/lvs_nat.sh

#!/bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects

echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects

iptables -t nat -F

iptables -t nat -X

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

IPVSADM='/sbin/ipvsadm'

$IPVSADM -C

$IPVSADM -A -t 192.168.56.128:80 -s rr

$IPVSADM -a -t 192.168.56.128:80 -r 192.168.0.134:80 -m -w 1

$IPVSADM -a -t 192.168.56.128:80 -r 192.168.0.140:80 -m -w 1

参数说明:

-A:增加一个虚拟服务   

-a:增加real server

-r:指定real server 的 IP地址

-t:表示TCP服务       

-s:指定调度算法   rr:轮询算法(对调度算法感兴趣的大家可以查查~)

-m(masquerade):也就是NAT方式的LVS

3、执行脚本 sh !$

4、查看规则 ipvsadm -ln  

[root@www ~]#  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.56.128:80 rr

 -> 192.168.0.134:80             Masq    1      0          0        

 -> 192.168.0.140:80             Masq    1      0          0    

二、真实服务器real server配置

master: 192.168.0.134

slave: 192.168.0.140

master和slave都要修改网卡配置文件:  /etc/sysconfig/network-scripts/ifcfg-ens33

然后重启网络:systemctl restart network

1、网关GATEWAY都要指向分发器 dir 的内网 IP192.168.56.128

centos 7.3 LVS的NAT模式负载均衡实操_lvs_04

三、测试

1、修改nginx的默认页面(好区分)

master:echo "this is master server" > /usr/share/nginx/html/index.html

slave:echo "this is slave server"  > /usr/share/nginx/html/index.html

[root@www ~]# curl 192.168.56.128

this is master server

[root@www ~]# curl 192.168.56.128

this is slave server

[root@www ~]# curl 192.168.56.128

this is master server

[root@www ~]# curl 192.168.56.128

this is slave server

[root@www ~]# curl 192.168.56.128

this is master server

[root@www ~]# curl 192.168.56.128

this is slave server

2、real server(master,slave)开启 nginx 服务:/etc/init.d/nginx start

(httpd也可以:yum install httpd)

其实就是开启80端口的web服务(记得查下 netstat查看是否监听80端口)

注意:分发器 dir 并没有监听 80 端口

     因为 dir 是一个路由器,只负责转发 80 端口上的数据给后端,自己并不处理请求

拓展:

ipvsadm -ln --stats  ==>  查看分发情况

ipvsadm -ln --rate  ==>   查看速率

ipvsadm -C  ==> 清空规则 

 

ps:如果curl无法成功,检查下防火墙是否关了(iptables -F;setenforce 0)