高可用集群技术之keepalived实现lvs高可用并负载均衡web服务

Keepalived概述:

Keepalived的作用是检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器.

keepalived实现lvs高可用并负载均衡web服务:

准备工作:

2台keepalived节点为: node1.samlee.com node2.samlee.com

2台realserver服务为: node3.samlee.com node4.samlee.com

1、配置RSserver过程如下(node3.samlee.com\node4.samlee.com):

(1)部署web服务(使用nginx配置)

# yum -y install nginx-1.10.0-1.el6.ngx.x86_64.rpm

(2)禁用防火墙及主机名修改

# service iptables stop
# chkconfig iptables off

(3)配置路由转发及转发模块配置

# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
# echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore 
# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

--添加路由条目
# ifconfig lo:0 172.16.100.99 netmask 255.255.255.255 broadcast 172.16.100.99 up
# route add -host 172.16.100.99 dev lo:0

2、配置keepalived服务器

(1)安装ipvsadm负载均衡管理器

# yum -y install ipvsadm

(2)安装keepalived

# yum -y install keepalived
# chkconfig keepalived on

(3)配置keepalived默认初始状态如下:(主节点:master状态)

# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected] 
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30
   router_id LVS_DEVEL             #物理路由id,一般指定为本机的hostname
}
vrrp_instance VI_1 {                #vrrp实例配置段
    state MASTER                    #指定keepalived服务运行状态
    interface eth0                  #指定keepalived的心跳口
    virtual_router_id 51            #指定虚拟路由id(1~255),同一vrrp实例的主备keepalived必须配置为一样
    priority 101                    ##指定起始优先级,优先级高的会成为master
    advert_int 1                    #vrrp通告的发送间隔
    authentication {                #配置通过密码认证
        auth_type PASS
        auth_pass keepalivedpass
    }
    virtual_ipaddress {
    172.16.100.99 dev eth0 label eth0:0    #定义VIP
    }
}

(4)配置keepalived默认初始状态如下:(备节点:backuo状态)

# vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected] 
   smtp_server 127.0.0.1 
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP 
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keepalivedpass
    }
    virtual_ipaddress {
    172.16.100.99 dev eth0 label eth0:0
    }
}

(5)调用周期性检测down文件是否存在来控制keepalived服务的主备切换

在keepalived.conf添加如下内容:

全局配置的段下添加如下:
vrrp_script chk_downfile {         #服务状态检测脚本配置段
    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"         #通过周期性检测down文件是否存在来控制keepalived服务的主备切换
    interval 1     #指定检测间隔为1秒
    weight -2     #指定检测失败时,优先级减2;检测的成功或失败是由script后面指定的命令或脚本执行返回的状态码决定的,0表示成功,非0表示失败
}

在vrrp_instance VI_1 ##vrrp实例配置段添加如下:
track_script {
    chk_downfile          #通过指定上面定义监控脚本来监控服务状态,以完成主备切换
}

重启keepalived服务创建down文件测试:

# service keepalived restart
# touch /etc/keepalived/down

---在/etc/keepalived/下建立down文件可实现主备模式切换

(6)调用外部脚本检测web(nginx)健康状态

建立/etc/keepalived/chkngx.sh脚本

#/bin/bash
#/etc/keepalived/chkngx.sh
#
if pkill -0 nginx>/dev/null; then
        [ `curl -sL -w %{http_code} http://localhost -o /dev/null` -eq 200 ] && exit 0
else
        service nginx start
fi
exit $?

授予脚本执行权限:

# chmod +x /etc/keepalived/chkngx.sh

配置keepalived.conf调用外部脚本

全局配置的段下添加如下:
vrrp_script chkngx {
    script "/etc/keepalived/chkngx.sh"    #指定用于检测nginx服务的执行脚本路径
    interval 1        #监测间隔
    weight -2         #失败时,优先级减2
    fall 3          # 指定nginx检测脚本连续执行失败次数为3,才进行Failover
    rise 3          # 指定nginx检测脚本连续执行成功次数为3,才进行Failback
}

在vrrp_instance VI_1 ##vrrp实例配置段添加如下:
track_script {
    chkngx          #通过指定上面定义监控脚本来监控服务状态,监控nginx监控状态
}

(7)使用通知脚本实现如何在vrrp事务发生时,发送警告邮件给指定的管理员? 比如:主从节点故障时

建立脚本监控脚本如下:

# vim /etc/keepalived/notify.sh 
#!/bin/bash
#

declare -a vips=(172.16.100.98 172.16.100.99)
contact=‘[email protected]‘
Usage() {
        echo "Usage:`basename $0`{master|backup|fault}"
}

Notify() {
    if [ "$2" = "VI_1" ]; then
        vip=${vips[0]}
    echo $vip
    elif [ "$2" = "VI_2" ]; then
        vip=${vips[1]}
    echo $vip
    fi
    suject="`hostname`‘s state chaged to $1"
    mailbody="`date  +%F--%H:%M:%S`: `hostname`‘s state chage to $1,vip floating..."
    echo $mailbody | mail -s  "$subject" $contact 
    echo $mailbody >> /tmp/keepalived.log
}

case $1 in
    master)
    Notify master
        exit 0
    ;;
    backup)
    Notify backup
        exit 0
    ;;
    fault)
    Notify fault
        exit 0
    ;;
    *)
        Usage 
        exit 1
    ;;
esac

授予脚本执行权限:

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

配置keepalived.conf调用外部脚本

在vrrp_instance VI_1 ##vrrp实例配置段最后添加如下:
notify_master "/etc/keepalived/notify.sh master"        #状态变为master时,触发的通知脚本
notify_backup "/etc/keepalived/notify.sh backup"        #状态变为backup时,触发的通知脚本
notify_fault "/etc/keepalived/notify.sh fault"          #状态变为fault时,触发的通知脚本
notify "/etc/keepalived/notify.sh"    #当发生所有的状态改变时,会先触发对应的状态通知脚本后,再触发该脚本

(8)使用脚本根据down文件检测实现主从状态转换

# vim /etc/keepalived/convert_state.sh
#!/bin/bash
#

usage() {
    echo "./`basename $0` {master|backup}"
    exit 1
}

if [ $# -eq 0 ]; then
    usage
fi

if [[ "$1" = "master" ]]; then
    [ -f /etc/keepalived/down ] && rm -f /etc/keepalived/down
elif [[ "$1" = "backup" ]]; then
    [ ! -f /etc/keepalived/down ] && touch /etc/keepalived/down
else
    usage
fi
sleep 1

# chmod +x /etc/keepalived/convert_state.sh

执行脚本convert_state进行备节点转换:

# /etc/keepalived/convert_state.sh backup
# ls /etc/keepalived/ | grep down
down

执行脚本convert_state进行主节点转换:

# /etc/keepalived/convert_state.sh master

(9)LVS+keepalived配置ipvs规则实现负载均衡高可用

配置如下:

virtual_server 172.16.100.99 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.0.0
    # persistence_timeout 50
    protocol TCP
    sorry_server 127.0.0.1 80        #如果所有节点都down机,将转向本地web服务

    real_server 172.16.100.8 80 {
        weight 1
        HTTP_GET {                    #web健康状态检测
            url {
              path /
              status_code 200 
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.100.9 80 {
        weight 1
        HTTP_GET {                    #web健康状态检测
            url {
              path /
              status_code 200 
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

最后查询ipvs规则,如下所示:

# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  172.16.100.99:80                    3       22        0     4657        0
  -> 172.16.100.8:80                     0        0        0        0        0
  -> 172.16.100.9:80                     0        0        0        0        0

以上为keepalived+lvs+web服务实现所有内容。

keepalived双主模型配置案例如下:

master1为:

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keepalivedpass
    }
    virtual_ipaddress {
    172.16.100.99 dev eth0 label eth0:0
    }
    track_script {
    chk_downfile
    }
    track_script {
    chkngx
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
    notify "/etc/keepalived/notify.sh"
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keepalivedpass
    }
    virtual_ipaddress {
        172.16.100.98 dev eth0 label eth0:1
    }
    track_script {
        chk_downfile
    }
    track_script {
        chkngx
    }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
        notify "/etc/keepalived/notify.sh"
}

master2为:

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keepalivedpass
    }
    virtual_ipaddress {
    172.16.100.99 dev eth0 label eth0:0
    }
    track_script {
    chk_downfile
    chkngx
    }
    track_script {
    chkngx
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
    notify "/etc/keepalived/notify.sh"
}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass keepalivedpass
    }
    virtual_ipaddress {
        172.16.100.98 dev eth0 label eth0:1
    }
    track_script {
        chk_downfile
    }
    track_script {
        chkngx
    }
        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"
        notify "/etc/keepalived/notify.sh"
}
时间: 2024-10-25 20:07:00

高可用集群技术之keepalived实现lvs高可用并负载均衡web服务的相关文章

keepalived高可用集群技术介绍及实战演练

一.Keepalived是什么 Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器. 二.Keepalived的特性 配置文件简单:配置文件比较简单,可通过简单配置实现高可用功能 稳定性强:keepalived是一个类似于

高可用集群技术理论基础知识

目录 1.引言 2.高可用架构框架 3.资源的约束与隔离 4.高可用模型 5.配置高可用架构的前提 1.引言 一言以蔽之,高可用集群技术是为了解决业务因服务器宕机而中断业务的一种技术,它能保障业务7*24*365不间断. 在linux开源的世界里,常见的开源解决方案有如下: keepalived(vrrp+script) heartbeat corosync+pacemaker 要想用好这些开源软件,不得不先来了解一下一个高可用集群中的一些基础知识. 2.高可用架构框架 高可用架构一般可分为以下

高可用集群技术之heartbeat+NFS实现web服务高可用(文本方式配置接口--gui图形配置)

一.高可用集群基本概念   什么是高可用技术呢?在生产环境中我既要保证服务不间断的服务又要保证服务器稳定不down机,但是异常还是会发生,比如说:服务器硬件损坏...导致服务器down机,我该如何保证服务器down机后继续提供服务呢?这时我就应该请出高可用技术来帮忙了,当我们的服务器发生故障后不能继续时,高可用集群技术解决将业务及服务自动转移至其他主机服务器上继续服务,保证服务架构不间断运行. 高可用集群的架构层次: 后端主机层: 这一层主要是正在运行在物理主机上的服务. 2.Message l

高可用集群技术之corosync应用详解(一)

Corosync概述: Corosync是集群管理套件的一部分,它在传递信息的时候可以通过一个简单的配置文件来定义信息传递的方式和协议等.它是一个新兴的软件,2008年推出,但其实它并不是一个真正意义上的新软件,在2002年的时候有一个项目Openais , 它由于过大,分裂为两个子项目,其中可以实现HA心跳信息传输的功能就是Corosync ,它的代码60%左右来源于Openais. Corosync可以提供一个完整的HA功能,但是要实现更多,更复杂的功能,那就需要使用Openais了.Cor

高可用集群技术之corosync案例应用及pcs使用详解(二)

案例概述: 案例(一):使用ansible全自动化配置corosync集群环境 在生产环境中,经常遇到需要配置集群环境或相同配置的服务器,如果手工一台一台的去调试,这样会增加我们再运维过程中的工作量及错误的发生,我们应怎样去优化及减少错误的发生?下面我们通过一个案例实现自动化部署corosync环境: 准备工作: (1)将已经配置好的corosync配置文件做好模板存放 # mkdir -pv ansible/corosync/{conf,packages} # cp -p /etc/coros

Linux系统高可用集群软件之Keepalived

Keepalived 集群软件是一个基于VRRP协议来实现的LVS(四层协议)服务高可用方案,可以利用避免单节点故障.LVS服务需要有2台服务器运行Keepalived服务,一台为主服务器(MASTER),一台为备份服务器(BACKUP),但是对外只有一个虚拟IP,主服务器会发送特定的消息给备份服务器,当备份服务器收不到这个消息的时候,备份服务器认为主服务器宕机并会接管虚拟IP提供服务,从而保证了服务的高可用性. 1.环境说明 系统:Centos 6.5 64位 软件:Keepalived ip

高可用集群技术之RHCS应用详解(一)

前提:1)本配置共有3个测试节点,分别node1.samlee.com.node2.samlee.com和node3.samlee.com,相的IP地址分别为172.16.100.6.172.16.100.7和172.16.100.8:系统为 CentOS 6.5 X86_64bit: 2)node4.samlee.com 172.16.100.9 作为共享存储使用 3)director.samlee.com 172.16.100.3 作为RHCS管理平台使用 4)集群服务为apache的htt

基于HAProxy+Keepalived高可用负载均衡web服务的搭建

一 原理简介 1.HAProxyHAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种解决方案.HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理.HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接.并且它的运行模式使得它可以很简单安全的整合进当前的架构中, 同时可以保护web服务器不被暴露到网络上.2.KeepalivedKeepalived 是一个基于VRRP协议来实现的LVS服务高

keepalived + nginx 实现高可用集群方案

keepalived + nginx 实现高可用集群方案 一.使用场景介绍: nginx做负载均衡,来达到分发请求的目的,但是不能很好的避免单点故障,假如nginx服务器挂点了,那么所有的服务也会跟着瘫痪 .keepalived+nginx,就能很好的解决这一问题. 二.原理介绍: Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故 障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用. Keepalived 以 VRRP