lvs集群

一、lvs集群的介绍

1.1什么是集群

Cluster,集群、群集

        由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机。

1.2 集群的类型

LB: Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求

HA: High Availiablity,高可用,避免 SPOF(single Point Of failure)

HPC: High-performance computing,高性能 。依赖于分布式、并行计算,例如云计算

1.3 集群和分布式

系统性能扩展方式:

  • Scale UP:垂直扩展,向上扩展,增强,性能更强的计算机运行同样的服务

  • Scale Out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,Cluster

垂直扩展不再提及:

随着计算机性能的增长,其价格会成倍增长

        单台计算机的性能是有上限的,不可能无限制地垂直扩展,多核CPU意味着即使是单台计算机也可以并行的。

集群:同一个业务系统,部署在多台服务器上。集群中,每一台服务器实现的功能没有差别,数据和代码都是一样的。

分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务。

1.3.1 集群设计原则

        可扩展性—集群的横向扩展能力

        可用性—无故障时间 (SLA service level agreement)

        性能—访问响应时间

        容量—单位时间内的最大并发吞吐量(C10K 并发问题) 

二、LB Cluster 负载均衡集群

SNAT:让 内网用户 可以访问外网

DNAT:把内网的服务 共享到公网上(外网用户可以访问 公司内网的服务)

2.1 基于工作的协议层次划分

传输层(通用):DNAT 和 DPORT

LVS:

nginx:stream

haproxy:mode tcp

应用层(专用):针对特定协议,常称为 proxy server

http:nginx, httpd, haproxy(mode http), ...

fastcgi:nginx, httpd, ...

mysql:mysql-proxy, mycat...

3. 负载均衡集群的结构

第一层,负载调度器(Load Balancer或Director)

访问整个群集系统的唯一入口,对外使用所有服务器共有的VIP地址,也称为群集IP地址。通常会配置主、备两台调度器实现热备份,当主调度器失效以后能够平滑替换至备用调度器,确保高可用性。负载均衡层


第二层,服务器池(Server Pool)

群集所提供的应用服务、由服务器池承担,其中每个节点具有独立的RIP地址(真实IP),只处理调度器分发过来的客户机请求。当某个节点暂时失效时,负载调度器的容错机制会将其隔离,等待错误排除以后再重新纳入服务器池。web应用层


第三层,共享存储(Share Storage)

为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。共享存储可以使用NAS设备,或者提供NFS共享服务的专用服务器。

三、LVS介绍

        VS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名正明), 阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现

LVS 官网:http://www.linuxvirtualserver.org/

3.1 LVS工作原理

 在内核中查看功能是否开启

[root@localhost ~]#grep -i -C 10 ipvs /boot/config-3.10.0-693.el7.x86_64 
CONFIG_NETFILTER_XT_MATCH_CPU=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ECN=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
CONFIG_NETFILTER_XT_MATCH_NFACCT=m
CONFIG_NETFILTER_XT_MATCH_OSF=m
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
--
CONFIG_IP_SET_HASH_NET=m
CONFIG_IP_SET_HASH_NETPORT=m
CONFIG_IP_SET_HASH_NETIFACE=m
CONFIG_IP_SET_LIST_SET=m
CONFIG_IP_VS=m
CONFIG_IP_VS_IPV6=y
# CONFIG_IP_VS_DEBUG is not set
CONFIG_IP_VS_TAB_BITS=12

#
# IPVS transport protocol load balancing support
#
CONFIG_IP_VS_PROTO_TCP=y
CONFIG_IP_VS_PROTO_UDP=y
CONFIG_IP_VS_PROTO_AH_ESP=y
CONFIG_IP_VS_PROTO_ESP=y
CONFIG_IP_VS_PROTO_AH=y
CONFIG_IP_VS_PROTO_SCTP=y

#
# IPVS scheduler     调度算法
#
CONFIG_IP_VS_RR=m
CONFIG_IP_VS_WRR=m
CONFIG_IP_VS_LC=m
CONFIG_IP_VS_WLC=m
CONFIG_IP_VS_LBLC= m
CONFIG_IP_VS_LBLCR=m
CONFIG_IP_VS_DH=m
CONFIG_IP_VS_SH=m
CONFIG_IP_VS_SED=m
CONFIG_IP_VS_NQ=m

#
# IPVS SH scheduler
#
CONFIG_IP_VS_SH_TAB_BITS=8

#
# IPVS application helper
#
CONFIG_IP_VS_FTP=m
CONFIG_IP_VS_NFCT=y
CONFIG_IP_VS_PE_SIP=m

#
# IP: Netfilter Configuration
#
CONFIG_NF_DEFRAG_IPV4=m
CONFIG_NF_CONNTRACK_IPV4=m
 

3.2 LVS 功能及组织架构

负载均衡的应用场景为高访问量的业务,提高应用程序的可用性和可靠性。

应用于高访问量的业务
扩展应用程序
消除单点故障
同城容灾 (多可用区容灾)

3.3  LVS集群类型中的术语

  • VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer(lvs服务器)

  • RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)(真实服务器)

  • CIP:Client IP(客户机IP)

  • VIP:Virtual serve IP VS外网的IP

  • DIP:Director IP VS内网的IP

  • RIP:Real server IP (真实IP)

四、lvs调度算法

分为两种:静态方法和动态方法

静态方法:不管后端服务器的状态,根据自身算法进行调度

动态方法:会根据后端服务器的状态调度

静态

1、RR:roundrobin,轮询,较常用

2、WRR:Weighted RR,加权轮询,较常用

3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定

4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存

动态

主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度

1、LC:least connections 适用于长连接应用

Overhead=activeconns*256+inactiveconns

activeconns活跃数        inactiveconns  不活跃数

2、WLC:Weighted LC,默认调度方法,较常用

Overhead=(activeconns*256+inactiveconns)/weight

weight  权重

3、SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接

Overhead=(activeconns+1)*256/weight

4、NQ:Never Queue,第一轮均匀分配,后续SED

5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等

6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,,实现Web Cache等

五、NAT模式 LVS负载均衡部署

负载调度器:内网关 lvs,ens33:192.168.200.14,外网关 ens36:12.0.0.1
Web服务器1:192.168.200.16
Web服务器2:192.168.200.15
NFS服务器:192.168.200.12
Windows客户端:12.0.0.12

在代理服务器中添加一张网卡

部署共享存储(nfs服务器:192.168.200.14)

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装nfs服务
yum install nfs-utils rpcbind -y
 
3. #新建目录,并创建站点文件
cd /opt/
mkdir zhou lmz
echo "this is zhou" > zhuo/index.html
echo "this is lmz" > lmz/index.html
 
4. #开启服务
systemctl start rpcbind
systemctl start nfs
 
5. #授权

chmod 777 zhuo/ lmz/
 
6. #设置共享策略
vim /etc/exports
/opt/zhuo 192.168.79.0/24(rw,sync)
/opt/lmz 192.168.79.0/24(rw,sync)
 
7. #发布服务
exportfs -rv

部署web服务器1(web服务器1:192.168.200.16):

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装httpd、nfs-utils和rpcbind程序
yum install -y httpd
yum install nfs-utils rpcbind -y
 
3. #查看nfs服务
showmount -e 192.168.200.14
 
4. #挂载站点
#法一:临时挂载
df
mount 192.168.200.14:/opt/zhou /var/www/html/

cat /var/www/html/index.html


#法二:永久挂载
vim /etc/fstab
192.168.200.14:/opt/zhou/  /var/www/html/        nfs     defaults,_netdev 0 0 
mount -a
 
5. #开启httpd服务并设置开机自启动
systemctl start httpd
systemctl enable httpd
 
6. #指定网关
vim /etc/sysconfig/network-scripts/ifcfg-ens33 
GATEWAY=192.168.200.12
#DNS1=8.8.8.8
 
7. #重启网络服务
systemctl restart network

部署web服务器2(web服务器2:192.168.20.15):

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装httpd、nfs-utils和rpcbind程序
yum install -y httpd
yum install nfs-utils rpcbind -y
 
3. #查看nfs服务
showmount -e 192.168.200.14
 
4. #挂载站点
#法一:临时挂载
df

mount 192.168.200.14:/opt/lmz /var/www/html/
cat /var/www/html/index.html

#法二:永久挂载
vim /etc/fstab
192.168.200.14:/opt/lmz/  /var/www/html/        nfs     defaults,_netdev 0 0 
mount -a
 
5. #开启httpd服务并设置开机自启动
systemctl start httpd
systemctl enable httpd
 
6. #指定网关
vim /etc/sysconfig/network-scripts/ifcfg-ens33 
GATEWAY=192.168.200.12
#DNS1=8.8.8.8
 
7. #重启网络服务
systemctl restart network

部署负载调度服务器(ens33:192.168.200.12,ens36:12.0.0.1):

1. #关闭防火墙
systemctl stop firewalld
setenforce 0
 
2. #安装ipvsadm
yum install ipvsadm.x86_64 -y
 
3. #打开路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 


sysctl -p
 
4. #防火墙做策略
#清空策略
iptables -F
#添加策略
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens36 -j SNAT --to 12.0.0.1
#查看策略
iptables -nL -t nat
 
5. #加载LVS内核模块
modprobe ip_vs
cat /proc/net/ip_vs
 
6. #开启ipvsadm服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
 
7. #清空策略
ipvsadm -C
 
8. #制定策略
#指定IP地址 外网的入口  -s rr  轮询
ipvsadm -A -t 12.0.0.1:80 -s rr
#先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式
ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.16:80 -m
ipvsadm -a -t 12.0.0.1:80 -r 192.168.200.15:80 -m
#开启服务
ipvsadm
 
9. 查看策略
ipvsadm -ln

Windows客户机验证(Windows客户端:12.0.0.12)

相关推荐

  1. <span style='color:red;'>LVS</span><span style='color:red;'>集</span><span style='color:red;'>群</span>

    LVS

    2024-03-10 20:24:01      33 阅读
  2. LVS+Keepalived

    2024-03-10 20:24:01       40 阅读
  3. <span style='color:red;'>LVS</span><span style='color:red;'>集</span><span style='color:red;'>群</span>

    LVS

    2024-03-10 20:24:01      18 阅读
  4. <span style='color:red;'>LVS</span><span style='color:red;'>集</span><span style='color:red;'>群</span>

    LVS

    2024-03-10 20:24:01      25 阅读
  5. <span style='color:red;'>lvs</span><span style='color:red;'>集</span><span style='color:red;'>群</span>

    lvs

    2024-03-10 20:24:01      19 阅读
  6. <span style='color:red;'>lvs</span><span style='color:red;'>集</span><span style='color:red;'>群</span>

    lvs

    2024-03-10 20:24:01      23 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-10 20:24:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-10 20:24:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-10 20:24:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-10 20:24:01       20 阅读

热门阅读

  1. sklearn随机森林实现(备忘版)

    2024-03-10 20:24:01       20 阅读
  2. Docker

    2024-03-10 20:24:01       22 阅读
  3. Flink命令行提交时参数的传递

    2024-03-10 20:24:01       18 阅读
  4. Redis的HyperLogLog原理介绍

    2024-03-10 20:24:01       20 阅读
  5. 使用Rust开发小型搜索引擎

    2024-03-10 20:24:01       21 阅读
  6. 【深度学习】COCO API源码解读

    2024-03-10 20:24:01       20 阅读
  7. SpringSecurity与Shiro的区别

    2024-03-10 20:24:01       19 阅读
  8. 决策树基本原理&sklearn实现

    2024-03-10 20:24:01       25 阅读
  9. 什么是脏读、幻读、不可重复读?

    2024-03-10 20:24:01       24 阅读
  10. python读写excel时遇到的问题合集

    2024-03-10 20:24:01       22 阅读
  11. P8651 [蓝桥杯 2017 省 B] 日期问题---洛谷(题解)

    2024-03-10 20:24:01       23 阅读
  12. 蓝桥杯---列名

    2024-03-10 20:24:01       20 阅读
  13. 【数据结构】栈和队列

    2024-03-10 20:24:01       23 阅读
  14. Ubuntu 20.04 ROS1 与 ROS2 通讯

    2024-03-10 20:24:01       19 阅读
  15. 理工笔记本配置之ubuntu 锐捷认证

    2024-03-10 20:24:01       19 阅读
  16. redis20240306

    2024-03-10 20:24:01       16 阅读
  17. Vue.js 绑定容器

    2024-03-10 20:24:01       20 阅读