目录

  • keepalived原理

    • 高可用概念:
    • keepalived架构
    • keepalived特性
  • keepalived配置
    • 网址规划
    • 调度器的配置
    • web端的配置
  • 测试:

注:关于负载均衡如何使用命令或者脚本配置,可参考我这篇博文
LVS详解
本篇博文讲述如何使用keepalived实现配置ipvs并保证后端服务器的高可用性。

keepalived原理

高可用概念:

高可用(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架构

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,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所实现的功能是,其一当调度器有一台出现故障之后,能够切换到另一台备用的调度器,保证服务不受影响;其二,实时监测后端的realserver的状态,如果出现问题那么就将这台机器自动踢出,当该服务器状态

keepalived配置

网址规划

机器名称 IP配置 服务角色
lvs1 DIP:172.25.0.11 VIP:172.25.0.100 主调度器
lvs2 DIP:172.25.0.12 VIP:172.25.0.100 从调度器
web1 RIP:172.25.0.31 web服务器
web2 RIP:172.25.0.32 web服务器
web3 RIP:172.25.0.33 web服务器

调度器的配置

lvs1的配置

[root@lvs1 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs {#全局配置notification_email {#realserver故障时通知邮件的收件人地址root@localhost}notification_email_from root@xiaomi.com #发件人信息smtp_server 127.0.0.1  #发邮件服务器smtp_connect_timeout 30  #连接超时时间router_id KEEPALIVED_LVS #路由器的标识
}vrrp_instance VI_1 { #虚拟路由实例一state MASTER #承担角色,MASTER|BACKUPinterface ens34 #通告所使用的网络端口virtual_router_id 51  #虚拟路由的组ID,同一组主备要保持同一个IDpriority 100     #优先级信息 ,备结点需要更低advert_int 1     #VRRP通告间隔authentication {auth_type PASS  #认证机制auth_pass centos  #密码}virtual_ipaddress {172.25.0.100  #VIP的地址}
}virtual_server 172.25.0.100 80 {  #设置一个virtualServerdelay_loop 2 #服务轮询的时间间隔lb_algo wrr  #LVS的调度算法  rr|wrr|lc|wlc|lblc|sh|dhlb_kind DR   #LVS的模式选择  NAT|DR|TUNprotocol TCP  #指明健康检查使用的是TCP还是UDP
!   persistence_timeout 120  #会话保持时间,注意,若开启此功能,用户会在一定时间内,分配到同一个后端realServerreal_server 172.25.0.31 80 {weight 1 #每台服务器的权重HTTP_GET {url { ##请求的路径path /}}TCP_CHECK {  #TCP健康检测connect_timeout 3  #连接超时时间  nb_get_retry 3     #重连次数delay_before_retry 3  #重连间隔}}real_server 172.25.0.32 80 {weight 1HTTP_GET {url {path /}}TCP_CHECK {  #TCP健康检测connect_timeout 3  #连接超时时间  nb_get_retry 3     #重连次数delay_before_retry 3  #重连间隔}}real_server 172.25.0.33 80 {weight 1HTTP_GET {url {path /}}TCP_CHECK {  #TCP健康检测connect_timeout 3  #连接超时时间  nb_get_retry 3     #重连次数delay_before_retry 3  #重连间隔}}
}

配置完毕之后,将程序设定为开机自启动,启动服务

[root@lvs1 ~]# systemctl enable keepalived.service
[root@lvs1 ~]# systemctl start keepalived.service     

lvs2的配置
lvs2的配置与lvs1基本相同,主要需要改以下几个点

  • 角色名修改为BACKUP
    state BACKUP #承担角色,MASTER|BACKUP
  • 优先级调低
    priority 98 #优先级信息 ,备结点需要更低

    web端的配置

    降配置的步骤,写入脚本中,并设定为开机自启动。

    WEB端脚本

#!/bin/bash
#
# Script to start LVS DR real server.
# chkconfig: - 90 10
# description: LVS DR real server
#
.  /etc/rc.d/init.d/functionsVIP=172.25.0.100host=`/bin/hostname`case "$1" in
start)# Start LVS-DR real server on this machine. /sbin/ifconfig lo down/sbin/ifconfig lo upecho 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore#响应ip地址是在lo接口上的arp请求,其余的忽略。echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce# 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore#配置所有网卡只响应自己接口上的ip的arp请求,其余的忽略。echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce#必须避免将接口信息向非本网络进行通告/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up/sbin/route add -host $VIP dev lo:0;;
stop)# Stop LVS-DR real server loopback device(s). /sbin/ifconfig lo:0 downecho 0 > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho 0 > /proc/sys/net/ipv4/conf/lo/arp_announceecho 0 > /proc/sys/net/ipv4/conf/all/arp_ignoreecho 0 > /proc/sys/net/ipv4/conf/all/arp_announce;;*)# Invalid entry. echo "$0: Usage: $0 {start||stop}" exit 1
;;
esac

保存至/etc/init.d/lvs-rs,并赋予执行权限,然后添加为开机启动:

 [root@web1~]# chmod +x /etc/init.d/lvs-rs[root@web1 ~]# chkconfig --add lvs-rs[root@web1 ~]# chkconfig lvs-rs on[root@web1 ~]# /etc/init.d/lvs-rs start

web2和web3使用相同的配置即可

测试:

在后端的三台web服务器中设置不同的站点内容,在浏览器中访问,看是否能够得到不同的结果。注意清除浏览器的缓存以及keepalived中的会话保持选项。

lvs+keepalived实现负载均衡和高可用相关推荐

  1. haproxy+keepalived实现负载均衡及高可用

    HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高性能性.负载均衡,以及基于TCP和HTTP的应用程序代理.相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选 ...

  2. nginx日志打印header_小水敲黑板--Nginx+Keepalived实现负载均衡和高可用

    介绍: keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived是自动完成,不需人工干涉.主要提供loadb ...

  3. LVS原理详解及部署之五:LVS+keepalived实现负载均衡高可用

    本文我们主要讲解的是LVS通过keepalived来实现负载均衡和高可用,而不是我们第三篇文章介绍的通过手动的方式来进行配置.通过脚本的方式来显示RS节点的健康检查和LVS的故障切换.此文会通过一个实 ...

  4. LVS+Keepalived实现负载均衡高可用

    使用脚本实现LVS负载均衡 环境: 3台主机 DS:192.168.100.1 RS1:192.168.100.11 RS2:192.168.100.12 VIP:192.168.100.100 安装 ...

  5. LVS实现负载均衡及高可用

    LVS实现负载均衡及高可用 1 实验环境 1.1 虚拟机最小化封装 1.1.1 虚拟机母机安装 1.1.2 清理和压缩母机 1.1.3 创建子机 1.2 名词理解 2 lvs的工作模式 2.1 NAT ...

  6. keepalived介绍和keepalived实现nginx负载均衡机高可用

    1. keepalived简介 1.1 keepalived是什么? Keepalived 软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实 ...

  7. 用haproxy结合keepalived实现基于LNMP的负载均衡和高可用

    今天我们讲haproxy结合keepalived实现LNMP的负载均衡和高可用,现在的公司大部分都基于haproxy实现负载均衡.下面以一个事例去给大家详细讲解如何去实现: 一.用haproxy结合k ...

  8. 【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

    2019独角兽企业重金招聘Python工程师标准>>> 一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部 ...

  9. 借助LVS+Keepalived实现负载均衡

    一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务 ...

  10. nginx负载均衡和高可用

    代理和负载均衡的区别 代理负责把连接请求直接转发到后台某个web节点     负载均衡负责把请求使用某种调度算法分散发布给后台所有web节点 ----------------------------- ...

最新文章

  1. 谷歌无人车之父刚推出的“无人驾驶入门”课,到底能学到啥?
  2. java实验报告二_Java实验报告(实验二)
  3. [javaSE] 网络编程(URLConnection)
  4. TextView设置文字包含中英文时自动换行问题的终极解决方案
  5. python生成数据库指令_Python学习—数据库操作
  6. [Ruby][3] 条件语句
  7. opencv角点检测学习总结
  8. 【转】java提高篇(二)-----理解java的三大特性之继承
  9. Redis系列 --第一篇
  10. POJ 1661 DP
  11. ubuntu 18.04忘记登录密码的破解方法
  12. 在本地测试一次成功的AJAX请求
  13. java全世界各国城市地址解析
  14. 诺基亚e7刷linux,当之无愧的机皇 诺基亚E7-00十大细节解析
  15. 用jsp代码完成购物车并且实现添加功能
  16. java 字符串排列组合_字符串排列组合问题
  17. KMPlayer 一打开总是出现右面的窗口 导航区 怎样设置不会自动打开
  18. 中国十大最具影响力黑客
  19. PPT处理控件Aspose.Slides功能演示:使用 C# 在 PowerPoint 演示文稿中创建 SmartArt
  20. Spring Cloud + Mybatis 多数据源配置

热门文章

  1. 60 秒 Linux 检查清单,快速初步定位你的性能问题
  2. 敏捷无敌(13)之兵不厌诈
  3. 优化理论08-----约束优化的最优性条件、拉格朗日条件、凸性、约束规范、二阶最优性条件(上)
  4. 「三分钟系列01」3分钟看懂快速排序
  5. conflicting declaration ‘typedef struct LZ4_stream_t LZ4_stream_t’解决
  6. flex布局 详细开发教程
  7. Futter基础第20篇: 实现轮播图 flutter_swiper
  8. 1005 继续(3n+1)猜想 (25 分)—PAT (Basic Level) Practice (中文)
  9. wrk -- 小巧轻盈的 http 性能测试工具.
  10. 微信AES-128-CBC加密解密