共计 6319 个字符,预计需要花费 16 分钟才能阅读完成。
上一期我们实现了基于 LVS 负载均衡集群的电商网站架构,随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的 1000QPS,变为 3000QPS,目前业务已经通过集群 LVS 架构可做到随时拓展,后端节点已经通过集群技术保障了可用性,但对于前端负载均衡器来说,是个比较大的安全隐患,因为当前端负载均衡器出现故障时,整个集群就处于瘫痪状态,因此,负载均衡器的可用性也显得至关重要,那么怎么来解决负载均衡器的可用性问题呢?
技术说明
集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。
集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份 ( 高可用),使得任何一个机器坏了整个系统还是能正常运行。集群在目前互联网公司是必备的技术,极大提高互联网业务的可用性和可缩放性。
高可用(High Availability)高可用集群,英文原文为 HighAvailability Cluster,简称 HA Cluster,简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。高可用性集群(HA cluster)是指如单系统一样地运行并支持(计算机)持续正常运行的一个主机群。
高可用集群技术
高可用(High Availability)高可用集群,英文原文为 HighAvailability Cluster,简称 HA Cluster,简单的说,集群(cluster)就是一组计算机,它们作为一个整体向用户提供一组网络资源。这些单个的计算机系统 就是集群的节点(node)。高可用性集群(HA 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 分钟
高可用集群技术实现
高可用(High Availability)
高可用工作方式:主从方式(非对称方式)、双机双工方式(互备互援)、集群工作方式(多服务器互备方式)
高可用的资源分类:网络高可用、服务器高可用、存储高可用、服务高可用等
开源高可用解决方案:keepalived:通过实现 vrrp 协议来实现地址漂移;heartbeat(开源社区项目),cman+rgmanager (RHCS:RedHat cluster suite),corosync+pacemaker(大型解决方案,一个用于心跳检测,一个用于资源转移。两个结合起来使用,可以实现对高可用架构的自动管理。)
我们今天讲的就是基于 keepalived 通过 vrrp 协议来实现地址漂移从而来实现高可用。
高可用技术演示图(主从)
高可用技术演示图(双主)
Keepalived 是什么
Keepalived 的作用是检测服务器的状态,如果有一台 web 服务器宕机,或工作出现故障,Keepalived 将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后 Keepalived 自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
Keepalived 的特性
配置文件简单:配置文件比较简单,可通过简单配置实现高可用功能
稳定性强:keepalied 是一个类似于 layer3,4&7 交换机机制的软件,具备我们平时说的第 3 层、第 4 层和第 7 层交换机的功能,常用于前端负载均衡器的高可用服务,当主服务器出现故障时,可快速进行切换,监测机制灵活,成功率高。
成本低廉:开源软件,可直接下载配置使用,没有额外费用。
应用范围广:因为 keepalived 可应用在多个层面,所以它几乎可以对所有应用做高可用,包括 LVS、数据库、http 服务、nginx 负载均衡等等
支持多种类型:支持主从模式、主主模式高可用,可根据业务场景灵活选择。
Keepalived 工作流程图
Keepalived 工作流程图详解如上图,keepalived 主要是模块是 VRRP Stack 和 Cheackers,实现 HA 集群中失败切换(Failover)功能。Keepalived 通过 VRRP 功能能再结合 LVS 负载均衡软件即可部署一个高性能的负载均衡集群系统。,Cheackers 主要实现可实现对服务器运行状态检测和故障隔离。其中 ipvs 和 realserver 健康状态检查通过配置文件配置就可以实现,而其他服务高可用则需要通过自己编写脚本,然后配置 keepalived 调用来实现。
Keepalived 运行有 3 个守护进程。父进程主要负责读取配置文件初始化、监控 2 个子进程等;然后两个子进程,一个负责 VRRP,另一个负责 Cheackers 健康检查。其中父进程监控模块为 WacthDog,工作实现:每个子进程打开一个接受 unix 域套接字,父进程连接到那些 unix 域套接字并向子进程发送周期性(5s)hello 包。
上图是 Keepalived 的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。
内核空间:主要包括 IPVS(IP 虚拟服务器,用于实现网络服务的负载均衡)和 NETLINK(提供高级路由及其他相关的网络功能)两个部份。
什么是 VRRP 协议
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)可以认为是实现路由器高可用的协议,简单的说,当一个路由器故障时可以由另一个备份路由器继续提供相同的服务。
VRRP 根据优先级来确定虚拟路由器中每台路由器的角色(Master 路由器或 Backup 路由器)。VRRP 优先级的取值范围为 0 到 255(数值越大表明优先级越高),可配置的范围是 1 到 254,优先级 0 为系统保留给路由器放弃 Master 位置时候使用,255 则是系统保留给 IP 地址拥有者使用。优先级越高,则越有可能成为 Master 路由器。当两台优先级相同的路由器同时竞争 Master 时,比较接口 IP 地址大小。接口地址大者当选为 Master。
Keepalived 的应用场景
在 网络层、数据链路层 ,运行着 4 个重要的协议: 互联网协议 IP、互联网控制报文协议 ICMP、地址转换协议 ARP 以及反向地址转换协议 RARP。Keepalived 在网络层采用的最常见的工作方式是通过 ICMP 协议向服务器集群中的那个节点发送一个 ICMP 数据包(类似于 ping 实现的功能),如果某个节点没有返回响应数据包,那么认为此节点发生了故障,Keepalived 将报告次节点失效,并从服务器集群中剔除故障节点。
在 传输层,提供了两个主要的协议:传输控制协议 TCP 和用户数据协议 UDP。传输控制协议 TCP 可以提供可靠的数据传输服务、Ip 地址和端口代表 TCP 的一个连接端。要获得 TCP 服务,需要在发送机的一个端口上和接收机的一个端口上建立连接,而 Keepalived 在传输层就是利用 TCP 协议的端口连接和扫描技术来判断集群点是否正常的。比如,对于常见的 WEB 服务默认的 80 端口、SSH 服务默认的 22 端口等,Keepalived 一旦在传输层探测到这些端口没有响应数据返回,就认为这些端口发生异常,然后强制将此端口对应得节点从服务器集群组中移除。
在 应用层,可运行 FTP、TELNET、HTTP、DNS 等各种不同类型的高层协议,Keepalived 的运行方式也更加全面化和复杂化,用户可以通过自定义 Keepalived 的工作方式;例如:用户可以通过编写程序来运行 keepalived。而 keepalived 将根据用户的设定检测各种程序或服务是否运行正常,如果 Keepalived 的检测结果与用户设定不一致时,Keepalived 将把对应的服务从服务器中移除。
实战架构图
实现基于 keepalived 的高可用服务,在两台主机上分别实现主从,主主模型,通过 keepalived 实现 IP 地址高可用和 LVS 的主从高可用架构。
实战演练
实现基于 keepalived 主从模型高可用集群:
一、环境准备:
CentOS 系统主从两台、yum 源、防火墙关闭、各节点时钟服务同步、各节点之间可以通过主机名互相通信
二、安装步骤:
1、iptables -F && setenforing 清空防火墙策略,关闭 selinux
2、两台服务器都使用 yum 方式安装 keepalived 服务
三、修改配置文件:
1.修改 /etc/keepalived/keepalived.conf 配置文件内容
2、对 glob 段进行定义,添加管理员邮箱等
3、对 vrrp_instance 进行配置,配置一主一从,定义一个基于虚拟 IP 的实例
四、检验高可用的效果
1、配置完成后,观察两侧 IP 的是情况,看是否虚拟 IP 在主上配置成功
2、检查主从服务日志,服务是否运行正常,监测机制是否有效
3、停掉主服务上的 keepalived 服务,看虚拟 IP 是否正常转移到从节点上
4、观察日志,了解整个切换过程,之后启动主节点服务,看虚拟 IP 能否被主服务再接管
实现 keepalived 企业级高可用基于 LVS-DR 模式的应用实战:
一、环境准备:两台 centos 系统做 DR、一主一从,两台后端服务器实现过基于 LNMP 的电子商务网站
二、安装步骤:
1、两台服务器都使用 yum 方式安装 keepalived 服务
2、iptables -F && setenforing 清空防火墙策略,关闭 selinux
三、配置基于 DR 模式的 LVS 负载均衡集群:
vim /etc/keepalived/keepalived.conf
1. 对 glob 段进行定义,添加管理员邮箱
2、修改 keepalived 主 (lvs-server-master) 配置文件实现 virtual_instance
3、修改 keepalived 主 (lvs-server-master) 配置文件实现 virtual_server
4、修改 keepalived 从 (lvs-server-master) 配置文件实现 real_server
5、修改 keepalived 主 (lvs-server-backu) 配置文件实现 virtual_instance
6、修改 keepalived 从 (lvs-server-backup) 配置文件实现 virtual_server
7、修改 keepalived 从 (lvs-server-backup) 配置文件实现 real_server
四. 在两台主从负载均衡器上开启路由转发
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
五,在后端服务器的回环网卡上配置 vip,并将网关指向 vip
ifconfig lo:0 172.17.253.100 broadcast 172.17.253.100 netmask 255.255.255.255 up
route add -host 172.17.253.100 dev lo:0
六,在后端服务器关闭 arp
echo “1” > /proc/sys/net/ipv4/conf/lo/arp_ignore
#1 只回答目标 IP 地址是来访网络接口本地地址的 ARP 查询请求
echo “2” > /proc/sys/net/ipv4/conf/lo/arp_announce
#2 对查询目标使用最适当的本地地址. 在此模式下将忽略这个 IP 数据包的源地址并尝试选择与能与该地址通信的本地地址.
echo “1” > /proc/sys/net/ipv4/conf/all/arp_ignore
echo “2” > /proc/sys/net/ipv4/conf/all/arp_announce
# 关闭 arp 应答
(1): 仅在请求的目标 IP 配置在本地主机的接收到请求报文的接口上时,才给予响应
(2):必须避免将接口信息向非本网络进行通告
七,检验高可用的效果
两台负载均衡器都开启 keepalived 服务,我停止了负载均衡器主服务器的 keepalived 服务(模拟负载均衡器主服务器宕机),立刻负载均衡器从服务器会将主服务器上的 vip 拿过来(地址漂移),接替负载均衡器主服务器的工作,一旦负载均衡器主服务器被修好了,从新开启 keepalived 服务,由于默认为抢占模式,主服务器再将从服务器的 vip 给拿回来,继续工作,不会影响客户端访问。
好了,今天的内容就到这里,我们下期再见。
一些关于 Keepalived 相关教程集合:
CentOS 7 下 Keepalived + HAProxy 搭建配置详解 http://www.linuxidc.com/Linux/2017-03/141593.htm
Keepalived 高可用集群应用场景与配置 http://www.linuxidc.com/Linux/2017-03/141866.htm
Nginx+Keepalived 实现站点高可用 http://www.linuxidc.com/Linux/2016-12/137883.htm
Nginx+Keepalived 实现站点高可用(负载均衡) http://www.linuxidc.com/Linux/2016-12/138221.htm
构建高可用集群 Keepalived+Haproxy 负载均衡 http://www.linuxidc.com/Linux/2016-12/138917.htm
CentOS6.5 下 Keepalived 高可用服务单实例配置 http://www.linuxidc.com/Linux/2016-12/138110.htm
Keepalived 安装与配置 http://www.linuxidc.com/Linux/2017-02/140421.htm
Nginx 之 Keepalived 高可用 http://www.linuxidc.com/Linux/2017-05/143708.htm
基于 Keepalived 高可用集群网站架构实现的多种方法 http://www.linuxidc.com/Linux/2017-11/148571.htm
Linux 下 Keepalived 服务安装文档 http://www.linuxidc.com/Linux/2017-03/141441.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149079.htm