小阿轩yx-LVS负载均衡群集

小阿轩yx-LVS负载均衡群集

  • 构建群集服务器—通过整合多台服务器
  • 使用 LVS 达到服务器的高可用和负载均衡
  • 并以同一个 IP 地址对外提供相同的服务

LVS 群集应用基础

  • 群集称呼来自英文单词“Cluster”
  • 在服务器领域则表示大量服务器的集合体,区分单个服务器

Cluster

  • 表示一群、一串的意思

LVS 群集技术概述

  • 根据企业环境不同
  • 群集提供的功能也不同
  • 采用的技术细节也不同
群集的三种类型

每种群集都至少包含两台服务器,对外表现为一个整体,只提供一个访问入口

负载均衡群集(Load Balance Cluster)

  • 提高应用系统的响应能力
  • 尽可能处理更多的访问请求
  • 减少延迟为目标
  • 获得高并发、高负载的整体性能

高可用群集(High Availability Cluster)

  • 提高应用系统的可靠性
  • 尽可能地减少中断时间为目标
  • 确保服务的连续性
  • 达到高可用(HA)的容错效果

高性能运算群集(High Performance Computer Cluster)

  • 提高应用系统的 CPU运算速度、扩展硬件资源和分析能力为目标
  • 获得相当于大型、超级计算机的高性能运算(HPC)能力

不同类型的群集在必要时可以合并,如高可用的负载均衡群集

负载均衡的分层结构

典型的负载均衡群集中包括三个层次的组件

  • 前端至少有一个负载调度器(Load Balancer,或称为 Director)负责响应并分发来自客户机的访问请求
  • 后端由大量真实服务器(Real Server)构成服务器池(Server Poo1),提供实际的应用服务,整个群集的伸缩性通过增加、删除服务器节点来完成

第一层,负载调度器

  • 这是访问整个群集系统的唯一入口
  • 对外使用所有服务器共有的 VIP(Virtual IP,虚拟 IP)地址,也称为群集 IP 地址

第二层,服务器池

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

第三层,共享存储

  • 为服务器池中的所有节点提供稳定、一致的文件存取服务,确保整个群集的统一性。
  • Linux/UNIX 环境中,共享存储可以使用 NAS 设备,或者提供 NFS(Network File System,网络文件系统)共享服务的专用服务器
负载均衡的工作模式
  • 群集的负载调度技术,可以基于 IP、端口、内容等进行分发
  • 其中基于 IP 的负载调度是效率最高的

基于IP的负载均衡模式中,常见的三种工作模式有

  • 地址转换
  • IP 隧道
  • 直接路由

地址转换(Network Address Translation)

  • 简称 NAT 模式
  • 类似于防火墙的私有网络结构,负载调度器作为所有服务器节点的网关,即作为客户机的访问入口,也是各节点回应客户机的访问出口。
  • 服务器节点使用私有IP地址,与负载调度器位于同一个物理网络,安全性要优于其他两种方式。

IP 隧道(IP Tunnel)

  • 简称 TUN 模式
  • 采用开放式的网络结构,
  • 负载调度器仅作为客户机的访问入口,各节点通过各自的 Internet 连接直接回应客户机,而不再经过负载调度器。
  • 服务器节点分散在互联网中的不同位置,具有独立的公网IP地址,通过专用 IP隧道与负载调度器相互通信。

直接路由(Direct Routing)

  • 简称 DR 模式
  • 采用半开放式的网络结构,与 TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。
  • 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。

NAT方式只需要一个公网 IP地址,从而成为最易用的一种负载均衡模式,许多硬件负载均衡设备就采用这种方式

优势

  • 安全性也比较好

相比较而言DR 模式和 TUN 模式

优势

  • 负载能力更加强大
  • 适用范围更广

缺点

  • 节点的安全性稍差一些

LVS 虚拟服务器

Linux Virtual Server

  • 是针对Linux 内核开发的一个负载均衡项目
  • 由我国的章文嵩博士在 1998年5月创建
  • 官方站点位于 http://www.linuxvirtualserver.org/
  • LVS 实际上相当于基于 IP地址的虚拟化应用
  • 为基于 IP地址和内容请求分发的负载均衡提出了一种高效的解决方法
  • LVS 现在已成为 Linux 内核的一部分
  • 默认编译为 ip_vs 模块
  • 必要时能够自动调用
LVS 的负载调度算法
  • 针对不同网络服务和配置,LVS 调度器提供多种不同的负载调度算法

最常用的四种算法

  • 轮询
  • 加权轮询
  • 最少连接
  • 加权最少连接

轮询(RoundRobin)

  • 将收到的访问请求按照顺序轮流分配给群集中的各节点,均等地对待每台服务器,而不管服务器实际的连接数和系统负载。

加权轮询(Weighted Round Robin)

  • 根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务并且分配的请求越多,这样可以保证性能高的节点承担更多请求。

最少连接(Least Connections)

  • 根据真实服务器已建立的连接数进行分配,将收到的访问请求优先分配给连接数最少的节点。如果所有的服务器节点性能相近,采用这种方式可以更好地均衡负载。

加权最少连接(Weighted Least Connections)

  • 在服务器节点的性能差异较大的情况下,调度器可以根据节点服务器负载自动调整权重,权重较高的节点将承担更大比例的活动连接负载。
使用 ipvsadm 管理工具

ipvsadm 是在负载调度器上使用的 LVS 群集管理工具,通过调用 ip_vs 模块来添加、删除服务器节点,以及查看群集的运行状态。

构建 LVS 负载均衡群集
地址转换模式(LVS-NAT)

实验环境

各web节点需要设置网关,NFS不需要

CentOS 系统,手动加载 ip_vs 模块并查看信息

//加载 ip_vs模块
[root@localhost ~]# modprobe ip_vs
//查看 ip_vs 版本信息
[root@localhost ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1(size=4096)
Prot LocalAddress:Port Scheduler Flags
    ->RemoteAddress:Port Forward Weight ActiveConn InActConn

配置负载调度器

[root@localhost ~]# setenforce 0
[root@localhost ~]# systemctl stop firewalld

安装 ipvsadm

[root@localhost ~]# yum -y install ipvsadm

查看 ipvsadm 版本

[root@localhost ~]# ipvsadm -v
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)

添加配置文件

[root@localhost ~]# vim /etc/sysctl.conf 
## 添加下面代码
net.ipv4.ip_forward = 1

语句生效

[root@localhost ~]# sysctl -p

配置新策略

[root@localhost ~]# ipvsadm -C

创建虚拟服务器

[root@localhost ~]# ipvsadm -A -t 172.16.16.172:80 -s rr

添加服务器节点

[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.10.102:80 -m -w 1
[root@localhost ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.10.103:80 -m -w 1

查看当前策略信息

[root@localhost ~]# ipvsadm-save
-A -t localhost.localdomain:http -s rr
-a -t localhost.localdomain:http -r 192.168.10.102:http -m -w 1
-a -t localhost.localdomain:http -r 192.168.10.103:http -m -w 1

-s:指定调度算法

  • rr:轮询

  • wrr:加权轮询

  • lc:最小链接数

  • wlc:加权最小连接数

  • -A    添加一个新的集群服务;

  • -E    修改一个己有的集群服务;

  • -D    删除指定的集群服务;

  • -a    向指定的集群服务中添加RS及属性;

  • -e    修改RS属性;

  • -t    指定为tcp协议;

  • -u    指定为udp协议;

  • -s    调度方法,默认为wlc;

  • -w    指定权重,默认为1;

  • -g    Gateway, DR模型;

  • -i    ipip, TUN模型;

  • -m    masquerade, NAT模型;

  • -S    保存ipvsadm设定的规则策略,默认保存在/etc/sysconfig/ipvsadm中;

  • -R    载入己保存的规则策略,默认加载/etc/sysconfig/ipvsadm;

  • -C    清除所有集群服务;

  • -Z    清除所有记数器;

  • -L    显示当前己有集群服务,能通过相应的options查看不同状态信息;

  • -r          指定真实服务器的地址

启动 ipvsadm

[root@localhost ~]# systemctl enable ipvsadm

配置 web 节点服务器

在两个 web 节点上安装 httpd

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl stop firewalld 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install nfs-utils

 创建测试页

[root@localhost ~]# vim /var/www/html/index.html
LVS test1

启动 httpd 服务

[root@localhost ~]# systemctl start httpd
[root@localhost ~]# systemctl enable httpd

客户端测试 LVS 群集

[root@localhost ~]# curl 172.16.16.172

在 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  172.16.16.172:80 rr
  -> 192.168.10.102:80              Masq    1      0          0         
  -> 192.168.10.103:80              Masq    1      0          0 
  • ActiveConn是活动连接数,也就是tcp连接状态的ESTABLISHED

  • InActConn是指除了ESTABLISHED以外的,所有的其它状态的tcp连接

linux 做客户端时可以用以下代码进行测试

[root@localhost ~]# for i in $(seq 10);do curl 172.16.16.172;done

 NFS 共享存储服务

NFS

  • 是一种基于 TCP/IP 传输的网络文件系统协议
  • 最初由 Sun 公司开发
  • 通过使用 NFS协议,客户机可以访问远程服务器中的共享资源
  • 对于大多数负载均衡群集来说,使用 NFS协议来共享数据存储是比较常见的做法
  • NFS也是NAS存储设备必然支持的一种协议
使用 NFS 发布共享资源
  • NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制
  • 以完成远程到本地的映射过程

CentOS7系统中,需要安装软件包提供 NFS共享服务

  • nfs-utils
  • rpcbind

前者用于 NFS 共享发布和访问

后者用于RPC支持

安装 nfs-utils、rpcbind 软件包

[root@localhost ~]# systemctl stop firewalld 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install nfs-utils rpcbind
[root@localhost ~]# systemctl enable nfs
[root@localhost ~]# systemctl enable rpcbind

设置共享目录

[root@localhost ~]# mkdir -p /opt/wwwroot
[root@localhost ~]# vi /etc/exports
/opt/wwwroot   192.168.10.0/24(rw,sync,no_root_squash)

可以同时发布多个目录,并且可以为不同的客户端设置不同的访问权限

  • rw 可读写的权限 
  • ro 只读的权限 
  • no_root_squash 登入NFS主机,使用该共享目录时相当于该目录的拥有者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权限,这个参数极不安全,不建议使用
  • root_squash 登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份
  • all_squash 不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody
  • sync 资料同步写入到内存与硬盘当中 
  • async 资料会先暂存于内存当中,而非直接写入硬盘 
  • insecure 允许从这台机器过来的非授权访问

启动 NFS 服务程序

[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# netstat -anpt | grep rpc
tcp        0      0 0.0.0.0:20048     0.0.0.0:*               LISTEN      44153/rpc.mountd    
tcp        0      0 0.0.0.0:50661     0.0.0.0:*               LISTEN      7511/rpc.statd      
tcp6       0      0 :::20048          :::*                    LISTEN      44153/rpc.mountd    
tcp6       0      0 :::54742          :::*                    LISTEN      7511/rpc.statd

查看本机发布的 NFS 共享目录

[root@localhost ~]# showmount -e
Export list for localhost.localdomain:
/opt/wwwroot 192.168.7.0/24
/var/ftp/pub 192.168.10.173,192.168.7.172

在客户机中访问 NFS 共享资源

  • NFS 协议的目标是提供一种网络文件系统
  • 对 NFS 共享的访问使用 mount 命令来进行挂载,对应的文件系统类型为nfs
  • 既可以手动挂载,也可以加入/etc/fstab 配置文件来实现开机自动挂载
  • 考虑到群集系统中的网络稳定性,NFS服务器与客户机之间最好使用专有网络进行连接

安装 rpcbind 软件包,并启动 rpcbind 服务

[root@localhost ~]# yum -y install rpcbind nfs-utils
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl start rpcbind

手动在 web 节点挂载 nfs

[root@localhost ~]# mount -t nfs 192.168.10.105:/opt/wwwroot /var/www/html

在 nfs 上创建测试网页

[root@localhost ~]# vim /var/www/html/index.html
LVS test

linux做客户端时可以用一下代码进行测试

[root@localhost ~]# for i in $(seq 10);do curl 172.16.16.172;done

小阿轩yx-LVS负载均衡群集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值