中间件

一、定义

1)中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。目前,它并没有很严格的定义,普遍接受IDC的定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。从这个意义上可以用一个等式来表示中间件:中间件=平台+通信,这也就限定了只有用于分布式系统中才能叫中间件,同时也把它与支撑软件和实用软件区分开来。

2)进程是资源分配的最小单位,线程是CPU调度的最小单位;

3)Cloudera(CDH)提供一个可伸缩,稳定的,综合的企业级大数据管理平台,它拥有最多的部署案例,提供强大的部署,管理和监控工具;

线程和进程的区别是什么?

CDH 6.3.2(Cloud Distribution Hadoop)安装部署

tomcat 与 nginx,apache的区别是什么?

CentOS 7下Cloudera Manager及CDH 6.0.1安装过程详解

二、分类

2.1. Web应用服务器

Apache和nginx应该叫做HTTP Server,而Tomcat是一个Application Server,JSP/Servlet容器应用的容器;

Apache HTTP Server、Nginx都能够将某一个静态资源的内容通过HTTP协议返回到客户端,但是这个文本文件的内容是固定的——也就是说无论何时、任何人访问它得到的内容都是完全相同的;

Tomcat能够动态的生成资源并返回到客户端;

Web Server-nginx
Web Server-apache http

2.2. Message Queue消息中间件

ZooKeeper
Kafka

三、集群(Cluster)

3.1. 简介

一组协同工作的服务器,对外表现为一个整体,更好的利用现有资源实现服务的高度可用。

InterView

Linux 集群

3.2. 分类

  • 1)LBC(Load Balancing Cluster):负载均衡集群

    • 减轻单台服务器的压力,将用户请求分担给多台主机一起处理
      • 硬件实现:F5: 4层 硬件负载均衡设备
      • 软件实现:
  • 2)HAC(High Availability Cluster):高可用集群

    • 心跳检测
    • 最大限度的保证用户的应用持久,不间断的提供服务
      • 硬件实现:F5
      • 软件实现:
        • HeartBeat
        • Keepalived

    3)HPC(High-performance computing Cluster):高性能运算集群

3.3. LB软件简介及使用

3.3.1 LVS介绍

LVS 运行在系统内核空间netfilterINPUT钩子上的框架,用户空间无法直接管理,用IPVSADM命令行工具管理集群服务;根据用户请求的套接字判断,将请求分流至真实服务器的工作模块;

  1. 三种工作模式:DR(Direct Routing)、NAT(多目标DNAT)、TUN,实施中用得最多的还是**LVS/DR+Keepalived**
    • 1)DR(Direct Routing): LB收到请求包后, 将请求包中目标MAC地址转换为某个选定RS的MAC地址后将包转发出去,RS收到请求包后, 可直接将应答内容传给用户,此时要求LB和所有RS都必须在一个物理网段内, 且LB与RS群共享一个虚拟IP.
    • 2)NAT(Network Address Translation): LB收到用户请求包后, LB将请求包中虚拟服务器的IP地址转换为某个选定RS的IP地址, 转发给RS; RS将应答包发给 LB, LB将应答包中RS的IP转为虚拟服务器的IP地址, 回送给用户,无论是进来的流量,还是出去的流量,都必须经过负载均衡器;
    • 3)TUN(IP Tunneling): LB收到用户请求包后, 根据IP隧道协议封装该包, 然后传给某个选定的RS; RS解出请求信息, 直接将应答内容传给用户。此时要求RS和LB都要支持IP隧道协议.
  2. 调度算法:
    1. 静态算法(RR-轮询、WRR-加权、SH-源地址散列、DH-目标地址散列)
    2. 动态算法(LC、WLC、SED、NQ、LBLC、LBLCR)
3.3.2. HAProxy简介

HAProxy是一个免费的负载均衡软件:

  1. 负载均衡:L4(传输层)和L7(应用层)两种模式;
  2. 4层负载均衡:用的是TCP协议加端口号做的负载均衡;
  3. 7层负载均衡:用的7层HTTP协议;
  4. 支持RR/静态RR/LC/IP Hash/URI Hash/URL_PARAM Hash/HTTP_HEADER Hash等丰富的负载均衡算法;
  5. 健康检查:支持HTTP和TCP两种健康检查模式;

HAProxy安装与配置 - 我爱吃芹菜~ - 博客园

Haproxy详解以及基于Haproxy的高可用实战

# 二层负载均衡(mac)
 用于虚拟mac地址方式,外部对虚拟mac地址请求,负载均衡接收后分配给后端实际的mac地址响应。
# 三层负载均衡(ip)
 一般用于虚拟ip地址的方式,外部对虚拟ip地址请求,负载均衡接收后分配给后端实际的ip地址响应。
# 四层负载均衡(tcp)
 在三层负载均衡的基础上,用ip+port接收请求,在转发到对应的机器上;F5,lvs,nginx,haproxy
# 七层负载均衡(http)
 根据虚拟的url或者ip,主机名接收请求,在转发到相应的处理服务器上;haproxy,nginx,apache,mysql proxy

cat > README.md <<EOF
# haproxy的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global defaults frontend backend listen
1. global: 全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关。
2. default: 配置默认参数,这些参数可以被用到frontend,backend,Listen组件。
3. frontend:接收请求的前端虚拟节点,frontend可以指定具体使用后端的backend。
4. backend : 后端服务集群的配置,真实服务器,一个backend对应一个或者多个实体服务器。
5. listen: fronted和backend的组合体,比如haproxy实例状态监控部分配置,Haproxy1.3之前的唯一配置方式。
EOF

3.4. HA软件简介及使用

3.4.1. Heartbeat简介

Heartbeat

  1. Heartbeat是一个开源的高可用性软件,它的主要功能是通过监控服务器的心跳信号来判断服务器的可用性。在一个集群中,当某个服务器宕机时,heartbeat会检测到这个问题,并启动备用服务器来接管宕机服务器的工作,以保证服务的高可用性。在heartbeat中,有一个主机是活动的,而其他的主机则是备用状态,等待活动主机宕机后接管其工作。由于heartbeat只是通过简单的心跳信号来检测服务器的可用性,因此它对被监控的服务器的负载非常小,同时也非常稳定可靠。

高可用篇之Heartbeat(Heartbeat+HAProxy搭建高可用负载均衡集群) - 腾讯云开发者社区-腾讯云

# heartbeat配置文件(主要有3个)
1. 密钥文件authkeys,权限600:实现主机和备机之间的认证
dd if=/dev/random bs=512 count=1 | openssl md5
2. heartbeat服务配置ha.cf
ucast ens33 192.168.1.103  #采用网卡ens33的UDP多播来组织心跳,后面跟的IP地址应该为双机中对方的IP地址
3. 资源管理配置文件haresources:可以实现VIP创建以及调用脚本管控服务。
cat /usr/local/heartbeat/etc/ha.d/haresources | tail -n
haproxy-master IPaddr::192.168.1.200/24/ens33:0  haproxy  # 192.168.1.200 为VIP, 相当于创建VIP 网卡, 启动时还会启动haproxy脚本,haproxy脚本位置在/usr/local/heartbeat/etc/ha.d/resource.d/
3.4.2. Keepalived简介

Keepalived

  1. keepalived是集群管理中保证集群高可用(HA)的一个服务软件,用来防止单点故障;
  2. keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议;
    高可用篇之Keepalived (HAProxy+keepalived 搭建高可用负载均衡集群)

keepalived简介和配置文件讲解 - 我爱吃芹菜~ - 博客园

# /etc/keepalived/keepalived.conf
cat > README.md <<EOF
1. vrrp_instance
2. vrrp_script
		script "/path/to/somewhere"      //指定要执行的脚本的路径。
		interval <INTEGER>              //指定脚本执行的间隔。单位是秒。默认为1s。
		timeout <INTEGER>               //指定在多少秒后,脚本被认为执行失败。
		weight <-254 --- 254>           //调整优先级。默认为2.
		rise <INTEGER>                  //执行成功多少次才认为是成功。
		fall <INTEGER>                  //执行失败多少次才认为失败。
		user <USERNAME> [GROUPNAME]     //运行脚本的用户和组。
		init_fail                       //假设脚本初始状态是失败状态。
3. real_server
4. tcp_check
EOF
posted on 2023-04-16 00:20  anyu967  阅读(47)  评论(0编辑  收藏  举报