备胎的养成记KeepAlived实现热备负载

  在  入坑系列之HAProxy负载均衡 中已经详细讲过了怎么将高并发的请求按均衡算法分发到几台服务器上做均衡防止单机崩溃。

  但这样的话有没有发现所有请求都经过了HAproxy代理,自然当并发量越来越高时HAproxy就成了瓶颈,突发时HAproxy就会挂掉,或HAproxy服务器出现故障,这时外部唯一的请求入口没有了,怎么办?重启是个办法,但还是需要抢修时间,这期间内客户都无法访问损失的锅又得程序猿来背。

  这种情况下备胎出现了, Keepalived登场,他可以解决服务宕机自动无缝切换。

Keepalived采用VRRP(virtual router redundancy protocol,虚拟路由冗余协议)热备份协议,以软件的方式实现linux服务器的多机热备功能。VRRP是针对路由器的一种备份解决方案——由多台路由器组成一个热备组。通过共用的虚拟IP地址对外提供服务;每个热备组内同一时刻只有一台主服务器提供服务,其他服务器处于冗余状态,若当前在线的服务器失败,其他服务器会自动接替(优先级决定接替顺序)虚拟IP地址,以继续提供服务。
keepalived 默认需要使用D类多播地址224.0.0.18 进行心跳通信
keepalived 使用vrrp协议(虚拟路由冗余协议)进行通信(协议号码为112)

  Keepalived也可以与LVS、Nginx、MySQL等结合使用,形成可靠的主备机,给了你宝贵的抢修时间。

  下面来讲如何一步步搭建。

环境  

  CentOS6.X

  HAProxy 1.7.3

  Keepalived 1.3.4

  用root用户安装

下载

  若在线安装不用下载,可直接通过yum命令安装(建议),不过需要联网。

  去官网下载 :http://www.keepalived.org/software/keepalived-1.3.4.tar.gz

  下载后放进CentOS中的/usr/local/ 文件夹中

安装   

  分两种:

  1、在线装:yum install -y ipvsadm keepalived (建议)

  2、安装包;

  此处按照下载好的安装包操作:

[root@H32 local]#tar -zxvf keepalived-1.3.4.tar.gz
[root@H32 local]#cd keepalived-1.3.4

[root@H32 keepalived-1.3.4]#./configure --prefix=/usr/ --sysconfdir=/etc/
[root@H32 keepalived-1.3.4]#make
[root@H32 keepalived-1.3.4]#make install

 

  在此之前还需要设置主备机的时间一致,可用ntpdate向时间服务器同步,具体的方法有时间再详细说明。

设置

   修改keepalived.conf文件配置

[root@H32 ~]# vi /etc/keepalived/keepalived.conf

  具体配置内容:

! Configuration File for keepalived

global_defs {
   notification_email {
     root@localhost #接受邮件方
   }
   notification_email_from soul@104.com #发件人
   smtp_server 127.0.0.1 #邮件服务器
   smtp_connect_timeout 30 #超时时长
   router_id LVS_DEVEL #ID;随意即可
}

vrrp_script chk_state_down {
    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" #如果在/roo/下有down文件;就失败;转移到从上;否则正常
    interval 2
    weight 3
}

vrrp_script chk_haproxy {
  script "/etc/keepalived/chk_haproxy.sh" # 设置执行的脚本,可以是脚本,也可以是命令
  interval 2 # script执行周期,每个interval执行一次健康检查
  weight 2 # 健康检查返回0 & weight大于0,优先级增加相应权值;健康检查非0 & weight小于0,优先级减小相应值;
      # 不管提高优先级还是降低优先级,最终优先级的范围是在[1,254],不会出现优先级小于等于0或者优先级大于等于255的情况
}

vrrp_instance VI_1 { # VRRP 配置标识 VI_1是实例名称,一个文件可配置多个
    state MASTER  # 指定Keepalvied角色 MASTER表示此主机为主服务器 BACKUP则是表示为备用服务器
                  # 当master出现异常后,backup自动切换为master。当backup成为master后,master恢复正常后会再次抢占成为master,导致不必要的主备切换。
           # 实际应用中,可以将两台keepalived初始状态均配置为backup,设置不同的优先级,优先级高的设置nopreempt(非抢占)解决异常恢复后再次抢占的问题。
    interface eth0 # 节点固有IP(非VIP)的网卡,用来发VRRP包
    virtual_router_id 111  # 虚拟路由标识(0-255),同一个VRRP实例使用唯一的标识,DB中的规范是使用节点IP的最后一位。如10.10.16.51的51 (主备相同)
    priority 100  # 节点优先级,数字越大表示节点的优先级越高。keepalived启动时会通过选举将优先级最高的节点选举为master。如果某个节点初始state是master,但是优先级低,该节点会变成backup
    advert_int 1  # 发送通告的时间间隔,
                   # 按照vrrp的官方文档,backup会接收master的advert_int的值,然后计算出skew time和master down interval,认为master宕机触发的选举时间应该是(3 * Master_Adver_Interval) + Skew_time
    authentication {
        auth_type PASS
        auth_pass 1111   # 同一 vrrp 实例MASTER 与 BACKUP 使用相同的密码才能正常通信 (主备相同)
    }
    virtual_ipaddress {
        192.168.80.114  # 设置虚拟IP地址 (VIP),又叫做漂移IP地址 可以有多个,每个一行 (主备机必须相同,也是对外的虚拟IP)
    }

    track_script {
      chk_haproxy  # 该实例需要执行的健康执行脚本,每个一行
      chk_state_down
    }

    notify_master "/etc/keepalived/notify.sh master 192.168.80.114"
    notify_backup "/etc/keepalived/notify.sh backup 192.168.80.114"
    notify_fault "/etc/keepalived/notify.sh fault 192.168.80.114"  # 状态切换为master/backup/fault时执行对应的脚本
}
                    

  说明:

因为Keepalived在转换状态时会依照状态来呼叫:
当进入Master状态时会呼叫notify_master
当进入Backup状态时会呼叫notify_backup
当发现异常情况时进入Fault状态呼叫notify_fault
当Keepalived程序终止时则呼叫notify_stop

  配置中notify.sh:

[root@H32 ~]# vi /etc/keepalived/notify.sh

  配置内容:

#!/bin/bash
# description: An example of notify script
#
contact='root104@localhost'
notify() {
mailsubject="`hostname` to be $1: $2 floating"
mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
echo $mailbody | mail -s "$mailsubject" $contact
}

case "$1" in
master)
notify master
/etc/rc.d/init.d/haproxy start
exit 0
;;
backup)
notify backup
/etc/rc.d/init.d/haproxy stop
exit 0
;;
fault)
notify fault
/etc/rc.d/init.d/haproxy stop
exit 0
;;
*)
echo 'Usage: `basename $0` {master|backup|fault}'
exit 1
;;
esac

  其中chk_haproxy.sh

[root@H32 ~]# vi /etc/keepalived/chk_haproxy.sh

  添加内容:

#!/bin/bash
#
# author: weizhifeng
# description:
# 定时查看haproxy是否存在,如果不存在则启动haproxy,
# 如果启动失败,则停止keepalived
#
status=$(ps aux|grep haproxy | grep -v grep | grep -v bash | wc -l)
if [ "${status}" = "0" ]; then
    /etc/init.d/haproxy start

    status2=$(ps aux|grep haproxy | grep -v grep | grep -v bash |wc -l)

    if [ "${status2}" = "0"  ]; then
            /etc/init.d/keepalived stop
    fi
fi

  将以上三个文件全部更改后 复制一份到备机;注意根据上述高亮描述进行更改。(非常重要)

  还要给chk_haproxy.sh和notify.sh执行脚本的权限。

chmod  +x  /etc/keepalived/notify.sh
chmod  +x  /etc/keepalived/chk_haproxy.sh

 

启动

   配置完后进行启动keepalived 和haproxy,主备机均要启动:

service keepalived start

   其它命令:

service keepalived stop #停止

service keepalived restart #重启
service keepalived enable #开机启动

测试

  down掉主机的haproxy,查看haproxy监控访问VIP:192.168.80.32:8089/stats,看haproxy的ID是否有变化,然后重启主机的haproxy,再看haproxy的ID是否有变化。

   执行ip a查看VIP在两台机子上有变化

[root@H32 ~]# ip a

 

思考:

  虚拟IP必须与master 和 备机 在同一网段,经测试若虚拟IP与他们不在同一网段访问不了VIP。

  防止keepalived互抢IP的办法,这个也有网有提出过,有相应的方法。

  主备机互作主备,即主机也是备机,可以做配置多个实例来实现。

  有网友测试出Keepalived限制死20个VIP问题,那这个是怎么解决的。

  有时主备机都出现绑定了VIP,这时最可能的是主备机间无法通讯,最简单的测试方法是关掉两机的防火墙,再试,由于Keepalived基于vrrp 通讯,因此还需要加vrrp和防火墙:(在入坑系列之HAProxy负载均衡 中提到过)

vi /etc/sysconfig/iptables  #编辑

-A RH-Firewall-1-INPUT -d 224.0.0.18 -j ACCEPT  #允许组播地址通信(在做keepalived时用得到)
-A RH-Firewall-1-INPUT -p    vrrp    -j ACCEPT  #允许VRRP(虚拟路由器冗余协)通信
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  #允许80端口通过防火墙
:wq! #保存退出
service iptables restart #重启防火墙使配置生效

 

时间: 2024-09-24 23:43:50

备胎的养成记KeepAlived实现热备负载的相关文章

Nginx+Keepalived(双机热备)搭建高可用负载均衡环境(HA)

基于 Nginx+Tomcat+Redis负载均衡Session共享来实现后续的功能 个人微信小程序.是关于人工智能的.应用是百度大脑 和 腾讯优图的人脸识别 有问题加QQ:783021975 验证问题写明在哪知道的QQ.直接说问的问题.会在不忙的时候回复你.毕竟我也有自己的工作要做. 一张简单的图说下大概的意思 安装Keepalived到CentOS虚拟机环境(2个虚拟机都安装) 使用的版本为keepalived-1.2.24.tar.gz 为了方便安装,在系统里面提前下载好相关的库 yum

lvs+keepalived实现LB热备实现网站高可用

在lvs高负载中,LB节点(也就是常说的DR)会存在单点问题:这里使用了keepalived来解决单点问题:实现冗余: 看图操作: LB1:eth0:192.168.182.133  (vip:eth0:0 192.168.182.200) LB2: eth0:192.168.182.138  (vip: eth0:0 192.168.182.200) rs1: eth0:192.168.182.130  (vip: lo:0   192.168.182.200) rs2: eth0:192.1

Centos 6.0系统lvs+keepalived+mysql实现mysql数据库热备主主复制

今天这篇文章接着昨天的相关知识,一样是为了前天刚做的mysql热备: 大家知道实现mysql_Ha的方案有很多,常见的heartbeat.keepalived,这里说的就是keepalived,优点就是简单,快速,下面就是详情了: 1.系统:Centos6.0:lamp平台(lamp平台是我一个习惯,非必须) vip:192.168.135.200 master:192.168.135.134 slave:192.168.135.135 实现134实时复制135,135实时复制134,也就是说修

LVS+Keepalived实现负载均衡和双机热备

 1. 说明          在<keepalived实现Tomcat服务双机热备>中主要讲述如何安装及配置Keepalived来实现双机热备,主要功能是:MASTER和BACKUP两台服务器处于热备状态,对用户虚拟一个IP,屏蔽底层的真实IP地址,用户通过虚拟IP访问当前的MASTER服务器:当MASTER服务器宕机或者发生其他故障时,BACKUP自动切换为MASTER,这个过程对用户时透明的.          本文主要讲述如何安装ipvsadm.如何配置LVS+Keepalived实现

Mysql + keepalived 实现双主热备读写分离

Mysql + keepalived 实现双主热备读写分离 架构图 系统:CentOS6.4_X86_64 软件版本:Mysql-5.6.12,Keepalived-1.2.7 环境简介: 1.Master-A 192.168.1.168 (Mysql+Keepalived) 2.Master-B 192.168.1.169 (Mysql+Keepalived) 3.写入VIP 192.168.100 (168主,169从) 4.读取VIP 192.168.200 (169主,168从) 此处略

keepalived实现Tomcat服务双机热备

项目中需要采用tomcat双机热备机制,以确保系统性能.本人通过查阅资料以及亲自实现完成,写下这篇博文,供个人读者参考. 1. 规划 1.1服务器环境规划 负载服务器master及WEB服务器1真实IP:10.10.195.53 负载服务器backup及WEB服务器2真实IP:10.10.195.190 负载服务器虚拟ip:10.10.195.212 1.2 软件环境规划 操作系统:Red Hat Enterprise Linux Server release 5.6 (Tikanga) kee

Linux双机热备解决方案之Heartbeat

拓扑图: 环境描述: 操作系统:CentOS6.3_x64 主:eth0 192.168.10.10 心跳:eth1 192.168.1.10 备:eth0 192.168.10.20 心跳:eth1 192.168.1.20 VTP:192.168.128.5 heartbeat(Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内

双机热备常见问题与方案选择

问题 对于企业重要的应用系统而言,保证系统能持续.可靠地提供服务是非常重要的,因此就出现了对高可用性的需求和高可用性的解决方案. 对于如何选择高可用性的解决方案,特别是关于双机热备的方案选择,常见的有以下问题: Q:已经采取了RAID技术和数据备份技术,还有必要做双机吗? A:参见:双机热备与数据备份的关系 Q:高可用性的解决方案有哪些? A:从广义讲,高可用性包括一切避免系统服务中断的技术.而一般所说的系统高可用性,往往特指服务器的双机或多机热备/容错. Q:什么时候需要双机热备? A:决定是

双机热备常见问题及解决方案

对于企业重要的应用系统而言,保证系统能持续.可靠地提供服务是非常重要的,因此就出现了对高可用性的需求和高可用性的解决方案. 对于如何选择高可用性的解决方案,特别是关于双机热备的方案选择,常见的有以下问题: Q:高可用性的解决方案有哪些? A:从广义讲,高可用性包括一切避免系统服务中断的技术.而一般所说的系统高可用性,往往特指服务器的双机或多机热备/容错. Q:什么时候需要双机热备? A:决定是否使用双机热备,正确的方法是要分析一下系统的重要性以及对服务中断的容忍程度,以此决定是否使用双机热备.即