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

相关推荐

  • N28-第二周博客作业

    常用通配符
    *:表示任意长度的任意字符;

    ?:表示任意的单个字符;

    []:表示在指定范围内的单个字符:[a-z];

    [^]:脱字符,是取反的意思,即在指定范围以外的任意字符,如 [^0-9]表示除数字以外的一切字符。

    [:digit:] 表示所有的数字,相当于0-9

    [:lower:] 表示所有的小写字母

    [:upper:] 表示所有的大写字母

    [:alpha:] 表示所有的字母,

    [:alnum:] 相当于[0-9a-z]

    [:space:] 相当于空白字符

    [:punct:] 表示所有的标点符号

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。

    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。

    3、请使用命令行展开功能来完成以下练习:

    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d

    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │?? └── grub
    ├── dev
    ├── etc
    │?? ├── rc.d
    │?? │?? └── init.d
    │?? └── sysconfig
    │?? └── network-scripts
    ├── lib
    │?? └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │?? └── local
    │?? ├── bin
    │?? └── sbin
    └── var
    ├── lock
    ├── log
    └── run

    4、文件的元数据信息有哪些,分别表示什么含义,如何查看?如何修改文件的时间戳信息。

    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?

    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。

    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。

    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。

    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。

    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。

    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。

    12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    Linux干货 2017-12-11
  • bash特性

    bash特性之一:命令别名      获取当前用户可用的别名的定义:  bash的特性之二:命令历史      命令语法格式:      history [-c] [-d OFFSET] [n]&nb…

    Linux干货 2016-11-06
  • 网络服务之Nginx

      在之前一篇博客中我们讲述了httpd网络服务器,那么httpd是个非常稳定安全的一个服务器,这次我们介绍一个新的网络服务器—-nginx。   Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器(我们主要围绕这两…

    2017-06-07
  • Centos 7&6分布式lamp平台

    Centos 7&6分布式lamp平台 Centos 7&6分布式lamp平台 一、环境介绍 lamp的实现方式 本文安装方式 二、Centos 7 分布式lamp平台,module方式 安装httpd和php xcache phpMyAdmin wordpress https的phpMyAdmin 环境规划 主机2配置mariadb 主机1…

    Linux干货 2016-04-25
  • 非对称密钥加密解密

    两台计算机一台用公钥加密
    另一台解密

    2018-01-08