keepalive构建高可用LVS集群

一、什么是keepalived?

利用虚拟路由冗余协议(vrrp)技术,实现lvs的高可用,也可以对nginx和haproxy等轻量级带有负载均衡的软件进行高可用。因为keepalived非常轻量级,速度非常快,配置简单,所以受到众多企业运维人员青睐。

参考资料:http://outofmemory.cn/wiki/keepalived-configuration




二、虚拟路由备份协议

VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种容错协议,这个协议内的所有路由分为主备,平时数据都是由主节点的IP接口接收转发,一旦主节点故障,就自动启动备用节点,夺取主节点的IP,接管主节点的所有转发工作。



三、案例:KeepAlived 实现高可用 LVS

    1、环境准备

  1.   准备两个http节点:172.16.113.13          172.16.113.14            vip:172.16.13.1
  2.   准备两个lvs节点:  172.16.13.13            172.16.13.14             vip:172.16.13.1
  3.   测试两个lvs节点可不可以对后面两个http节点进行负载均衡
  4.   配置keepalived:172.16.13.13     172.16.13.14                         vip:172.16.13.1
  5.   测试keepalived对lvs的高可用性



     2、网络拓扑图




    3、两个http节点上的配置


1)安装并开启http服务,确保80端口开启可用;

2)配置lvs-RS

# vim chk-lvs.sh               //写个脚本配置方便多了,只要执行以下就可以了
#!/bin/bash
vip=172.16.13.1
interface="lo:0"
case $1 in
start)
    echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    ifconfig $interface $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip dev $interface
;;
stop)
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
    echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
    ifconfig $interface down
;;
status)
    if ifconfig lo:0 |grep $vip &> /dev/null; then
echo "ipvs is running."
    else
echo "ipvs is stopped."
    fi
;;
*)
    echo "Usage: `basename $0` {start|stop|status}"
    exit 1
esac
# service httpd start
# bash chk-lvs start

3)浏览器分别输入172.16.113.13和172.16.113.14测试http服务是否可用



    4、准备两个LVS节点并测试可用


1) 安装ipvsadm

2)  配置ipvs规则

3) 测试lvs负载均衡是不是可用

# yum install ipvsadm -y

# vim ipvs.sh 
#!/bin/bash
vip=172.16.13.1
rip=(‘172.16.113.13‘ ‘172.16.113.14‘)
weight=(‘1‘ ‘2‘)
port=80
scheduler=rr
ipvstype=‘-g‘
case $1 in
start)
    iptables -F -t filter
    ipvsadm -C
    ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
    route add -host $vip dev eth0:0
    echo 1 > /proc/sys/net/ipv4/ip_forward
    ipvsadm -A -t $vip:$port -s $scheduler
    [ $? -eq 0 ] && echo "ipvs service $vip:$port added."  || exit 2
    for i in `seq 0 $[${#rip[@]}-1]`; do
        ipvsadm -a -t $vip:$port -r ${rip[$i]} $ipvstype -w ${weight[$i]}
        [ $? -eq 0 ] && echo "RS ${rip[$i]} added."
    done
    touch /var/lock/subsys/ipvs
;;
stop)
    echo 0 > /proc/sys/net/ipv4/ip_forward
    ipvsadm -C
    ifconfig eth0:0 down
    rm -f /var/lock/subsys/ipvs
    echo "ipvs stopped."
;;
status)
    if [ -f /var/lock/subsys/ipvs ]; then
echo "ipvs is running."
ipvsadm -L -n
else
echo "ipvs is stopped."
fi
;;
*)
    echo "Usage: `basename $0` {start|stop|status}"
exit 3
;;
esac
   
# bash ipvs.sh start
# ipvsadm -Ln

4)浏览器输入172.16.13.1测试DR模型能不能负载




    5、安装配置keepalived


# yum install keepalived -y
# vim /etc/keepalived/keepalived.conf
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   //运行Keepalived服务器的一个标识。发邮件时显示在邮件标题中的信息
}
vrrp_script chk_mt_down {           //定义一个函数,检测外部因素决定权重的增加或删除
    script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"     //如果检测到down文件,就自动减5个数值的权重
    interval 1                     //一秒检测一次
    weight -5 
}
vrrp_instance VI_1 {              //定义一个vrrp实例
    state BACKUP                  //装态有两个MASTER  /  BACKUP
    interface eth0                //指定网卡
    virtual_router_id 52    //虚拟路由标识,这个标识是一个数字,并且同一个vrrp实例使用唯一的标识,即同一个vrrp_instance下,MASTER和BACKUP必须是一致的,范围0-255
    priority 95           //定义优先级,数字越大,优先级越高,在一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级。
    advert_int 1          //设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {                 //设定认证机制
        auth_type PASS               //设置验证类型,主要有PASS和AH两种
        auth_pass 21111             //主备密码必须相同
    }
    virtual_ipaddress {    //虚拟ip可以定义多个;格式:ip/16 dev eth2 label eth2:1  
        172.16.13.1
    }
        track_script {        //在这里定义一个函数,追踪上面定义的chk_mt_down函数
chk_mt_down
        }
 notify_master "/etc/keepalived/notify.sh master"     //下面三行定义消息通知机制的,需要在/etc/keepalived/目录下创建执行脚本notify.sh,脚本内容下面给出
 notify_backup "/etc/keepalived/notify.sh backup"
 notify_fault "/etc/keepalived/notify.sh fault"
}
virtual_server 172.16.13.1 80 {            //定义ipvs规则
    delay_loop 6                           //健康状态检查间隔
    lb_algo rr                             //lvs的调度算法
    lb_kind DR                             //lvs的工作模式有DR/NAT/TUN
    nat_mask 255.255.255.255        //掩码netmask 255.255.255.255
#    persistence_timeout 10         //这里是定义会话保持的,单位是秒,因为要测试高可用,所以注释掉了
    protocol TCP                                           //转发协议的类型有tcp/udp两种
    real_server 172.16.113.13 80 {                //定义后端http服务器的
        weight 1                                                     //权重
    TCP_CHECK {                                        //定义健康状态检测方式
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
        }
       }
    real_server 172.16.113.14 80 {
        weight 1
    TCP_CHECK {                                   //定义TCP_CHECK方式
          connect_timeout 3                         //定义连接超时
          nb_get_retry 3                              //定义重试次数
          delay_before_retry 3                    //定义重试间隔
        }
    }
}
# vim /etc/keepalived/notify.sh           //邮件通知机制的运行脚本
 vip=172.16.13.1
contact=‘[email protected]‘    //必须有kaadmin这个用户存在才可以收到邮件;su - kaadmin 后使用mail查看邮件
notify() {
 mailsubject="`hostname` to be $1: $vip 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
exit 0
;;
backup)
       notify backup
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo ‘Usage: `basename $0` {master|backup|fault}‘
exit 1
 ;;
esac
# chmod +x  /etc/keepalived/notify.sh                //添加执行权限
# service keepalived start          //启动keepalived


    6、测试高可用的LVS

1)浏览器输入172.16.13.1查看负载均衡是否可用

2)将后端http服务器下线,测试健康状态检测是否可用

# service httpd stop
# ipvsadm -Ln                                //查看规则显示113.13节点已经下线

3)创建down文件,测试keepalived是不是可以自动转变"主备"

# touch /etc/keepalived/down
# tail -f /var/log/messages                       //日志显示节点转变为backup节点

# rm  -f /etc/keepalived/down                        
# tail /var/log/messages      //日志显示当前节点转变为master节点

4)将主节点keepalived关闭,查看备节点能不能转变为主节点

# service keepalived stop
# tail -6 /var/log/messages

5)最后检查邮件通知能不能正常接收查看

# su - kaadmin
# mail                             //我已经收到了6封邮件了

时间: 2024-12-24 04:29:49

keepalive构建高可用LVS集群的相关文章

直接路由的高可用LVS集群配置

 直接路由的高可用LVS集群配置: 调度服务器IP:(106.3.43.240)192.168.11.100,节点服务器分别为:192.168.11.101,192.168.11.102 一.安装ipvsadmin: 1.yum -y install ipvsadmin(推荐用第一种方法) 2.下载http://www.linuxvirtualserver.org/software/,找到相应的版本: 注意对应自己的内核版本 ipvsadm-1.24.tar.gz tar zxvf ipvs

keepalived高可用lvs集群,主/备和主/主模型

利用keepalived高可用lvs集群,主/备和主/主: vrrp_script高可用双主nginx: keepalived主备:lvs-dr工作模型 网络搭建: 在前端2台调度器: DR1:172.18.11.111 DR2:172.18.11.112 VIP:172.18.11.7 后端2台web服务器,运行nginx: RS1:172.18.11.11 RS2:172.18.11.12 搭建web服务器: 提供简单的测试页面,以便容易观测到哪台RS被调度响应: 在RS1上: ]# yum

.net core下简单构建高可用服务集群

原文:.net core下简单构建高可用服务集群 一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,如zeekeeper ,反向代理服务网关等一系列的搭建和配置等等:总得来说需要有一定经验和规划的团队才能应用起来.在这文章里你能看到在.net core下的另一种集群构建方案,通过Beetlex即可非常便捷地构建高可用的集群服务. 简述 Beetlex的Webapi集群应用并没有依赖于第三方服务,而是由Beetlex自身完成:它主要是通过Client和策略监控服务相结合的方式来实现集群化的服

构建高可用ZooKeeper集群

ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 ZooKeeper 便捷的使用方式.卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop.HBase.Kafka 和 Dubbo 等大型分布式系统中. 本文的目标读者是对 ZooKeeper 有一定了解的技术人员,将从 ZooKeeper 运行模式.集群组成.容灾和水平扩容四方面逐步深入,最终构建

构建高可用ZooKeeper集群(转载)

ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 ZooKeeper 便捷的使用方式.卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop.HBase.Kafka 和 Dubbo 等大型分布式系统中. 本文的目标读者是对 ZooKeeper 有一定了解的技术人员,将从 ZooKeeper 运行模式.集群组成.容灾和水平扩容四方面逐步深入,最终构建

P7架构师带你构建高可用ZooKeeper集群

前言: ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分布式基础服务.由于 ZooKeeper 便捷的使用方式.卓越的性能和良好的稳定性,被广泛地应用于诸如 Hadoop.HBase.Kafka 和 Dubbo 等大型分布式系统中. 本文的目标读者是对 ZooKeeper 有一定了解的技术人员,将从 ZooKeeper 运行模式.集群组成.容灾和水平扩容四方面逐步深入,

drbd+corosync+pacemaker构建高可用MySQL集群

一.drbd简介 drbd全称Distributed Replicated Block Device,为分布式复制块设备,基于软件实现的,不共享任何东西的,通过复制的方式构建镜像模式工作的磁盘,类似于raid1,但不同于raid的是,drbd实现了跨主机镜像块数据.drbd工作原理:由工作于内核层次的drbd,将要写入本地磁盘的数据镜像一份发往本地网卡,由本地网卡发往另一台drbd主机的本地磁盘存储.因此,drbd的两个主机的,磁盘存储一模一样,从而实现分布式复制块设备的实现.drbd进程对磁盘

CentOS7+MySQL/MariaDB+Galera+HAProxy+Keepalived构建高可用数据库集群

方案优势: Galera能够实现MySQL/MariaDB数据库的主主复制和多主复制等模式,这些复制模式都是同步进行的,同步时间非常短 每一个节点都可以同时写入和读取,当某一节点发生故障时,可自动从集群中自动剔除 HAProxy能提供负载均衡和故障判断等功能解决服务器系统存在的单点故障 Keepalived能提供客户端连接数据库时使用的虚拟IP地址(VIP) 关于HAProxy的负载均衡算法 轮询方式(roundrobin):不适合用于backend为web服务器的情况,因为session.co

Java集群优化——dubbo+zookeeper构建高可用分布式集群 【转】

我们讨论过Nginx+tomcat组成的集群,这已经是非常灵活的集群技术,但是当我们的系统遇到更大的瓶颈,全部应用的单点服务器已经不能满足我们的需求,这时,我们要考虑另外一种,我们熟悉的内容,就是分布式,而当下流行的Dubbo框架,不容我们忽视,这里,咱们一起来探讨一下这个框架的使用. 一,背景 以前我们需要远程调用他人的接口,我们是这么做的: 我们遇到的问题: (1) 当服务越来越多时,服务URL配置管理变得非常困难,F5硬件负载均衡器的单点压力也越来越大.此时需要一个服务注册中心,动态的注册