中间件
一、定义
1)中间件是介于应用系统和系统软件之间的一类软件,它使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。目前,它并没有很严格的定义,普遍接受IDC的定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。从这个意义上可以用一个等式来表示中间件:中间件=平台+通信,这也就限定了只有用于分布式系统中才能叫中间件,同时也把它与支撑软件和实用软件区分开来。
2)进程是资源分配的最小单位,线程是CPU调度的最小单位;
3)Cloudera(CDH)提供一个可伸缩,稳定的,综合的企业级大数据管理平台,它拥有最多的部署案例,提供强大的部署,管理和监控工具;
CDH 6.3.2(Cloud Distribution Hadoop)安装部署
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消息中间件
三、集群(Cluster)
3.1. 简介
一组协同工作的服务器,对外表现为一个整体,更好的利用现有资源实现服务的高度可用。
3.2. 分类
-
1)LBC(Load Balancing Cluster):
负载均衡集群
- 减轻单台服务器的压力,将用户请求分担给多台主机一起处理
- 硬件实现:F5: 4层 硬件负载均衡设备
- 软件实现:
- LVS: 纯 4层 负载均衡,运行在内核态,性能是软件负载均衡中最高的;
- Nginx: 支持 4层 / 7层 负载均衡,支持 HTTP、E-mail 协议;
- HAProxy: 是 4层 / 7层 负载均衡软件,支持 7 层规则的设置,性能也不错; HAProxy安装与配置 - 我爱吃芹菜~ - 博客园 (cnblogs.com)
- 减轻单台服务器的压力,将用户请求分担给多台主机一起处理
-
2)HAC(High Availability Cluster):
高可用集群
- 心跳检测
- 最大限度的保证用户的应用持久,不间断的提供服务
- 硬件实现:F5
- 软件实现:
- HeartBeat
- Keepalived
3)HPC(High-performance computing Cluster):
高性能运算集群
3.3. LB软件简介及使用
3.3.1 LVS介绍
LVS 运行在系统内核空间
netfilter
的INPUT
钩子上的框架,用户空间无法直接管理,用IPVSADM命令行工具管理集群服务;根据用户请求的套接字判断,将请求分流至真实服务器的工作模块;
- 三种工作模式: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隧道协议.
- 调度算法:
- 静态算法(RR-轮询、WRR-加权、SH-源地址散列、DH-目标地址散列)
- 动态算法(LC、WLC、SED、NQ、LBLC、LBLCR)
3.3.2. HAProxy简介
HAProxy是一个免费的负载均衡软件:
- 负载均衡:L4(传输层)和L7(应用层)两种模式;
- 4层负载均衡:用的是TCP协议加端口号做的负载均衡;
- 7层负载均衡:用的7层HTTP协议;
- 支持RR/静态RR/LC/IP Hash/URI Hash/URL_PARAM Hash/HTTP_HEADER Hash等丰富的负载均衡算法;
- 健康检查:支持HTTP和TCP两种健康检查模式;
# 二层负载均衡(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
- Heartbeat是一个开源的高可用性软件,它的主要功能是通过监控服务器的心跳信号来判断服务器的可用性。在一个集群中,当某个服务器宕机时,heartbeat会检测到这个问题,并启动备用服务器来接管宕机服务器的工作,以保证服务的高可用性。在heartbeat中,有一个主机是活动的,而其他的主机则是备用状态,等待活动主机宕机后接管其工作。由于heartbeat只是通过简单的心跳信号来检测服务器的可用性,因此它对被监控的服务器的负载非常小,同时也非常稳定可靠。
# 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
- keepalived是集群管理中保证集群高可用(HA)的一个服务软件,用来防止单点故障;
- keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议;
高可用篇之Keepalived (HAProxy+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
本文来自博客园,作者:anyu967,转载请注明原文链接:https://www.cnblogs.com/anyu967/articles/17320358.html