模拟场景:

随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端节点已经通过集群技术(ldirectord)保障了可用性,但对于前端负载均衡器来说,是个比较大的安全隐患,因为当前端负载均衡器出现故障时,整个集群就处于瘫痪状态,因此,负载均衡器的可用性也显得至关重要,那么怎么来解决负载均衡器的可用性问题呢?(当然是用keepalivedarrp实现地址偏移来实现最简单啦~

技术说明:

群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可用多个计算机做备份(高可用),使得任何一个机器坏了整个系统还是能正常运行。集群在目前互联网公司是必备的技术,极大提高互联网业务的可用性和可缩放性

 

高可用集群技术(理论概念)

高可用(High Availability

HA(High Available), 高可用性群集是通过系统的可靠性(reliability)和可维护性(maintainability)来度量的。工程上,通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*100%

具体HA(可用性)衡量标准:

99% 一年宕机时间不超过4

99.9% 一年宕机时间不超过10小时(目前这个阶段的就可以了,往下的要求就有点高了)

99.99% 一年宕机时间不超过1小时

99.999% 一年宕机时间不超过6分钟

 

高可用集群技术实现

高可用工作方式:主从方式 (非对称方式)、双机双工方式(互备互援)、集群工作方式(多服务器互备方式)

高可用的资源分类:网络高可用、服务器高可用、存储高可用、服务高可用等

开源高可用解决方案:keepalived:通过实现vrrp协议来实现地址漂移heartbeat(开源社区项目),cman+rgmanager (RHCS:redhat cluster suite)corosync+pacemaker(大型解决方案,一个用于心跳检测,一个用于资源转移。两个结合起来使用,可以实现对高可用架构的自动管理。)

f32d80c0f2598547cca2fa24d0e7b9bb.png


47dfdf5307eb05f0203974f93906363f.png

Keepalived是什么:

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服

务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

 

Keepalived的特性:

配置文件简单:配置文件比较简单,可通过简单配置实现高可用功能

稳定性强keepalived是一个类似于layer3, 4 & 7交换机制的软件,具备我们平时说的第3层、第4层和第7层交换机的功能,常用于前端负载均衡器的高可用服务,当主服务器出现故障时,可快速进行切换,监测机制灵活,成功率高。

成本低廉:开源软件,可直接下载配置使用,没有额外费用。

应用范围广:因为keepalived可应用在多个层面,所以它几乎可以对所有应用做高可用,包括LVS、数据库、http服务、nginx负载均衡等等

支持多种类型:支持主从模式、主主模式高可用,可根据业务场景灵活选择


7864313d11c0101ca57d94b787256350.png

Keepalived工作流程图详解:

如上图,keepalived主要是模块是VRRP StackCheackers,实现HA集群中失败切换(Failover)功能。Keepalived通过VRRP功能能再结合LVS负载均衡软件即可部署一个高性能的负载均衡集群系统。,Cheackers主要实现可实现对服务器运行状态检测和故障隔离。其中ipvsrealserver健康状态检查通过配置文件配置就可以实现,而其他服务高可用则需要通过自己编写脚本,然后配置keepalived调用来实现。

Keepalived运行有3个守护进程。父进程主要负责读取配置文件初始化、监控2个子进程等;然后两个子进程,一个负责VRRP,另一个负责Cheackers健康检查。其中父进程监控模块为WacthDog,工作实现:每个子进程打开一个接受unix域套接字,父进程连接到那些unix域套接字并向子进程发送周期性(5shello包。

上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space

内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部份。


什么是VRRP协议

VRRPVirtual Router Redundancy Protocol,虚拟路由冗余协议)可以认为是实现路由器高可用的协议,简单的说,当一个路由器故障时可以由另一个备份路由器继续提供相同的服务。

VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由器或Backup路由器)。VRRP优先级的取值范围为0255数值越大表明优先级越高),可配置的范围是1254,优先级0为系统保留给路由器放弃Master位置时候使用,255则是系统保留给IP地址拥有者使用。优先级越高,则越有可能成为Master路由器。当两台优先级相同的路由器同时竞争Master时,比较接口IP地址大小。接口地址大者当选为Master


实现基于keepalived高可用集群:

8016c48a4f2dcf64357da895024d63b6.png

一、环境准备:centos系统主从两台、yum源、防火墙关闭、各节点时钟服务同步、各节点之间可以通过主机名互相通信

二、安装步骤:

1iptables -F && setenforing 清空防火墙策略,关闭selinux

2、两台服务器都使用yum方式安装keepalived服务 yum install keepalived

三、修改配置文件:

1.修改/etc/keepalived/keepalived.conf配置文件内容

2、对glob段进行定义,添加管理员邮箱等

3、对vrrp_instance 进行配置,配置一主一从,定义一个基于虚拟IP的实例


Keepalived配置文件讲解

global_defs { #全局配置

notification_email { #realserver故障时通知邮件的收件人地址,可以多个

root@localhost

}

notification_email_from root_keepalived #发件人信息(可以随意伪装,因为邮件系统不会验证处理发件人信息)

smtp_server 127.0.0.1 #发邮件的服务器(一定不可为外部地址)

smtp_connect_timeout 30 #连接超时时间

router_id KEEPALIVED #路由器的标识(可以随便改动)

}

 

vrrp_instance VI_1 { #配置虚拟路由器的实例,VI_1是自定义的实例名称

state MASTER #初始状态,MASTER|BACKUP,当state指定的instance的初始化状态,在两台服务器都启动以后,马上发生竞选,优先级高的成为MASTER所以这里的MASTER并不是表示此台服务器一直是MASTER

interface eth0 #通告选举所用端口

virtual_router_id 51 #虚拟路由的ID号(一般不可大于255

priority 101 #优先级信息 #备节点必须更低

advert_int 1 #VRRP通告间隔,秒

authentication {

auth_type PASS #认证机制

auth_pass 5344 #密码(尽量使用随机)

}

nopreempt #非抢占模式

virtual_ipaddress {

    172.17.10.100(设置的虚拟VIP)

    }

}


946f37fd08014ccc59378e7a45c35af0.png

(backup从)配置文件设置

4f8566187050f34198c8c84c97717112.png

这样就实现了地址漂移了(意思就是master主机器不行了,设置的虚拟VIP会飘到backup从机器上,这样的话在主从机器上提供同样的服务,这样主机器坏了也不影响服务,实现了高可用。

f70dea75a946199c6195852f3f5d10b7.png

751ba17c5b4bcf6b5e8264b44926b2b3.png