企业群集应用概述
群集的含义
- Cluster,集群、群集
- 由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名与IP地址),相当于一台大型计算机。
互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠性等要求越来越高,单台服务器已经无法满足负载均衡及高可用的要求
解决方法
-
使用价格昂贵的小型机、大型机
-
使用普通服务器构建服务群集
通过整合多台服务器,使用LVS来达到服务器的高可用和负载均衡,并以同一个 IP地址对外提供相同的服务。在企业中常用的一种群集技术------LVS (Linux Virtual Server,Linux虚拟服务器)
企业群集分类
根据群集所针对的目标差异,可分为三种类型
- 负载均衡群集
- 高可用群集
- 高性能运算群集
负载均衡群集(Load Balance Cluster)
- 提高应用系统的响应能力、尽可能处理更多的访问请求减少延迟为目标,获得高并发、高负载(LB)的整体性能
- LB的负载分配依赖于主节点的分流算法
访问请求分担给多个服务器节点,从而缓解整个系统的负载压力。例如,"反向代理"等
高可用群集(High Availability Cluster)
- 提高应用系统的可靠性、尽可能地减少中断时间为目标,确保服务的连续性,达到高可用(HA)的容错效果
- HA的工作方式包括双工和主从两种模式
高性能运算群集(High Performance Computer Cluster)
- 提高应用系统的CPU运算速度、扩展硬件资源和分析能力为目标,获得相当于大型、超级计算机的高性能运算(HPC)能力
- 高性能依赖于"分布式运算"、"并行计算",通过专用硬件和软件将多个服务器的CPU、内存等资源整合在一起,实现只有大型、超级计算机才具备的计算能力
负载均衡群集工作模式分析
负载均衡群集是目前企业用得最多的群集类型
群集的负载调度技术有三种工作模式
- 地址转换
- IP隧道
- 直接路由
NAT模式
地址转换
- Network Address Translation,简称NAT模式
- 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口
- 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式
关于LVS虚拟服务器
LVS的负载调度算法
轮询(Round Robin)
将收到的访问请求按照顺序轮流分配给群集中的各节点(真实服务器),均等地对待每一台服务器,而不管服务器实际的连接数和系统负载
加权轮询(Weighted Round Robin)
- 根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多
- 保证性能强的服务器承担更多的访问流量
最少连接(Least Connections)
根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点
加权最少连接(Weighted Least Connections)
- 在服务器节点的性能差异较大时,可以为真实服务器自动调整权重
- 性能较高的节点将承担更大比例的活动连接负载
LVS三种工作模式总结
类型 适用场景 网络要求 性能特点
nat 小型规模、网络带宽要求不高的内网环境 无特殊带宽要求 中等性能,依赖NAT转换
tun 跨区域大规模集群,公网负载均衡(如CN2线路) 依赖公网带宽 高灵活性,适合地理分布式场景
DR 高性能、低延迟的大规模集群 LVS与后端服务器需同二层网络 最高性能,数据直接返回客户端
LVS-NAT 模式
作用是为后端分流
实验:
基础环境
lvs服务器
配置两个网卡(内外网)
bash
#####ens33网卡配置
[root@lvs network-scripts]# cat 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="7cf78704-dc20-4436-be20-e58d689be182"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.110.128
NETMASK=255.255.255.0
GATEWAY=192.168.110.2
###ens36网卡配置(网卡名需看虚拟机上的名字)
[root@lvs network-scripts]# cat 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"
DEVICE="ens36"
ONBOOT="yes"
IPADDR=192.168.253.128
NETMASK=255.255.255.0
lvs服务环境配置
bash
systemctl start firewalld
#清除防火墙规则
iptables -t nat -F
iptables -F
#配置SNAT转发规则
vim /etc/sysctl.conf
#开启路由转发的功能(内核的)
net.ipv4.ip forward = 1
#刷新生效
或 echo'1'>/proc/sys/net/ipv4/ip_forward
sysct1 -p
#自定义路由转发规则,将所有192.168.253.0/24网段的流量全部映射为192.168.110.128的地址
iptables -t nat -A POSTROUTING -s 192,168,253.0/24 -0 ens33 -j SNAT --to-source 192.168.110.128
lvs服务准备
bash
#安装ipvsadm 管理工具
yum -y install ipvsadm
#启动服务前须保存负载分配策略
ipvsadm-save >/etc/sysconfig/ipvsadm
#或者
ipvsadm --save>/etc/sysconfig/ipvsadm
#开启1vs的管理工具
systemctl start ipvsadm.service
#配置负载分配策略(NAT模式只要在服务器上配置,节点服务器不需要特殊配置)
ipvsadm-c #清空规则
#重新建立规则(申明外网网卡是192.168.110.128:80 负载均衡模式是RR轮循)
ipvsadm -A -t 192.168.110.128:80 -s rr
#定义1vs服务器的后端地址池(类似于nginx的upstream 释石复制ip砦
ipvsadm -a -t 192.168.110.128:80 -r 192.168.253.129:80 -m
ipvsadm -a-t 192.168.110.128:80 -r 192.168.253.130:80 -m
ipvsadm #启用策略
ipvsadm -ln #查看节点状态,Masq代表 NAT模式
ipvsadm-save > /etc/sysconfig/ipvsadm #保存策略
两个httpd服务器
- 2台服务器的网卡全部改成VMnet1 仅主机模式
- 查看自己虚拟机VMnet1 网卡的IP地址段是多少(虚拟网络编辑器------》VMent1------》查看子网ip)
- 然后修改自己web服务器的网卡,如: web1 192.168.253.129 web2 192.168.253.130,网卡配置文件 修改如下(web1)
bash
[root@lvs network-scripts]# cat 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="ens36"
DEVICE="ens36"
ONBOOT="yes"
IPADDR=192.168.253.129
NETMASK=255.255.255.0
GATEWAY=192.168.253.128
#同样搭建第二台httpd服务器,IPADDR=192.168.253.129
搭建本地YUM仓
bash
#关闭防火墙:
systemctl disable firewalld --now
#关闭核心防护
setenforce 0
#配置本地yum仓库下载httpd或者先下载再配置内网
#下载并开启httpd
yum install -y httpd
systemctl start httpd
#同样搭建第二台httpd服务器
修改2台web 服务器的网页文件
bash
cd /var/www/html
vi index.html
this httpd01 web pages #this httpd02 web pages
#保存并退出
#检验
curl 192.168.253.129 #本机ip
#curl 192.168.253.130
验证前测试
bash
##2台web服务器 ping windows宿主机的IP,查看是否能ping通
[root@httpd02 yum.repos.d]# ping 192.168.110.1
PING 192.168.110.1 (192.168.110.1) 56(84) bytes of data.
64 bytes from 192.168.110.1: icmp_seq=1 ttl=63 time=0.608 ms
验证
使用宿主机WINDOWS 访问LVS的ens33网卡IP ,查看页面:
PS:注意,要相隔至少20秒再重复访问LVS服务器
然后回到LVS服务端使用ipvsadm -ln 观测流量
bash
[root@lvs 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.110.128:80 rr
-> 192.168.253.129:80 Masq 1 0 0
-> 192.168.253.130:80 Masq 1 0 0