keepalived实现lvs的高可用

lvs可以做到内核级别的四层负载均衡,具有非常强悍的负载均衡能力。但是,当我们构建lvs的负载均衡集群的时候也会面临一些很严重的问题:

  • lvs的单点故障:当lvs负载均衡器出现故障的时候,那么后端所有的服务器都将无法访问;

  • lvs对后台服务器没有健康监测机制:当后台服务器宕机之后lvs还是会调度服务到后台的服务器;

所以我们就需要一款工具来解决以上问题。

keepalived是基于VRRP协议进行工作的,其内部结构为:

  • lvs wrapper:提供lvs的调度

  • checker:进行rs的健康监测机制,配置lvs wrapper进行调度

  • VRRP stack:调用vrrp协议进行工作

  • smtp:进行邮件通知

  • watchdog:发现keepalived内部服务异常立即重启服务,防止软件故障;

一、实验环境

4台服务器,两台lvs负载均衡,两台RS服务器提供http服务:

  • lvs-1:192.168.11.100

  • lvs-2:192.168.11.101

  • RS-1:192.168.11.201

  • RS-2:192.168.11.202

拓扑如下:

keepalived实现lvs的高可用

二、实验步骤

RS配置:

  1. 安装nginx并提供网页

  2. 配置Lvs-DR调度方法,在rs执行如下脚本:

    #RS服务器配置VIP地址和主机路由,并且关闭arp应答和响应# #!/bin/bash #  VIP=192.168.11.250 NETMASK=255.255.255.255 BRO=192.168.11.230 NETWORK=lo:0  case $1 in start)         echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore         echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce         echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore         echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce         ifconfig $NETWORK $VIP netmask $NETMASK broadcast $BRO up         route add -host $VIP $NETWORK ;; stop)         echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore         echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce         echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore         echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce         ifconfig $NETWORK down         route del -host $VIP $NETWORK ;; *)         echo "Usage:$0 [start|stop]" esac

keepalived配置:

  1. 采用lvs-dr调度算法,两台lvs服务器都需要安装keepalived

     yum install -y keepalived ipvsadm
  2. 编辑keepalived配置文件/etc/keepalived/keepalived.conf,两台lvs配置文件需要一致:

     ! Configuration File for keepalived  global_defs {    notification_email {         root@localhost  #当主从服务器发生变更的时候发邮件到此邮箱进行通知#    }    notification_email_from keepalived@localhost  #通过keepalived@localhost发邮件#    smtp_server 127.0.0.1  #smtp服务器配置#    smtp_connect_timeout 30  #smtp服务器连接超时时长#    router_id node1    #运行keepalived机器的标识#    vrrp_mcast_group4    224.0.115.15 #组播地址为224.0.115.115# }  vrrp_instance VI_1 {   #vrrp VI_1实例#     stater MASTER    #本机为MASTER#     interface ens33    #虚拟ip配置到ens33网卡#     virtual_router_id 14  #虚拟路由编号为14#     priority 100    #自身优先级为100,范围从1-254#     advert_int 1    #每1秒钟发出一次组播信息通告自身优先级和虚拟路由编号#     authentication {   #进行认证#         auth_type PASS   #认证方法为简单字符认证#         auth_pass b1946ac9  #认证字符为b1946ac9,两台服务器需要一致#     }     virtual_ipaddress {            192.168.11.250/24 dev ens33  #浮动ip地址为192.168.11.250,并且配置为ens33的辅助ip,也可以绑定到别名网卡上#     } }  virtual_server 192.168.11.250 80 {  #lvs的vip地址#         delay_loop 3     #lvs轮询时间间隔#         lb_algo rr      #RS调度算法为轮询# lb_kind DR        #LVS调度方式为DR#         protocol TCP     #使用的协议,仅支持TCP协议#          real_server 192.168.11.201 80 {  #RS-1的地址和端口#                 weight 1     #RS-1权重为1#                 HTTP_GET {     #做应用层健康状况监测#                         url {                                 path /  #要监控的url为/#                                 status_code 200  #响应状态码为200表示健康#                         }                 }                 connect_timeout 1   #RS连接超时时长为1秒#                 nb_get_retry 3    #最大重试连接次数为3次#                 delay_before_retry 1  #两次连接重试间隔为1秒#         }         real_server 192.168.11.202 80 {  #第二台RS#                 weight 1                 HTTP_GET {                         url {                                 path /                                 status_code 200                         }                 }                 connect_timeout 1                 nb_get_retry 3                 delay_before_retry 1 }
  3. 两台lvs都需要做如此配置,不过第二台服务器需要修改优先级和状态为BACKUP;

  4. 启动keepalived,然后通过ipvsadm -ln可以看到lvs已经配置成功,当一台RS的网页文件被删除之后则被认为RS故障,会从ipvs中移除。

注意:

RS还可以进行传输层的健康状态检测,参数为:

TCP_CHECK {

connect_ip #向RS的那个地址发起健康状态检测,默认为RIP#

connect_port #想RS的哪个端口发起健康状态检测,默认为提供服务的端口#

bindto #发出健康状态检测的源地址,默认为lvs的dip#

bindto #发出健康状态检测的源端口,默认为lvs的对外提供服务端口#

connect_timeout #超时连接时长#

}

原创文章,作者:王子豪,如若转载,请注明出处:http://www.178linux.com/79338

(0)
王子豪王子豪
上一篇 2017-07-03
下一篇 2017-07-03

相关推荐

  • 制作python模块安装包[原创]

     python的第三方模块越来越丰富,涉及的领域也非常广,如科学计算、图片处理、web应用、GUI开发等。当然也可以将自己写的模块进行打包或发布。一简单的方法是将你的类包直接copy到python的lib目录,但此方式不便于管理与维护,存在多个python版本时会非常混乱。现介绍如何编写setup.py来对一个简单的python模块进行打包。 一、…

    Linux干货 2015-03-27
  • shell脚本循环及函数

    16.循环执行                 将代码段重复运行多次           &nbsp…

    Linux干货 2016-08-24
  • N29第一周作业:初识Linux系统

    1、描述计算机的组成及其功能。
    2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。
    4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。
    6、请罗列Linux发行版的基础目录名称命名法则及功用规定

    2018-03-04
  • linux程序包管理

         首先linux软件程序包和windows中的程序包是不兼容的,所以要在linux上使用windows上的程序,需要使用虚拟化工具。 库级别的虚拟化:     linux : WinE     windows: Cywin 而程序开发语言有多…

    Linux干货 2016-08-24
  • 小懒豆-运维28-01

    1.计算机的组成及其功能
    2.linux的发行版,并描述差异及其联系
    3.说明linux的哲学思想,并按照自己的理解进行解释描述
    4.linux的命令使用格式,并介绍下列命令 ifconfig echo tty startx export pwd history shundown poweroff reboot hwclock date的
    5.如何获取linxux的帮助命令
    6.简述fhs(Filesystem hierarchy standard)

    2017-12-03
  • MongoDB

    Edit MongoDB 手册 MongoDB 手册 第一章 Introduction MongoDB入门学习目录(建议) Databases Collections Documents 第二章 部署安装 1. Import the MongoDB public key 2. Configure the package management system (…

    Linux干货 2017-04-08