KeepAlived系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html


本文只给出几个keepalived+lvs(VS/DR模式)的配置示例,关于keepalived的配置文件说明见:高可用之KeepAlived(一):基本概念和配置文件分析。

在实验开始前,需要说明几点:

  1. 使用keepalived配置lvs的VS/DR模式时,vip建议绑定在别名接口上。如果VIP使用单独的网卡,在lvs的高可用问题上就会出现问题:使用独立网卡配置VIP的vrrp实例将总是master角色,除非它完全死机。
  2. 既然VIP要绑定在某个接口别名上,那么VIP必须和这个接口在同一网段,否则无法正确配置VIP相关的路由(router到VIP部分)。因此对于keepalived+lvs来说,VIP和rip应该设置在同一网段。除非已经考虑清楚不使用vrrp的高可用功能,这样VIP不用绑定在网卡别名上,也就可以和rip在不同网段。
  3. 既然VIP和RIP在同一网段,那么内网路由器上就无需设置rp_filter。

1.keepalived+lvs:健康状况检查示例

实验环境如下:

RS上操作:

yum -y install httpd
echo "rs1:192.168.100.49" > /var/www/html/index.html  # RS1上操作
echo "rs1:192.168.100.50" > /var/www/html/index.html  # RS2上操作
service httpd startecho 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announceifconfig lo:0 192.168.100.10/32 up
route add -host 192.168.100.10 dev loroute add default gw 192.168.100.51

Router上操作:

echo 1 >/proc/sys/net/ipv4/ip_forward

Director上操作:

[root@xuexi ~]# route del default
[root@xuexi ~]# route add default gw 192.168.100.51
[root@xuexi ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@xuexi ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id LVS_1
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 12345678}virtual_ipaddress {192.168.100.10/32 dev eth0 label eth0:0}
}virtual_server 192.168.100.10 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCPreal_server 192.168.100.49 80 {weight 2TCP_CHECK {connect_port 80connect_timeout 1nb_get_retry 2delay_before_retry 1}}real_server 192.168.100.50 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 1nb_get_retry 2delay_before_retry 1}}
}

测试是否能实现连接的负载均衡。

2.keepalived+lvs:高可用+健康检查示例

KeepAlived通过vrrp的冗余路由切换协议实现高可用功能,主要用于lvs Director的高可用。

在配置KeepAlived高可用功能时,需要注意以下几点:

  1. 两台(或多台)Director上的vrrp实例名称要一致,vrid(virtual_router_id)要一致,认证机制以及认证密码要一致,global定义的服务器标识router_id不能一致。
  2. 不同机器上的优先级priority的值不能一致。priority直接决定谁是master,谁是backup,而无论vrrp实例的state值是MASTER还是BACKUP。
  3. VIP不能使用独立的网卡,而应该绑定在别名接口上。如果使用独立的网卡地址作为VIP,则这个vrrp实例将总是master角色,直至它死机或者该网卡down掉。
  4. keepalived的vrrp组件不依赖于lvs,它可以独立提供高可用服务。

实验环境如下:

RS1、RS2、Router、director_lvs(master)和前文实验的配置一致,不需修改。因此,只需提供director_lvs(backup)的配置文件即可。

以下是master上的操作。

[root@xuexi ~]# route del default
[root@xuexi ~]# route add default gw 192.168.100.51
[root@xuexi ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@xuexi ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {router_id LVS_2           # 和master不同
}vrrp_instance VI_1 {         # 和master相同state BACKUP             # 和master不同interface eth0virtual_router_id 51     # 和master相同priority 50              # 和maste不同advert_int 1authentication {auth_type PASS       # 和master相同auth_pass 12345678   # 和master相同}virtual_ipaddress {192.168.100.10/32 dev eth0 label eth0:0}
}virtual_server 192.168.100.10 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCPreal_server 192.168.100.49 80 {weight 2TCP_CHECK {connect_port 80connect_timeout 1nb_get_retry 2delay_before_retry 1}}real_server 192.168.100.50 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 1nb_get_retry 2delay_before_retry 1}}
}

启动两Director,查看是否只有master上设置了VIP。注意:ipvs规则在master和backup上都设置了,但由于backup没有VIP,因此backup设置的ipvs规则暂时是没有意义的。当backup切换为master状态时,只会设置VIP。

然后查看master是否已经生效。生效后,将master断开。观察原来的backup切换为master的日志:

Mar  1 20:52:19 xuexi Keepalived_vrrp[4709]: VRRP_Instance(VI_1) Transition to MASTER STATE
Mar  1 20:52:20 xuexi Keepalived_vrrp[4709]: VRRP_Instance(VI_1) Entering MASTER STATE
Mar  1 20:52:20 xuexi Keepalived_vrrp[4709]: VRRP_Instance(VI_1) setting protocol VIPs.
Mar  1 20:52:20 xuexi Keepalived_vrrp[4709]: Sending gratuitous ARP on eth0 for 192.168.100.10
Mar  1 20:52:20 xuexi Keepalived_vrrp[4709]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.100.10
Mar  1 20:52:20 xuexi Keepalived_vrrp[4709]: Sending gratuitous ARP on eth0 for 192.168.100.10
Mar  1 20:52:20 xuexi Keepalived_vrrp[4709]: Sending gratuitous ARP on eth0 for 192.168.100.10
Mar  1 20:52:20 xuexi Keepalived_vrrp[4709]: Sending gratuitous ARP on eth0 for 192.168.100.10
Mar  1 20:52:20 xuexi Keepalived_vrrp[4709]: Sending gratuitous ARP on eth0 for 192.168.100.10
Mar  1 20:52:25 xuexi Keepalived_vrrp[4709]: Sending gratuitous ARP on eth0 for 192.168.100.10
Mar  1 20:52:25 xuexi Keepalived_vrrp[4709]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.100.10
Mar  1 20:52:25 xuexi Keepalived_vrrp[4709]: Sending gratuitous ARP on eth0 for 192.168.100.10
Mar  1 20:52:25 xuexi Keepalived_vrrp[4709]: Sending gratuitous ARP on eth0 for 192.168.100.10
Mar  1 20:52:25 xuexi Keepalived_vrrp[4709]: Sending gratuitous ARP on eth0 for 192.168.100.10
Mar  1 20:52:25 xuexi Keepalived_vrrp[4709]: Sending gratuitous ARP on eth0 for 192.168.100.10

可以看到,切换速度极快(1秒以内)。

再测试将原来的master(高优先级)启动,发现它再次成为master,切换速度也是极快。

将RS1上的httpd停止。再查看主、备director上的ipvs规则。

[root@xuexi ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.10:80 wrr-> 192.168.100.50:80            Route   1      0          0

发现master和backup两边都把不健康的RealServer1节点给踢出去了。由此可以知道,健康检查是master和backup都会循环进行的,并不是只有master进行检查。

再将RS1上的httpd启动。然后查看ipvs规则。发现没过几秒钟就把规则添加回来了。

3.keepalived+lvs:多实例+高可用(双主)

keepalive的vrrp多实例可以管理多个director和vip,进而可以实现"双主模型"的高可用。

实验环境如下图:

其中Director1的vrrp实例1上是R1的master,vrrp实例2是R2的backup,Director2的vrrp实例1是R1的backup,vrrp实例2是R2的master。

这里略过4个RS的配置步骤(如有问题,参照前文配置RS1、RS2的过程)。

以下是Director1和Director2的keepalived.conf不同部分和相同部分的内容:

# 以下是两台Director上相同部分的内容
! Configuration File for keepalived                |! Configuration File for keepalived|
global_defs {                                      |global_defs {router_id LVS_1                                 |   router_id LVS_2
}                                                  |}|
vrrp_instance VI_1 {                               |vrrp_instance VI_1 {         state MASTER                                   |    state BACKUP             interface eth0                                 |    interface eth0virtual_router_id 51                           |    virtual_router_id 51     priority 100                                   |    priority 50              advert_int 1                                   |    advert_int 1authentication {                               |    authentication {auth_type PASS                             |        auth_type PASS       auth_pass 12345678                         |        auth_pass 12345678   }                                              |    }virtual_ipaddress {                            |    virtual_ipaddress {192.168.100.10/32 dev eth0 label eth0:0    |        192.168.100.10/32 dev eth0 label eth0:0}                                              |    }
}                                                  |}
# 不同vrrp实例绑定在同一接口上,vrid必须不能相同        |# 不同vrrp实例绑定在同一接口上,vrid必须不能相同
vrrp_instance VI_2 {                               |vrrp_instance VI_2 {         state BACKUP                                   |    state MASTER             interface eth0                                 |    interface eth0virtual_router_id 55                           |    virtual_router_id 55     priority 50                                    |    priority 100              advert_int 1                                   |    advert_int 1authentication {                               |    authentication {auth_type PASS                             |        auth_type PASS       auth_pass 12345678                         |        auth_pass 12345678   }                                              |    }virtual_ipaddress {                            |    virtual_ipaddress {192.168.100.11/32 dev eth0 label eth0:1    |        192.168.100.11/32 dev eth0 label eth0:1}                                              |    }
}                                                  |}
#########################################################################################
# 以下是两台Director上相同部分的内容
virtual_server 192.168.100.10 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCPreal_server 192.168.100.49 80 {weight 2TCP_CHECK {connect_port 80connect_timeout 1nb_get_retry 2delay_before_retry 1}}real_server 192.168.100.50 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 1nb_get_retry 2delay_before_retry 1}}
}virtual_server 192.168.100.11 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCPreal_server 192.168.100.57 80 {weight 2TCP_CHECK {connect_port 80connect_timeout 1nb_get_retry 2delay_before_retry 1}}real_server 192.168.100.58 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 1nb_get_retry 2delay_before_retry 1}}
}

分别测试访问两个VIP:http://192.168.100.10http://192.168.100.11。其中前者目前只能调度R1:RS1和R1:RS2,后者只能调度R2:RS1和R2:RS2。将任一Director断开,测试4个RS是否仍能继续提供服务。

4.提供sorry server和local RS

如果所有RS都宕了,对于外界来说就真的无法再访问网站了,这显然不适合。这时可以通过keepalived来配置一个服务页面。例如告诉外界客户端网站正在维护状态,或者只提供一个网站的一个主页面。

一般来说,因为是在所有RS都宕机的情况下sorry server提供的临时服务才生效,因此通常将sorry server配置在virtual_server中而非real_server中。

配置时,只需在keepalived配置文件的virtual_server段落中添加sorry_server指令即可。并且,如果启用了vrrp的高可用,应该在master和backup节点上都加上sorry server。

virtual_server 192.168.100.10 80 {delay_loop 6lb_algo wrrlb_kind DRprotocol TCPsorry_server 127.0.0.1 80

重启keepalived后,再在每个vrrp机器上配置好httpd。

yum -y install httpd
echo "web Maintenancing" >/var/www/html/index.html
service httpd start

然后将所有的RS节点的httpd服务停掉。再看keepalived上的ipvs规则,发现已经将VIP作为规则添加进来了,于是下次访问VIP时将调度这台sorry server。当某一台RS恢复的时候,ipvs规则又会变更为RS的节点。

对于集群系统不大的情况下,LVS Director一般会比较空闲,这样就比较浪费资源。这时通常会将LVS Director自身也作为一个RS,一边提供web服务,一边提供调度功能,不过应该将它的调度权重设置低一点,以免影响负载均衡的性能。这称为local RS,local RS的RIP可以写Director上的任意地址(127.0.0.1都可以)。例如:

real_server 127.0.0.1 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 1nb_get_retry 2delay_before_retry 1}
}

local RS和sorry server不应该同时设置,因为如果local RS坏了,sorry server肯定无法被调度到。

高可用之KeepAlived(2):keepalived+lvs相关推荐

  1. 搭建Nginx高可用集群(keepalived+双机热备)

    一.Nginx高可用 首先了解一下什么是高可用,高可用是分布式系统架构中必须考虑的因素. 我们都知道,使用nginx的反向代理和负载均衡可以解决tomcat等web容器的单点故障以及高并发等问题. 反 ...

  2. mysql有没有实现高可用_MySQL高可用架构:mysql+keepalived实现

    系统环境及架构 #主机名 系统版本 mysql版本 ip地址 mysqlMaster centos7.4 mysql5.7 192.168.1.42 mysqlSlave centos7.4 mysq ...

  3. NFS 高可用方案(NFS+keepalived+Sersync)

    NFS 高可用方案(NFS+keepalived+Sersync) 1. 简述 1.1 介绍 本方案 NFS 的高可用方案,应用服务器为 Client ,两台文件服务器分别Master和 Slave, ...

  4. keepalive+nginx实现负载均衡高可用_超详细的LVS+keepalived+nginx实现高性能高可用负载均衡集群教程...

    概述 前面已经介绍了前两部分内容,下面主要介绍在nginx服务器方面的配置和测试整个集群是否可用. 在realserver端配置VIP 1.两台nginx服务器都要执行下面脚本: #vi /etc/r ...

  5. lvs负载均衡—高可用集群(keepalived)

    基本概念: 什么是Keepalived呢,keepalived观其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统 ...

  6. linuxweb集群mysql_企业web高可用集群实战之lvs+keepalived+mysql

    前端用两台server做lvs+keepalived负载调度器,中间用apache+php作为web应用服务器,后端用两台做mysql高可用,用nfs.mfs或作为web文件共享服务器 系统环境: L ...

  7. Keepalived+Nginx实现高可用,反向代理---Keepalived安装及相关配置

    [前言] 在博文<智能一代云平台(十五):Keepalived+Nginx实现高可用,反向代理---Nginx安装及配置>中介绍了Nginx的安装及相关配置的信息,由于篇幅原因不能用一篇博 ...

  8. Ceph RGW高可用HA集群keepalived+Haproxy

    部署了入口服务的主机有 N 个.每个主机都有一个 haproxy 守护进程和一个 keepalived 守护进程.一次仅在其中一台主机上自动配置虚拟 IP. 每个keepalived 守护进程每隔几秒 ...

  9. mysql流行的四种高可用架构之:Keepalived+Mysql Replication

    关于MySQL-HA,目前有很多种解决方案,目前互联网上用的较多的是Keepalived+Mysql Replication组合.MMM+Mysql Replication组合.Heartbeat+D ...

  10. Windows上实现nginx的多负载,实现高可用,NLB 替代keepalived

    NLB 就是网络负载平衡,windows Server 2012 中该功能允许你将传入的请求传播到最多达32台的服务器上,即可以使用最多32台服务器共同分担对外的网络请求服务.网络负载平衡,保证即使是 ...

最新文章

  1. 高分屏是否适用计算机类学生,高分屏
  2. 手机归属地和ip定位
  3. linux shell 按行 逐行 读取文件
  4. Word中你不得不学习的几个小技巧,让你不仅玩的溜,效率也贼高!
  5. 有三AI知识星球官宣,BAT等大咖等你来撩
  6. android的padding属性,以编程方式获取android:padding属性
  7. docker搭建zookeeper集群
  8. IDEA maven依赖下载失败
  9. dev GridControl Column 背景色
  10. commit分拆多个 git_git如何合并只有两个commit到一个?
  11. Java Lambda 策略模式
  12. 计算机字符编码从0/1到UTF-8
  13. innerHTMLinnerText区别
  14. 在苹果手机上实现虹膜识别(通过改装实现)
  15. 没键盘计算机能启动吗,实现PC电脑无键盘鼠标开机
  16. 2021年终总结——工作第四年
  17. 【自然语言处理】【检索】GENER:自回归实体检索
  18. 纵观大型网站架构发展,总结持久化部分需要应对的问题
  19. CDS View-Part8Part9Part10Part16 内置函数
  20. leetcode - b 199场周赛(缺第四题)

热门文章

  1. [Node.js] 模块化 -- NodeJS之heroAdmin后台管理系统基础
  2. JavaScript doT模板引擎
  3. 前端基础-git(二):轻松搞定git创建仓库,操作仓库内容
  4. C++ 公有继承、保护继承和私有继承中类成员的访问权限的控制
  5. 关于OpenCV中IplImage的字节对齐问题
  6. zigzag模式提取矩阵元素
  7. MyBatis复习(七):MyBatis批量处理
  8. 仿ios桌面vivo_vivo全新OriginOS细节曝光:系统UI大变样
  9. mysql 跨域_解决go echo后端处理跨域的两种操作方式
  10. phpstudy本地搭建域名访问