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 15:39
下一篇 2017-07-03 15:44

相关推荐

  • 【N25第一周作业】Linux基础

    题目:   1、描述计算机的组成及其功能。   2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。   3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。   4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、his…

    Linux干货 2016-12-03
  • linux命令格式和常用命令

    Linxu命令使用格式 ~]#COMMAND OPTIONS ARGUMENTS CMMMAND:发起一命令:请求内核将某个二进制程序运行为一个进程; OPTIONS:指定命令的运行特性; 短选项:-C, 例如-l, -d 注意:有些命令的选项没有-; 如果同一命令同时使用多个短选项,多数可合并:-l -d = -ld 长选项:–word, 例如…

    Linux干货 2018-03-04
  • Bash Shell详解

    引言:什么是Shell? Linux的命令行接口归结起来就是各种Shell,那么到底什么是Shell?Shell,译为外壳,是用户直接连入计算机所使用的计算机程序,负责解析用户提供的命令,如词法分析、语法分析、句法分析。 1.Shell的分类 Linux 的命令 shell 是与操作系统相分离的一层。不同的 shell 环境影响您具备不同的功能,比如可编辑的…

    2017-09-07
  • 相识–Varnish

    Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。 VCL: ”域“专有类型的配置语言 VCL有多个状态引擎,状态之间…

    Linux干货 2017-11-13
  • VIM编辑器入门

    VIM简介 VIM是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是纯粹的自由软件。 VIM的使用 在介绍基本使用前,先了解下VIM的基本模式 基本模式可分为三种:命令模式、输入模式、末行模式 命令模式:Vim启动后的默认模式,通过输入指令完成对应的编辑操作。输入模式和末行模式从命令模式进入&nb…

    Linux干货 2016-04-05
  • 磁盘、文件系统管理

    linux磁盘、文件系统管理 硬盘:机械硬盘、固态硬盘     计算硬盘速度:IoPs:(Io  per  second ) 每秒20次 机械硬盘:     track:磁道     平均寻道时间  &nbsp…

    Linux干货 2016-08-25