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

相关推荐

  • 系统启动及内核管理

    一、知识整理 1、nohup 命令:不挂断地运行命令,远程连接当断网或断开shell时还可以继续运行。无论是否将nohup命令的输出重定向到终端,输出都将附加到当前目录下的nohup.out文件中,如果当前不可写,则重定向到家目录nohup.out文件,除非定义了输出文件。 nohup COMMAND 输出重定向至文件 nohup COMMAND &…

    Linux干货 2016-09-19
  • nginx学习笔记

    深入理解Nginx 一、Nginx是什么? 二、为什么选择Linux ? 三、Nginx生成的文件有哪些? 四、Nginx的配置详解? 五、模块功能详解 六、虚拟主机配置详解?                 一、Nginx是什么? Nginx(engine X)是一个高性能的H…

    Linux干货 2017-03-15
  • httpd-2.2和httpd-2.4区别 、请求方法和响应状态码、虚拟主机、访问控制、持久链接

    第十周
    The Apache HTTP Server is a powerful, efficient, and extensible web server.
    2018/2/4 16:33

    2018-02-04
  • mysql编译安装

    MYSQL编译安装:参考(http://v.youku.com/v_show/id_XMjc4MDUwNjYyOA==.html?from=s1.8-1-1.2&spm=a2h0k.8191407.0.0)(http://oldboy.blog.51cto.com/2561410/1917295)     编译安装mysql,最好…

    Linux干货 2017-06-09
  • iptables的使用

    iptables         firewall:隔离工具;Packets Filter Firewall;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(匹配条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一条组件; 硬件防火墙:在硬件级别实现部分顾虑功能;另…

    Linux干货 2016-10-29
  • 初识linux:计算机的组成及功能

    一、描述计算机的组成及功能。 由冯诺伊曼提出计算机体系结构(5大部件)控制器(Controller):是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。 (cpu由控…

    2017-12-03