LVS-NAT搭建负载均衡(一)

一、 企业级调度器LVS(Linux Virtual Server)

  • 集群概念
  • LVS模型
  • LVS调度算法
  • LVS实现

1.1 集群和分布式

系统性能扩展方式:

  • Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务
  • Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题

1.2 集群 Cluster

  • LB: Load Balancing,一定高可用能力,但不是高可用集群,是以提高服务的并发处理能力为根本着眼点

  • HA:High Availiablity,高可用集群(增加服务可用性),高可用集群,是以提升服务的始终在线能力为着眼点,不会因为宕机而导致服务不能用

  • SLA:服务等级协议(简称: SLA,全称: service level agreement)。是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。

1= 365= 8760小时
99.9 = 8760 * 0.1% = 8760 * 0.001 = 8.76小时
99.99 = 876 * 0.0001 = 0.876小时 = 0.876 * 60 = 52.6分钟
99.999 = 8760 * 0.00001 = 0.0876小时 = 0.0876 * 60 = 5.26分钟

停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间。

  • HPC:Hgih-performance computing,高性能 超级计算机

1.3 LB Cluster 负载均衡集群

  • 以提高应用系统的响应能力、尽可能处理更多的访问请求、减少延迟为目标,获得高并发、高负载(LB)的整体性能
  • LB的负载分配依赖于主节点的分流算法
1.3.1 按实现方式划分
  • 硬件
    • F5 Big-IP
    • Citrix Netscaler
    • A10 A10
  • 软件
    • lvs:linux virtual server,阿里四层SLB(Server Load Balance)使用
    • nginx:支持七层调度,阿里七层SLB使用Tengine
    • haproxy:支持七层调度
1.3.2 基于工作的协议层次划分
  • 传输层(通用): DNAT和DPORT

    • LVS:

    • nginx: stream

    • haproxy: mode tcp

  • 应用层(专用):针对特定协议,常称为proxy server
    http: nginx, httpd, haproxy(mode http), …

    • fastcgi: nginx,httpd, …

    • mysql: mysql-proxy,…

1.3.3 负载均衡的会话保持

  • session sticky:同一用户调度固定服务器Source lP: LVS sh算法(对某一特定服务而言)Cookie
  • session replication:每台服务器拥有全部session(session multicast cluster)
  • session server:专门的session服务器(Memcached,Redis)

1.4 HA Cluster 高可用集群实现

  • 以提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果HA的工作方式包括双工和主从两种模式
    • keepalived: vrrp协议
    • Ais :应用接口规范 heartbeat
    • ​ cman+rgmanager(RHCS)
    • ​ coresync_pacemaker

1.5 HPC Cluster 高性能运算群集

  • 以提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
  • 高性能运算群集的高性能依赖于“分布式运算”、“并行计算”,通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力

二 、Linux Virtual Server简介

2.1 LVS介绍

  • LVS是Linux Virtual Server,linux虚拟服务器,是一个虚拟的服务器集群系统
  • LVS工作在一台Server上提供Directory(负载均衡器)的功能,本身不提供服务,只是把特定的请求转发给对应的real server(真正提供服务的主机,)从而实现集群环境中的负载均衡

2.2 NAT转发模式(NAT Network Address Translation,网络地址转换)

工作原理

  • 客户端将请求发往前端的负载均衡服务器,请求报文源地址是CIP(客户端),后面统称为CIP,目标地址为VIP(负载均衡前端地址,后面统称为VIP)
  • 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去
  • 报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS
  • 然后LVS将报文源地址改为本机并发送给客户端

注意:在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端

2.3 优缺点

  • 优点:节约IP地址,网络隔离更安全

  • 缺点:LVS很可能成为系统性能瓶颈,所有的请求都需要应答

三 、LVS+NAT实战

3.1 实验环境

使用五台主机      CentOS Linux release 8.3.2011
Client:          桥接本地      192.168.2.181
LVS:             桥接本地      192.168.2.151
                 VMnet2       192.168.1.151
Web1:            VMnet2       192.168.1.161
Web2:           VMnet2       192.168.1.162
Web2:           VMnet2       192.168.1.163

3.2 实验步骤

3.2.1 web配置网站和路由
[root@localhost ~]# yum install nginx -y
[root@localhost ~]# systemctl enable nginx --now && systemctl stop firewalld
[root@localhost ~]# cat /etc/selinux/config 
SELINUX=disabled
[root@localhost ~]# nmcli con mo ens33 ipv4.gateway 192.168.1.151 && nmcli con up ens33
[root@localhost ~]# echo "192.168.1.161" > /usr/share/nginx/html/index.html 
3.2.2 LVS-NAT配置路由功能和负载策略

这里注意,启动服务之前需要保存负载配置,不然启动会报错,查看日志可以看到,没有哪个文件或目录

[root@localhost ~]#  yum install ipvsadm -y
[root@localhost ~]# systemctl start ipvsadm
Job for ipvsadm.service failed because the control process exited with error code.
See "systemctl status ipvsadm.service" and "journalctl -xe" for details.
[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl start ipvsadm
  • 配置SNAT转发规则
[root@localhost ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf 
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@localhost ~]# iptables -t nat -F
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o ens37 -j SNAT --to-source 192.168.2.151 
  • 加载LVS内核模块
root@localhost ~]# modprobe ip_Vs    #加载ip_vs模块
[root@localhost ~]# cat /proc/net/ip_vs   #查看ip vs版本信息
[root@localhost ~]# for i in $(ls /usr/1ib/modules/$(uname -r)/kernel/net/netfilter/ipvslgrep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done
  • 配置并启用策略
[root@localhost ~]# systemctl start ipvsadm              
[root@localhost ~]# ipvsadm -C 
[root@localhost ~]# ipvsadm -A -t 192.168.2.151:80 -s rr      #-A:对外提供的地址 -t:tcp -s:策略 rr:轮巡
[root@localhost ~]# ipvsadm -a -t 192.168.2.151:80 -r 192.168.1.161 -m   #-a:对内真实服务器 -r:真实 -m:地址伪装
[root@localhost ~]# ipvsadm -a -t 192.168.2.151:80 -r 192.168.1.162 -m 
[root@localhost ~]# ipvsadm -a -t 192.168.2.151:80 -r 192.168.1.163 -m
[root@localhost ~]# ipvsadm    #启用策略
  • 查看节点状态,Masq代表NAT模式
[root@localhost ~]# ipvsadm -ln    #查看节点状态,Masq代表NAT模式
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.2.151:80 rr
  -> 192.168.1.161:80             Masq    1      0          0         
  -> 192.168.1.162:80             Masq    1      0          0         
  -> 192.168.1.163:80             Masq    1      0          0      
3.2.3 测试效果192.168.2.181客户机
[root@localhost ~]# curl 192.168.2.151
192.168.1.163
[root@localhost ~]# curl 192.168.2.151
192.168.1.162
[root@localhost ~]# curl 192.168.2.151
192.168.1.161
[root@localhost ~]# curl 192.168.2.151
192.168.1.163
[root@localhost ~]# curl 192.168.2.151
192.168.1.162
  • 查看192.168.1.161服务器日志
[root@localhost ~]# tail -f /var/log/nginx/access.log
192.168.2.181 - - [05/May/2021:01:39:42 -0400] "GET / HTTP/1.1" 200 14 "-" "curl/7.61.1" "-"
  • 查看192.168.1.162服务器日志
[root@localhost nginx]# tail -f /var/log/nginx/access.log
192.168.2.181 - - [05/May/2021:01:39:43 -0400] "GET / HTTP/1.1" 200 14 "-" "curl/7.61.1" "-"
192.168.2.181 - - [05/May/2021:01:39:48 -0400] "GET / HTTP/1.1" 200 14 "-" "curl/7.61.1" "-"```
  • 查看192.168.1.163服务器日志
[root@localhost nginx]# tail -f /var/log/nginx/access.log
192.168.2.181 - - [05/May/2021:01:16:27 -0400] "GET / HTTP/1.1" 200 14 "-" "curl/7.61.1" "-"
192.168.2.181 - - [05/May/2021:01:16:33 -0400] "GET / HTTP/1.1" 200 14 "-" "curl/7.61.1" "-"
[root@localhost network-scripts]# 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.2.151:80 rr
  -> 192.168.1.161:80             Masq    1      0          1         
  -> 192.168.1.162:80             Masq    1      0          2         
  -> 192.168.1.163:80             Masq    1      0          2 
3.2.4 清空策略并恢复
[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm    #备份LVS策略
[root@localhost ~]# ipvsadm -C   
[root@localhost ~]# ipvsadm -ln                                       
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@localhost ~]# ipvsadm-restore < /etc/sysconfig/ipvsadm     #恢复LVS策略
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  127.0.0.1:80 rr
  -> 127.0.0.1:80                 Masq    1      0          0         
  -> 192.168.1.162:80             Masq    1      0          0         
  -> 192.168.1.163:80             Masq    1      0          0         

你可能感兴趣的:(集群)