大家好,又见面了,我是你们的朋友全栈君。
网络的飞速发展,给网络带宽和服务器性能带来了巨大的挑战,基于互联网的应用系统越来越多地瓶颈出现在服务器端,这就对服务器提出了更高的要求,来保证服务的持续性。
定义:集群是一组协同工作的服务集合。在外界看来,集群就是一个独立的服务实体,但实际上,在集群的内部,有两个或两个以上的服务器实体在协调、配合完成一系列复杂的工作。
组成:集群一般由两个或两个以上的服务器组建而成。每个服务器称为一个集群节点。同时,还需要有串口线、集群软件、共享存储设备(例如磁盘阵列)等。
集群节点通信方式:一种是基于RS232线的心跳监控,另一种是用一块单独的网卡跑心跳。
作用:集群主要用来提供比单一服务更稳定、更高效、更具扩展性的服务平台。当一个节点出现故障时,集群的另一个节点可以自动接管故障节点的资源,从而保证服务持久、不间断地运行。
特点:集群具有节点间服务状态监控功能,同时必须具有服务实体的扩展功能,可以灵活地增加和剔除某个服务实体。
High Availability Cluster,HA集群,高可用指的是最大限度地可以使用。用于保障用户的应用程序持久、不间断提供服务。
常见的HA集群:双机热备、双机互备、多机互备等,一般由两个或两个以上的节点组成。
高可用集群软件:HeartBeat HA、Red Hat提供的RHCS、商业软件ROSE、Keepalived等
Load Balance Cluster ,LB集群,分为前端负载调度和后端节点服务,负载调度负责把客户端的请求按照不同的策略分配给后端服务节点,后端服务节点是真正提供应用程序服务的
与HA不同的是,在LB集群中,所有后端节点都处于活动状态(Active),它们都对外提供服务,分摊系统工作负载。适用于业务繁忙、大负荷访问的应用系统。
缺点:当一个节点出现故障时,前端调度系统并不知道此节点已经不能提供服务,仍然会把客户端的请求调度到故障节点上来,这样就会访问失败。解决办法:负载调度系统一般都引入了节点监控系统,用于监控后端服务节点,当某个节点出现故障后,节点监控系统会自动将故障节点从集群中剔除;当此节点恢复正常后,节点监控系统又会自动将其加入集群中。
负载均衡软件:软件包括开源LVS集群、Oracle的RAC集群等,硬件为F5 Networks等
Distributed Computing Cluster,DC集群。提供单个计算机所不能提供的强大的计算分析能力,包括数值计算和数据处理,并且倾向于追踪综合性能。
开源分布式计算平台:Hadoop、Spark,用于开发和处理海量数据。在这个平台上,分布式任务是并行运行的,因此处理速度非常快。
Hadoop工作原理:Hadoop可将大数据直接存储到HDFS这个分布式文件系统上,Hadoop的MapReduce功能实现了将单个任务打碎,并将碎片任务发送到多个节点上,之后再以单个数据集的形式加载到数据仓库里。
Keepalived是Linux下一个轻量级的高可用解决方案。主要通过虚拟路由冗余来实现高可用功能。根据第3~5层的交换机制检测每个服务节点的状态,如果某个服务节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现故障的服务节点从集群系统中剔除;而在故障节点恢复正常后,Keepalived又可以自动将此服务节点重新加入到服务器集群中,这些工作全部自动完成。后来,Keepalived又加入了VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议),目的是为了解决静态路由出现的单点故障问题,通过VRPP可以实现网络不间断地、稳定地运行。
VRRP与工作原理
VRRP是一种主备协议,通过VRRP可以在网络发生故障时透明地进行设备切换而不影响主机间的数据通信,这涉及到两个概念:物理路由器和虚拟路由器。
VRRP可以将两台或多台物理路由器设备虚拟成一个虚拟路由器,这个虚拟路由器通过虚拟IP(一个或多个)对外提供服务。在虚拟路由器内部,多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务。每个虚拟路由器都有一个唯一标识,称为VRID,一个VRID与一组IP地址构成了一个虚拟路由器。
对外提供服务的物理服务器称为MASTER,一般情况下通过选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如ARP请求、ICMP、数据转发等。其他物理服务器仅仅接收MASTER的VRRP状态通告信息,这些路由器统称为BACKUP。当主路由器失效时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续对外提供服务。
Keepalived工作在TCP/IP参考模型的第三层、第四层和第五层,也就是网络层、传输层和应用层。根据各层所能实现的功能,Keepalived运行机制如下:
Keepalived是一个高度模块化的软件,结构简单,但是扩展性很强。Keepalived的体系结构从整体上分为两层,分别是用户空间(User Space)层和内核空间(Kernel Space)层。
内核空间层,包括IPVS和NETLINK两个模块,IPVS是Keepalived引入的第三方模块,通过IPVS可以实现基于IP的负载均衡集群。IPVS默认包含在LVS集群软件中。在keepalived中,IPVS模块是可配置的,如果需要负载均衡功能,可以在编译Keepalived时打开负载均衡功能,反之,也可以通过配置编译参数关闭。NETLINK模块主要用于实现高级路由框架和一些相关的网络功能,完成用户空间层Netlink Reflector模块发来的各种网络请求。
用户空间层,包括Core components(核心组件)、Control Plane(控制面板:对配置文件进行编译和解析)、Memory Management(Mngt)(内存管理机制:访问内存的方法)、Scheduler I/O Multiplexer(IO复用调度:处理内部的任务请求)
核心组件中各个模块的功能如下:
官方下载地址:https://www.keepalived.org/download.html
# 安装依赖
# yum install -y libnl libnl-devel 用于支持IPv6
# yum install -y openssl-devel
wget https://www.keepalived.org/software/keepalived-2.2.4.tar.gz
tar zxf keepalived-2.2.4.tar.gz
./configure --sysconf=/etc
make
make install
默认配置文件位置:/usr/local/etc/keepalived/keepalived.conf
默认可执行文件位置:/usr/local/sbin/keepalived
Keepalived配置分为三类,分别是:全局配置(Global Configuration)、VRRPD配置和LVS配置。Keepalived的配置文件都是以块(block)的形式组织的,每个块的内容都包含在{}中,以“#”和“!”开头的行都是注释。
一、全局配置
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
二、VRRPD配置
VRRP同步组配置:实现把多个实例放在一个组中管理。
vrrp_sync_group G1 {
group {
VI_1
VI_2
VI_5
}
notify_backup "/usr/local/bin/vrrp.back arg1 arg2"
notify_master "/usr/local/bin/vrrp.mast arg1 arg2"
notify_fault "/usr/local/bin/vrrp.fault arg1 arg2"
}
vrrp_sync_group G2 {
group {
VI_3
VI_4
}
}
VRRP实例配置:配置节点角色(主或从)、实例绑定的网络接口、节点间验证机制、集群服务IP等
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
mcast_src_ip <IPADDR>
garp_master_delay 10
track_interface {
eth0
eth1
}
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
192.168.200.16
192.168.200.17 dev eth1
192.168.200.18 dev eth2
}
virtual_routers {
# src <IPADDR> [to] <IPADDR>/<MASK> via | gw <IPADDR> dev <STRING> scope <SCOPE>
src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth1
192.168.110.0/24 via 192.168.200.254 dev eth1
192.168.111.0/24 dev eth2
192.168.112.0/24 via 192.168.100.254
192.168.113.0/24 via 192.168.100.252 or 192.168.100.253
}
nopreempt
preemtp_delay 300
}
三、LVS配置
virtual_server 10.10.10.3 1358 {
delay_loop 3
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
ha_suspend
virtualhost <STRING>
sorry_server 192.168.200.200 1358
real_server 192.168.200.4 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.200.5 1358 {
weight 1
HTTP_GET {
url {
path /testurl/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl2/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
url {
path /testurl3/test.jsp
digest 640205b7b0fc66c1ea91c463fac6334d
}
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
real_server 192.168.200.5 80 {
weight 3
inhibit_on_failure
notify_up <STRING> | <QUOTED-STRING>
notify_down <STRING> | <QUOTED-STRING>
}
健康检测段允许多种检查方式,常见的有HTTP_GET、SSL_GET、TCP_CHECK、SMTP_CHECK、MISC_CHECK。
TCP_CHECK检测配置
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
HTTP_GET | SSL_GET检测配置
HTTP_GET | SSL_GET {
url {
path /index.html
digest <STRING>
status_code 200
}
connect_port 80
bindto 192.168.12.80
connect_timeout 3
nb_get_retry 3
delay_before_retry 2
}
MISC_CHECK检测配置
MISC_CHECK {
misc_path /usr/local/bin/script.sh
misc_timeout 5
!misc_dynamic
}
MISC健康检查可以通过执行一个外部程序来判断real server节点的服务状态,使用非常灵活。
注意事项:Keepalived在启动时并不检测配置文件的正确性,即使没有配置文件,Keepalived也照样能够启动,所以一定要保障配置文件正确。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155615.html原文链接:https://javaforall.cn