阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Keepalived构建高可用LVS集群

141次阅读
没有评论

共计 12665 个字符,预计需要花费 32 分钟才能阅读完成。

一、什么是 keepalived?

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

——————————————————————————–

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

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

1、环境准备
  准备两个 http 节点:172.16.113.13          172.16.113.14            vip:172.16.13.1

  准备两个 lvs 节点:172.16.13.13            172.16.13.14            vip:172.16.13.1

  测试两个 lvs 节点可不可以对后面两个 http 节点进行负载均衡

  配置 keepalived:172.16.13.13    172.16.13.14                        vip:172.16.13.1

  测试 keepalived 对 lvs 的高可用性

Keepalived 构建高可用 LVS 集群

——————————————————————————–

2、网络拓扑图

Keepalived 构建高可用 LVS 集群

——————————————————————————–

LVS/DR + Keepalived 搭建负载均衡集群 http://www.linuxidc.com/Linux/2015-06/118647.htm

LVS+Keepalived 实现四层负载及高可用  http://www.linuxidc.com/Linux/2015-02/112695.htm

LVS+Keepalived 高可用负载均衡集群架构实验  http://www.linuxidc.com/Linux/2015-01/112560.htm

Heartbeat+LVS 构建高可用负载均衡集群  http://www.linuxidc.com/Linux/2014-09/106964.htm

搭建 LVS 负载均衡测试环境  http://www.linuxidc.com/Linux/2014-09/106636.htm

一个针对 LVS 的压力测试报告 http://www.linuxidc.com/Linux/2015-03/114422.htm

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 {
    admin@126.com                        // 目标邮箱,可以有多个
  }
  notification_email_from root@node3.linuxidc.com          // 发件人邮箱
  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=’kaadmin@localhost’    // 必须有 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

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2015-06/118967p2.htm

6、测试高可用的 LVS

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

Keepalived 构建高可用 LVS 集群

Keepalived 构建高可用 LVS 集群

Keepalived 构建高可用 LVS 集群

2)将后端 http 服务器下线,测试健康状态检测是否可用
# service httpd stop
# ipvsadm -Ln                                // 查看规则显示 113.13 节点已经下线

Keepalived 构建高可用 LVS 集群

Keepalived 构建高可用 LVS 集群

3)创建 down 文件,测试 keepalived 是不是可以自动转变 ” 主备 ”
# touch /etc/keepalived/down
# tail -f /var/log/messages                      // 日志显示节点转变为 backup 节点

Keepalived 构建高可用 LVS 集群

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

Keepalived 构建高可用 LVS 集群

4)将主节点 keepalived 关闭,查看备节点能不能转变为主节点
# service keepalived stop
# tail -6 /var/log/messages

Keepalived 构建高可用 LVS 集群Keepalived 构建高可用 LVS 集群

5)最后检查邮件通知能不能正常接收查看
# su – kaadmin
# mail                            // 我已经收到了 6 封邮件了

Keepalived 构建高可用 LVS 集群

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-06/118967.htm

一、什么是 keepalived?

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

——————————————————————————–

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

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

1、环境准备
  准备两个 http 节点:172.16.113.13          172.16.113.14            vip:172.16.13.1

  准备两个 lvs 节点:172.16.13.13            172.16.13.14            vip:172.16.13.1

  测试两个 lvs 节点可不可以对后面两个 http 节点进行负载均衡

  配置 keepalived:172.16.13.13    172.16.13.14                        vip:172.16.13.1

  测试 keepalived 对 lvs 的高可用性

Keepalived 构建高可用 LVS 集群

——————————————————————————–

2、网络拓扑图

Keepalived 构建高可用 LVS 集群

——————————————————————————–

LVS/DR + Keepalived 搭建负载均衡集群 http://www.linuxidc.com/Linux/2015-06/118647.htm

LVS+Keepalived 实现四层负载及高可用  http://www.linuxidc.com/Linux/2015-02/112695.htm

LVS+Keepalived 高可用负载均衡集群架构实验  http://www.linuxidc.com/Linux/2015-01/112560.htm

Heartbeat+LVS 构建高可用负载均衡集群  http://www.linuxidc.com/Linux/2014-09/106964.htm

搭建 LVS 负载均衡测试环境  http://www.linuxidc.com/Linux/2014-09/106636.htm

一个针对 LVS 的压力测试报告 http://www.linuxidc.com/Linux/2015-03/114422.htm

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 {
    admin@126.com                        // 目标邮箱,可以有多个
  }
  notification_email_from root@node3.linuxidc.com          // 发件人邮箱
  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=’kaadmin@localhost’    // 必须有 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

更多详情见请继续阅读下一页的精彩内容 :http://www.linuxidc.com/Linux/2015-06/118967p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计12665字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中