一、VRRP协议与工作原理

  在现实网络环境中,主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。
熟悉网络的学员对VRRP协议应该不陌生,它是一种主备模式的协议,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信,这其中涉及到两个概念:物理路由器和虚拟路由器。
  VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器通过虚拟IP(一个或者多个)对外提供服务,而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由设备被成为主路由器(Master角色),一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP 数据转发等,而且其它的物理路由器不拥有对外的虚拟IP,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为“BACKUP的角色”,当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。
  每个虚拟路由器都有一个唯一的标识号,称为VRID,一个VRID与一组IP地址构成一个虚拟路由器,在VRRP协议中,所有的报文都是通过IP多播方式发送的,而在一个虚拟路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态,一一般不会发生BACKUP抢占的情况,除非它的优先级更高,而当MASTER不可用时,BACKUP也就无法收到Master发过来的信息,于是就认定Master出现故障,接着多台BAKCUP就会进行选举,优先级最高的BACKUP将称为新的MASTER,这种选举角色切换非常之快,因而保证了服务的持续可用性。

二、Keepalived

  Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行;狭义的来讲就是指主机的冗余和接管。它与HeartBeat、RoseHA实现类似的功能,都可以实现服务或者网络的高可用,但是又有差别。HeartBeat是一个专业的、功能完善的高可用软件,它提供了HA 软件所需的基本功能。比如:心跳检测、资源接管,检测集群中的服务,在集群节点转移共享IP地址的所有者等等。HeartBeat功能强大,但是部署和使用相对比较麻烦。与HeartBeat相比,Keepalived主要是通过虚拟路由冗余(VRRP)来实现高可用功能,虽然它没有HeartBeat功能强大,但是Keepalived部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。
  keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

三、实验案例

基础环境(关闭selinux和iptables):

VIP: 192.168.1.222
192.168.1.98 - lvs-master
192.168.1.99 - lvs-slave
192.168.1.101 - realserver01
192.168.1.102 - realserver02

1.LVS节点配置

 安装ipvsadm和keepalived

# yum install ipvsadm keepalived -y

2.配置keepalived节点

 Master 配置

 # vi /etc/keepalived/keepalived.conf

global_defs {
notification_email {
test@.com
}
notification_email_from lvs-alert@126.com
smtp_server mail..com
smtp_connection_timeout
router_id LVS_DEVEL # 设置lvs的id,在一个网络内应该是唯一的
}
vrrp_instance VI_1 {
state MASTER #指定Keepalived的角色,MASTER为主,BACKUP为备
interface eth0 #指定Keepalived的角色,MASTER为主,BACKUP为备
virtual_router_id #虚拟路由编号,主备要一致
priority #定义优先级,数字越大,优先级越高,主DR必须大于备用DR
advert_int #检查间隔,默认为1s
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.1.222 #定义虚拟IP(VIP),可多设,每行一个
}
}
# 定义对外提供服务的LVS的VIP以及port
virtual_server 192.168.1.222 {
delay_loop # 设置健康检查时间,单位是秒
lb_algo wrr # 设置负载调度的算法为wrr
lb_kind DR # 设置LVS实现负载的机制,有NAT、TUN、DR三个模式
nat_mask 255.255.255.0
persistence_timeout
protocol TCP
real_server 192.168.1.101 { # 指定real server1的IP地址
weight # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
real_server 192.168.1.102 { # 指定real server2的IP地址
weight # 配置节点权值,数字越大权重越高
TCP_CHECK {
connect_timeout
nb_get_retry
delay_before_retry
connect_port
}
}
}

 Slave 配置

先将上面的keepalived.conf配置文件,仅仅修改2处,如下:

No.1处:把“state MASTER”修改为“state BACKUP” #即备用服务器;

No.2处:把“priority ”修改为“priority ” #优先级为90。

3.配置RealServer节点(默认已安装配置启动http服务)

 配置realserver启动脚本,为后端realserver节点lo:0绑定VIP,抑制ARP广播

 vi /etc/init.d/realserver.sh

#add for chkconfig
#chkconfig:
#description: RealServer's script
#processname: realserver.sh
#!/bin/bash
VIP=192.168.1.222
source /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo: $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:
echo "" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Start OK"
;;
stop)
ifconfig lo: down
route del $VIP >/dev/null >&
echo "" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit
esac
exit

4.启动keepalived并查看lvs规则是否生效

# /etc/init.d/keepalived start

5.访问测试(wrr模式,权值相同)

6.将后端的realserver其中一个节点服务停掉,并测试

可以看到keepalived发现realserver02的80端口没开,就认为server故障并从集群中自动剔除了realserver02,但当realserver02服务恢复之后,keepalived又再次将其加入集群中。

7.将前端keepalived master节点停掉,并测试效果

当master故障,vip会自动漂移到slave继续提供服务,从而保证了服务的高可用性。

五、实验小结

  主要实现功能:

    1.负载均衡;

    2.后端realserver出问题,自动从集群中剔除;

    3.lvs高可用,提供服务的LVS宕机,vip漂移到另一台LVS继续提供服务。

  LVS是一个可以工作在网络第四层的负载均衡软件,因此它相对于Nginx一类工作在第七层的负载均衡软件有着无可比拟的性能优势。

  本次通过最小化的lvs+keepalived实验了解了目前广泛运用的软件负载均衡解决方案之一,后面继续学习其他负载均衡方案。

lvs+keepalived实验的更多相关文章

  1. LVS+Keepalived高可用负载均衡集群架构实验-01

    一.为什么要使用负载均衡技术? 1.系统高可用性 2.  系统可扩展性 3.  负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...

  2. 【大型网站技术实践】初级篇:借助LVS+Keepalived实现负载均衡

    一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是Web应用服务 ...

  3. lvs+keepalived

    一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 系统平台:CentOS 6.3 Kernel:2.6.32-279.el6.i686 LVS版本:ipvsadm-1.26 keepalive ...

  4. LB(Load balance)负载均衡集群--{LVS-[NAT+DR]单实例实验+LVS+keeplived实验} 菜鸟入门级

    LB(Load balance)负载均衡集群 LVS-[NAT+DR]单实例实验 LVS+keeplived实验 LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一 ...

  5. LVS + Keepalived + Nginx安装及配置

    1.概述 上篇文章<架构设计:负载均衡层设计方案(6)——Nginx + Keepalived构建高可用的负载层>(http://blog.csdn.net/yinwenjie/artic ...

  6. lvs+keepalived 负载均衡

    LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器.目前有三种IP负 载均衡技术(VS/NAT.VS/T ...

  7. 借助LVS+Keepalived实现负载均衡(转)

    原文:http://www.cnblogs.com/edisonchou/p/4281978.html 一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务 ...

  8. 关于lvs+keepalived只加入一台realserver问题

    今天做lvs+keepalived+mysql项目实施方案,在配置lvs+keepalived时都是ok的,但是就只加入第一台realserver.本人也感到很奇怪,lvs+keepalived本人也 ...

  9. 使用LVS+keepalived实现mysql负载均衡的实践和总结

    前言 经过一段时间的积累,数据库的架构就需要根据项目不断的进行变化. 从单台数据库,到了两台数据库的主从,再到读写分离,再到双主,现在进一步需要更多的数据库服务器去支撑更加可怕的访问量. 那么经过那么 ...

随机推荐

  1. pat1080. Graduate Admission (30)

    1080. Graduate Admission (30) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue It ...

  2. C#天气预报程序

    首先要引用这个服务,http://www.webxml.com.cn/Webservices/WeatherWebService.asmx 出现对话框后,把中央气象的服务网址添加到里面 选择高级, 添 ...

  3. C#入门--字段与属性

    C#入门--字段与属性 “字段”,它是包含在类或结构中的对象或值.字段使类和结构可以封装数据. 属性是这样的成员:它们提供灵活的机制来读取.编写或计算私有字段的值.可以像使用公共数据成员一样使用属性, ...

  4. Oracle入门基础(1)

    1.数据库系统和数据管理系统的区别? 数据库系统=数据库的管理系统+oper操作员+硬件 2.Oracle的版本   8i /9i   10g/11g   12c(cloud) 3.Oracle主要组 ...

  5. [LeetCode]11. Container With Most Water 盛最多水的容器

    Given n non-negative integers a1, a2, ..., an , where each represents a point at coordinate (i, ai). ...

  6. RNQOJ [stupid]愚蠢的矿工(树形依赖背包)

    题意 题目链接 Sol 树形依赖背包板子题 树形依赖背包大概就是说:对于一个点,只有选了它的父亲才能选自身 把dfs序建出来,倒过来考虑 设\(f[i][j]\)表示从第\(i\)个节点往后背包体积为 ...

  7. FlexPaper查看Flash文件

    HTML 代码: <head> <meta http-equiv="Content-Type" content="text/html; charset= ...

  8. Cookie存储大小、个数限制

    一.浏览器允许每个域名所包含的cookie数: Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie. Firef ...

  9. [转]QT 4.8 静态库编译方法

    最最初踏上QT之路是受到了XiaomaGee的指点,相比于常规的窗口程序开发,QT有着以下特点: 1. 优良的跨平台特性(支持Win.Linux.Mac 不同的平台下只需重新编译即可使用) 2. 面向 ...

  10. css3骰子(transform初识)

    利用css3制作可旋转的骰子,效果图如下,也可以查看 demo: 首先是骰子的html结构,.page 是骰子的六个页面的 class,#one-#six分别表示六个面,.point 是骰子表面的点数 ...