lvs+上一章的内容

书接上回这次加了个keepalived

一、集群与分布式

1.1 集群介绍

**集群(Cluster)**是将多台计算机组合成一个系统,以解决特定问题的计算机集合。集群系统可以分为以下三种类型:

  • **LB(Load Balancing,负载均衡):**多个主机组成的集群,每个主机只承担一部分访问请求,从而平衡负载。
  • **HA(High Availability,高可用):**通过冗余和故障切换机制,避免单点故障(SPOF)。
  • **HPC(High-performance computing,高性能计算):**用于需要高计算能力的任务,如科学计算和复杂的数据处理。
1.2 分布式系统

分布式系统是指将计算和存储分散在多台计算机上,以提高系统的性能、可靠性和可扩展性。分布式系统的常见应用包括:

  • **分布式存储:**例如Ceph,GlusterFS,FastDFS,MogileFS等。
  • **分布式计算:**例如Hadoop和Spark。
  • **分布式应用:**通过功能拆分和微服务架构,将单一应用程序划分成多个小服务,服务之间相互协调,为用户提供最终价值。
  • **分布式静态资源:**将静态资源存储在不同的存储集群上,以提高访问效率。
  • **分布式数据和存储:**使用key-value缓存系统来提高数据访问速度。
  • **分布式计算:**如使用Hadoop集群处理大数据业务。
1.3 集群设计原则
  • **可扩展性:**集群的横向扩展能力,即增加更多节点来提高性能。
  • **可用性:**系统的无故障时间(SLA,服务级别协议)。
  • **性能:**系统的访问响应时间。
  • **容量:**单位时间内的最大并发吞吐量(如C10K问题)。

二、LVS(Linux Virtual Server)

2.1 LVS工作原理

LVS通过请求报文的目标IP、目标协议和端口,将其调度转发至某个真实服务器(RS)。根据调度算法选择RS。LVS作为内核级功能,工作在INPUT链的位置,将发往INPUT的流量进行处理。

2.2 LVS集群体系架构

LVS的架构包括代理服务器(VS)、真实服务器(RS)、客户机IP(CIP)、虚拟服务器IP(VIP)、调度器IP(DIP)和真实服务器IP(RIP)。

2.3 LVS功能及组织架构

LVS主要用于高访问量业务,通过负载均衡提高应用程序的可用性和可靠性。

2.4 LVS集群类型中的术语
  • **VS(代理服务器):**也称为Director Server (DS)或Dispatcher,负责调度和负载均衡。
  • **RS(真实服务器):**提供实际服务的服务器。
  • **CIP(客户机IP):**客户端的IP地址。
  • **VIP(虚拟服务器IP):**代理服务器的外网IP。
  • **DIP(调度器IP):**代理服务器的内网IP。
  • **RIP(真实服务器IP):**真实服务器的IP地址。

访问流程:CIP <--> VIP == DIP <--> RIP

三、LVS工作模式和命令

3.1 LVS集群的工作模式

LVS支持多种工作模式:

  • **LVS-NAT:**修改请求报文的目标IP,通过DNAT实现多目标IP的负载均衡。
  • **LVS-DR:**直接路由模式,通过封装新的MAC地址转发报文。
  • **LVS-TUN:**隧道模式,通过IP隧道实现负载均衡。
  • **LVS-FullNAT:**修改请求报文的源和目标IP。
3.1.1 LVS的NAT模式
  • **请求阶段:**客户端请求报文的源IP是CIP,目的IP是VIP。
  • **转发阶段:**代理服务器修改目的IP为RIP,转发给真实服务器。
  • **响应阶段:**真实服务器将响应报文发送回代理服务器,代理服务器修改源IP为VIP,再转发给客户端。

NAT模式的特点包括支持端口映射、必须是Linux系统等。

3.1.2 LVS的DR模式

DR模式(Direct Routing)通过直接路由实现负载均衡,特点如下:

  • 代理服务器与RS在同一个物理网络。
  • 请求报文经由代理服务器,但响应报文直接由RS发回客户端。
  • 不支持端口映射,RS可以使用大多数操作系统。
3.1.3 工作模式总结比较
模式 优点 缺点 真实服务器要求 支持网络 真实服务器数量 真实服务器网关
DR 性能最好 不支持跨网段 Non-arp device LAN High (100) Own router
TUN 支持WAN 服务器支持隧道模式 Tunneling LAN/WAN High (100) Own router
NAT 端口转换 性能瓶颈 any Private Low (10~20) LVS内网地址
3.2 LVS调度算法

LVS调度算法分为静态方法和动态方法:

  • **静态方法:**不考虑服务器状态,仅根据算法进行调度。常见算法有轮询(RR)、加权轮询(WRR)、源地址哈希(SH)和目标地址哈希(DH)。
  • **动态方法:**根据服务器的负载状态进行调度。常见算法有最少连接(LC)、加权最少连接(WLC)、最短预期延迟(SED)、永不排队(NQ)等。

四、ipvsadm工具

4.1 ipvsadm工具选项
  • -A:添加虚拟服务器。
  • -D:删除整个虚拟服务器。
  • -C:清空所有规则。
  • -R:重新加载规则。
  • -s:指定负载调度算法(如轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)。
  • -a:添加真实服务器(节点服务器)。
  • -d:删除某个节点。
  • -t:指定VIP地址及TCP端口。
  • -r:指定RIP地址及TCP端口。
  • -m:使用NAT集群模式。
  • -g:使用DR模式。
  • -i:使用TUN模式。
  • -w:设置权重(权重为0时表示暂停节点)。
  • -p 60:保持长连接60秒。
  • -l:列出LVS虚拟服务器。
  • -n:以数字形式显示地址、端口等信息,常与"-l"选项组合使用。

安装与配置:

  • 主程序:/usr/sbin/ipvsadm
  • 规则保存工具:/usr/sbin/ipvsadm-save
  • 规则重载工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config
  • ipvs调度规则文件:/etc/sysconfig/ipvsadm

通过扩展后的内容,进一步解释了每个部分的概念和具体操作,有助于更全面地理解集群与分布式系统的设计与实现。

192.168.10.10

192.168.10.20

192.168.10.30

复制代码
 location ~ \.jsp$ {
        proxy_pass http://192.168.10.50:8080;
        } 
        location ~ \.(jsp|html)$ {
        root /usr/share/nginx/html;
        }

192.168.10.40

192.168.10.50


结果验证:

自此出起开始本章内容

对192.168.10.20进行如下配置:

复制代码
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30
   router_id LVS01
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}


vrrp_script check_down {
  script "/etc/keepalived/ng.sh"
  interval 1
  weight -30
  fall 3
  rise 2
  timeout 2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.188
    }
   track_script {
   check_down
    }
}

下面对该配置文件进行注释和讲解

复制代码
# Configuration File for keepalived

global_defs {
   # 定义接收通知的电子邮件地址列表
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   
   # 定义发送通知的电子邮件地址
   notification_email_from Alexandre.Cassen@firewall.loc
   
   # 定义SMTP服务器的地址,用于发送电子邮件通知
   smtp_server 127.0.0.1 
   
   # 定义与SMTP服务器连接的超时时间(秒)
   smtp_connect_timeout 30
   
   # 定义路由器的唯一标识符
   router_id LVS01
   
   # 跳过对接收到的VRRP通告中的地址进行检查,这可以避免因网络配置问题导致的误报
   vrrp_skip_check_adv_addr
   
   # #vrrp_strict 是一个可选的指令,如果启用,它将强制执行VRRP协议的严格检查。在这里,它被注释掉了。
   #vrrp_strict
   
   # 定义GRATUITOUS ARP请求的发送间隔(秒),0表示不发送
   vrrp_garp_interval 0
   
   # 定义组播NA(Neighbor Advertisement)消息的发送间隔(秒),通常与garp_interval保持一致,0表示不发送
   vrrp_gna_interval 0
}

# 定义一个VRRP脚本检查,用于监控服务或资源的状态
vrrp_script check_down {
   # 指定要执行的脚本路径
   script "/etc/keepalived/ng.sh"
   
   # 定义脚本执行的间隔时间(秒)
   interval 1
   
   # 定义脚本执行失败时,本机的优先级调整值
   weight -30
   
   # 定义脚本连续失败多少次后,认为服务不可用
   fall 3
   
   # 定义脚本连续成功多少次后,认为服务已恢复
   rise 2
   
   # 定义脚本执行的超时时间(秒)
   timeout 2
}

# 定义一个VRRP实例
vrrp_instance VI_1 {
   # 设置VRRP实例的初始状态,可以是MASTER或BACKUP
   state MASTER
   
   # 指定绑定的网络接口
   interface ens33
   
   # 设置虚拟路由器的ID,同一个网络内的不同VRRP实例应该使用不同的ID
   virtual_router_id 51
   
   # 设置本机的优先级,值越大优先级越高
   priority 100
   
   # 设置VRRP通告的发送间隔(秒)
   advert_int 1
   
   # 定义VRRP实例的认证方式和密码
   authentication {
       auth_type PASS  # 使用密码认证
       auth_pass 1111  # 设置认证密码
   }
   
   # 定义虚拟IP地址列表
   virtual_ipaddress {
       192.168.10.188
   }
   
   # 指定要跟踪的脚本检查,当脚本检查失败时,会调整本机的优先级
   track_script {
       check_down
   }
}

所需要的脚本

复制代码
#!/bin/bash
#check_nginx 
killall -0 nginx
if [[ $? -ne 0 ]];then
    systemctl stop keepalived
fi

对192.168.10.30进行如下配置:

复制代码
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30
   router_id LVS01
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}


vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.188
    }
   track_script {
   check_down
    }
}

由此可见实验是成功的

相关推荐
kobeyyl13 小时前
LVS项目全套知识点总结
lvs
Stewie1213819 小时前
LVS 项目知识点总结
lvs
Y_cheng_1 天前
LVS知识梳理
运维·服务器·lvs
高卧怡怡1 天前
LVS认识及基础详解
lvs
椿.湫1 天前
lvs技术
服务器·网络·lvs
懒神降世1 天前
LVS负载均衡集群项目总结(二)
运维·负载均衡·lvs
高磊20052 天前
LVS(Linux virual server)
linux·服务器·lvs
梦Arrebol2 天前
lvs项目知识点总结
lvs
养海绵宝宝的小蜗2 天前
LVS(Linux Virtual Server)项目知识点总结
linux·运维·lvs
池以遇2 天前
云原生——LVS
运维·云原生·lvs