一、LB集群原理
1、实现手段
硬件:F5负载均衡器
软件:LVS(4层,网络层),Nginx(7层,应用层)
2、负载均衡架构图
说明:
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)
(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
—— 开启路由转发功能,安装配置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 的内网 IP(192.168.56.128)
三、测试
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)