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

相关推荐

  • 脚本又见脚本,作业又是作业_第七周

    1、创建一个10G分区,并格式为ext4文件系统; (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl; (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; [root@centos ~]# fdisk -l &n…

    Linux干货 2016-12-30
  • 马哥教育网络班20期+第四周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@llww3317 ~]# cp -r /etc/skel /home [root@llww3317 ~]# mv /home/ske…

    Linux干货 2016-07-05
  • 马哥教育网络班22期-第九周课程作业

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现; #!/bin/bash # declare -i count=0 declare -i bash_num=0 declare -i&nbs…

    Linux干货 2016-11-21
  • Linux编译安装

    Linux编译安装    Linux上真正可以执行的文件是二进制文件,这些可以执行的二进制文件是哪儿来的呢?首先,必须要写程序的源代码,然后,由编译程序将程序的源代码 编译成二进制形式。源代码是由程序员编写的,使用特定的程序语言,如C,C++,Java,Python。但是机器看不懂这些语言,所以要使用编译程序将这些语言编写的源代码编译成机…

    Linux干货 2016-08-24
  • 网络相关命令

    网络相关命令 常用命令 ifcfg家族:   ifconfig:配置IP,NETMASK   route :路由   netstat : 状态及统计数据查看 iproute2家族     ip  系列 &nbs…

    Linux干货 2016-09-07
  • 脚本作业–函数练习

    1、编写服务脚本/root/bin/testsrv.sh,完成如下要求(1) 脚本可接受参数:start, stop, restart, status(2) 如果参数非此四者之一,提示使用格式后报错退出(3) 如是start:则创建/var/lock/subsys/SCRIPT_NAME, 并显示“启动成功”考虑:如果事先已经启动过一次,该如何处理?(4) …

    Linux干货 2016-08-24