热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Keepalived高可用集群(还没细看)

介绍Keepalived软件起初是专门为LVS负载均衡软件设计的用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalive

介绍

Keepalived软件起初是专门为LVS负载均衡软件设计的用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能。因此,Keepalived除了能够管理LVS软件外,还可以作为其他服务的高可用解决方案软件。

Keepalived软件主要是通过VRRP协议实现高可用功能的,VRRP是Virtual Router Redundancy Protocol(虚拟路由器冗余协议)的缩写.VRRP出现的目的就是为了解决静态路由单点故障问题的

VRRP原理

技术图片

1.master在工作状态会不断群发一个广播包(内涵优先参数)

2.其他路由收到收到广播后会和自己的优先参数作对比,如果优先参数小于自己则什么都不执行,如果优先参数大于自己则开启争抢机制

3.如果启动了争抢机制,他就会群发自己的优先参数,最终优先参数最小的称为master路由.

keepalived的三个核心模块

core核心模块 chech健康监测  vrrp虚拟路由冗余协议

 Keepalived服务的三个重要功能

1.管理LVS    2.对LVS集群节点检查      3.作为系统网络服务的高可用功能

#其中3高可用可作为任意网络功能

Keepalived高可用故障切换转移原理

Keepalived高可用故障切换,是通过VRRP虚拟路由器冗余协议来实现的。  

在Keepalived服务正常工作时,主Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活着,当主Master节点发生故障时,就无法发送心跳消息,备节点无法检测到来自主Master节点心跳了,于是调用自身的接管程序,接管主Master节点的IP资源及服务。而当主Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

技术图片

keepalived搭建

yum -y install keepalived                #安装keepalived 
vim /etc/keepalived/keepalived.conf          #修改主keepalived配置文件
yum -y install openssh-clients             #安装scp 
scp /etc/keepalived/keepalived.conf root@192.168.50.149:/etc/keepalived/    #发从给从
/etc/init.d/keepalived start              #启动keepalived

Keepalived配置文件说明

技术图片
! Configuration File for keepalived              

global_defs {                        #全局定义部分
   notification_email {              #设置警报邮箱
     acassen@firewall.loc            #邮箱
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc      #设置发件人地址
   smtp_server 192.168.50.1        #设置smtp server地址
   smtp_connect_timeout 30          #设置smtp超时连接时间    以上参数可以不配置
   router_id LVS_DEVEL               #是Keepalived服务器的路由标识在一个局域网内,这个标识(router_id)是唯一的
}

vrrp_instance VI_1 {      #VRRP实例定义区块名字是VI_1
    state MASTER          #表示当前实例VI_1的角色状态这个状态只能有MASTER和BACKUP两种状态,并且需要大写这些字符ASTER为正式工作的状态,BACKUP为备用的状态
    interface eth0       
    virtual_router_id 51 #虚拟路由ID标识,这个标识最好是一个数字,在一个keepalived.conf配置中是唯一的, MASTER和BACKUP配置中相同实例的virtual_router_id必须是一致的.
    priority 100                #priority为优先级 越大越优先
    advert_int 1               #为同步通知间隔。MASTER与BACKUP之间通信检查的时间间隔,单位为秒,默认为1.
    authentication {           #authentication为权限认证配置不要改动,同一vrrp实例的MASTER与BACKUP使用相同的密码才能正常通信。
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {         #设置虚拟IP地址
        192.168.50.16         #此格式ip a显示 ifconfig不显示
        192.168.50.17/24 dev eth0 label eth0:1    #绑定接口为eth0,别名为eth0:1
   }
#至此为止以上为实现高可用配置,如只需使用高可用功能下边配置可删除
#以下为虚拟服务器定义部分
virtual_server 192.168.50.16 80 {      #设置虚拟服务器,指定虚拟IP和端口
    delay_loop 6                           #健康检查时间为6秒
    lb_algo rr                               #设置负载调度算法 rr算法
    lb_kind NAT                            #设置负载均衡机制 #有NAT,TUN和DR三种模式可选
    nat_mask 255.255.255.0         #非NAT模式注释掉此行  注释用!号
    persistence_timeout 50           #连接保留时间,50秒无响应则重新分配节点
    protocol TCP                           #指定转发协议为TCP 
    real_server 192.168.5.150 80 {      #RS节点1
        weight 1                #权重
        TCP_CHECK {             #节点健康检查
        connect_timeout 8       #延迟超时时间
        nb_get_retry 3          #重试次数
        delay_before_retry 3    #延迟重试次数
        connect_port 80         #利用80端口检查
    }
    }
    real_server 192.168.50.149 80 {      #RS节点2
        weight 1
        TCP_CHECK {
        connect_timeout 8
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80 
    }
    }
}  
技术图片

配置完毕后启动keepalived 并检测是否有虚拟端口

/etc/init.d/keepalived start
ip a | grep 192.168.50.16            #出现上述带有vip:192.168.50.16行的结果表示lb01的Keepalived服务单实例配置成功

技术图片
! Configuration File for keepalived
global_defs {
   notification_email {
    215379068@qq.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb02               #此参数和lb01 MASTER不同
}
vrrp_instance VI_1 {            #和lb01 MASTER相同
    state BACKUP                #此参数和lb01 MASTER不同
    interface eth0              #和lb01 MASTER相同
    virtual_router_id 55        #和lb01 MASTER相同
    priority 90                 #此参数和lb01 MASTER不同
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.50.17/24 dev eth0 label eth0:1
    }
}            #以下都相同
技术图片

配置完成后,启动Keepalived服务  并模拟实验 主从vip漂移(只需开启关闭主 .关闭主,主VIP消失从显示VIP ,开启主 从VIP消失,主VIP显示)

Keepalived单实例与多实例

单实主备配置文件的不同

router_id dd1                router_id dd2   路由标识

state MASTER     state BACKUP         主备状态

priority 100      priority 90                优先级

Keepalived双实例双主模式配置 

技术图片

启动两个vrrp   vrrp_instance VI_1和vrrp_instance VI_2   让他俩互为主从.

技术图片

解决高可用服务只针对物理服务器的问题

Keepalived软件仅仅在对方机器宕机或Keepalived停掉的时候才会接管业务。但在实际工作中,有业务服务停止而Keepalived服务还在工作的情况,这就会导致用户访问的VIP无法找到对应的服务

实现方法1.可以写守护进程脚本来处理,。当服务有问题时,就停掉本地的Keepalived服务,实现IP漂移到对端继续提供服务。

例 nginx高可用

技术图片
#!/bin/sh
while true
do
    if [ `netstat -antup | grep nginx | wc -l` -ne 1 ];then
        /etc/init.d/keepalived stop
    fi
    sleep 5
done
#此脚本的基本思想是若没有80端口存在,就停掉Keepalived服务实现释放本地的VIP。在后台执行上述脚本并检查:
技术图片

第二个方法:可以使用Keepalived的配置文件参数触发写好的监测服务脚本。首先要开发检测服务脚本,注意这个脚本与上一个脚本的不同。

#!/bin/bash
if [ `netstat -antup | grep nginx | wc -l` -ne 1 ];then
    /etc/init.d/keepalived stop
fi

在keepalived的配置文件加入以下模块

vrrp_script chk_nginx_proxy {       #定义vrrp脚本,检测HTTP端口
    script "/server/scripts/chk_nginx_proxy.sh"     #执行脚本,当Nginx服务有问题,就停掉Keepalived服务
    interval 2          #间隔2秒
    weight 2

解决多组Keepalived服务器在一个局域网的冲突问题

当在同一个局域网内部署了多组Keepalived服务器对,而又未使用专门的心跳线通信时,可能会发生高可用接管的严重故障问题。之前已经讲解过Keepalived高可用功能是通过VRRP协议实现的,VRRP协议默认通过IP多播的形式实现高可用对之间的通信,如果同一个局域网内存在多组Keepalived服务器对,就会造成IP多播地址冲突问题,导致接管错乱,不同组的Keepalived都会使用默认的224.0.0.18作为多播地址。此时的解决办法是,在同组的Keepalived服务器所有的配置文件里指定独一无二的多播地址,配置如下:

技术图片
global_defs {                                    #全局配置
router_id LVS_19                              #服务标识
vrrp_mcast_group4 224.0.0.19    #这个就是指定多播地址的配置
}
#提示:
1)不同实例的通信认证密码也最好不同,以确保接管正常。
2)另一款高可用软件Heartbeat,如果采用多播方式实现主备通信,同样会有多播地址冲突问题。    
技术图片

开发检测Keepalived裂脑的脚本

在备节点上执行脚本,如果可以ping通主节点并且备节点有VIP就报警,让人员介入检查是否裂脑。

技术图片
#!/bin/bash
lb01_vip=192.168.0.240
lb01_ip=192.168.0.221
while true
do
    ping -c 2 -W 3 $lb01_ip &>/dev/null
    if [ $? -eq 0 -a `ip a | grep "$lb01_vip" | wc -l` -eq 1 ];then
        echo "ha is split brain.warning."
    else
        echo "ha is OK"
    fi
    sleep 5
done
技术图片

可以将此脚本整合到Nagios或Zabbix监控服务里,进行监控报警。

可参考:https://www.iteye.com/blog/aoyouzi-2288124

Keepalived高可用集群(还没细看)


推荐阅读
  • Vim 编辑器功能强大,但其默认的配色方案往往不尽如人意,尤其是注释颜色为蓝色时,对眼睛极为不友好。为了提升编程体验,自定义配色方案显得尤为重要。通过合理调整颜色,不仅可以减轻视觉疲劳,还能显著提高编码效率和兴趣。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 本文介绍了 AngularJS 中的 $compile 服务及其用法,通过示例代码展示了如何使用 $compile 动态编译和链接 HTML 元素。 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • 解决Win10下MySQL连接问题:Navicat 2003无法连接到本地MySQL服务器(10061)
    本文介绍如何在Windows 10环境下解决Navicat 2003无法连接到本地MySQL服务器的问题,包括启动MySQL服务和检查配置文件的方法。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
author-avatar
mobiledu2502879833
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有