文章主要分为原理、架构、安装、配置和启动这个几个部分。文章有点长,前面部分是参考了 LVS+Keepalived实现高可用负载均衡 ,根据自己的实际工作花了两三个小时整理的,希望能对大家有点帮助吧。
一、原理
1、概要介绍
如果将TCP/IP划分为5层,则Keepalived就是一个类似于3~5层交换机制的软件,具有3~5层交换功能,其主要作用是检测web服务器的状态,如果某台web服务器故障,Keepalived将检测到并将其从系统中剔除,当该web服务器工作正常后Keepalived自动将其加入到服务器群中,这些工作全部自动完成,而不需要人工干预,只需要人工修复故障的web服务器即可。
2、工作原理
Keepalived基于VRRP协议来实现高可用解决方案,利用其避免单点故障,通常这个解决方案中,至少有2台服务器运行Keepalived,即一台为MASTER,另一台为BACKUP,但对外表现为一个虚拟IP,MASTER会发送特定消息给BACKUP,当BACKUP收不到该消息时,则认为MASTER故障了,BACKUP会接管虚拟IP,继续提供服务,从而保证了高可用性,具体如下图:
3层机理是发送ICMP数据包即PING给某台服务器,如果不痛,则认为其故障,并从服务器群中剔除。
4层机理是检测TCP端口号状态来判断某台服务器是否故障,如果故障,则从服务器群中剔除。
5层机理是根据用户的设定检查某个服务器应用程序是否正常运行,如果不正常,则从服务器群中剔除。
3、实际作用
主要用作RealServer的健康检查,以及负载均衡设备MASTER和BACKUP之间failover的实现。
二、架构
本系列文章以Red Hat Enterprise Linux 5.1为例,介绍用LVS+Keepalived实现高可用负载均衡。具体业务需求是用虚拟IP转发8080、25、21端口请求到后端的真实服务器来处业务逻辑,系统拓扑如下图所示:
客户端通过VIP(Virtual IP)(172.28.14.227/228/229)来访问负载均衡服务器,负载均衡服务器通过MASTER/172.28.19.92或BACKUP/172.28.19.93将请求分别转发给真实服务器(Web服务器/172.28.19.100/101/102、邮件服务器/172.28.19.103/104/105、文件服务器/172.28.19.106/107/108)。
负载均衡服务器的MASTER和BACKUP上都必须安装LVS+Keepalived,下面开始安装和配置之旅。
三、LVS集群安装及配置
3.1 主备LVS安装
3.1.1 LPVS安装
Red Hat Enterprise Linux 5.1内核已包含ipvs,所以只需安装ipvsadm,安装步骤如下:
1、http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz 获取ipvsadm
2、创建一个连接文件,其命令为:ln –sv /usr/src/kernels/2.6.18-128.el5-i686 /usr/src/linux,注意一定要与当前的运行的内核相一致,因为/usr/src/kernels 目录下可多个目录。如果
不创建这个连接文件,在编译时会出错,从而不能继续进行安装。
3、 解包。 tar zxvf ipvsadm-1.24
4、 编译并安装。 cd ipvsadm-1.24; make;make install 可执行文件被安装到/sbin/ipvsadm.
检验ipvsadm 是否被正确安装:
1、 执行ipvsadm,看是否有如下输出:
[root]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
2、 检查当前加载的内核模块,看是否存在ip_vs 模块。
[root]# lsmod|grep ip_vs
ip_vs 77569 0
注1、只有执行ipvsadm 以后,才会在内核加载ip_vs 模块。
注2、不能以查进程的方式判断ipvs 是否运行。
3.1.2 Keepalive安装
1、 下载最新稳定版 wget http://www.keepalived.org/software/keepalived-1.1.17.tar.gz
2、 解包 tar zxvf keepalived-1.1.17.tar.gz
3、 切换目录 cd keepalived-1.1.17
4、 配置 ./configure -prefix=/usr/local/keepalive 因为keepalived 运行在ipvs 之上,因此这两个软件一定要安装在一个系统里面。如果configure 操作能正常进行,运行完毕后将有如下的汇总输出:
Keepalived configuration
——————————————
Keepalived version : 1.1.17
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
Use LinkWatch : No
Use Debug flags : No
5、 编译和安装 make ; make install
Keepalived 安装完成后,会在安装目录/usr/local/keepalive 生成 bin,etc,man,sbin 这4 个目录。其中etc 为配置文件所在的目录。
3.2 主用LVS配置
编辑Keepalive配置文件(/etc/keepalived/keepalived.conf):
#guration File for keepalived
#global define
global_defs {
#负载均衡标志在一个网络内写成唯一
router_id LVS_CNC_1
}
vrrp_sync_group VGM {
group {
#这个标志要与下面vrrp_instance定义的一致
VI_CACHE
}
}
#vvrp_instance define #
#这个模块的作用就是用来确定失败切换(FailOver)包含的路由实例个数。一个实例组group.至少包含一个vrrp 实例#
vrrp_instance VI_CACHE {
#实例状态state只有MASTER 和BACKUP 两种状态 ,其中
MASTER 为工作状态,BACKUP 为备用状态。#
state MASTER
#通信接口interface,对外提供服务的网络接口。 #
interface eth0
# lvs_sync_daemon_inteface,负载均衡器之间的监控接口。 #
lvs_sync_daemon_inteface eth0
#虚拟路由标识virtual_router_id.这个标识是一个数字,并且同一个vrrp 实例使用唯一的标识。即同一个vrrp_stance,MASTER 和BACKUP 的virtual_router_id 是一致的,同时在整个vrrp 内是唯一的。 #
virtual_router_id 51
# 优先级priority.这是一个数字,数值愈大,优先级越高。在同一个vrrp_instance里,MASTER 的优先级高于BACKUP。 #
priority 180
#同步通知间隔 advert_int .MASTER 与BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒 #
advert_int 5
# 验证authentication,包含验证类型和验证密码。这一栏是不用管的#
authentication {
auth_type PASS
auth_pass 1111
}
# 虚拟ip 地址virtual_ipaddress . 可以有多个地址,每个地址占一行,不需要指定子网掩码#
virtual_ipaddress {
172.30.254.220
}
}
# virtual machine setting #
# setting port 80 forward #
virtual_server 172.30.254.220 80 {
# 健康检查时间间隔,单位是秒 #
delay_loop 6
# 负载均衡调度算法 #
lb_algo wlc
# 负载均衡转发规则 #
lb_kind DR
# 会话保持时间,单位是秒#
persistence_timeout 300
# 转发协议#
protocol TCP
# 真实服务器real_server,也即服务器池。Real_server 的值包括ip 地址和端口号,有多少个服务器使用了虚拟IP,要配置多少个real_server #
real_server 172.30.254.17 80 {
# 权重值越大,处理的请求越多#
weight 100
# 注意TCP_CHECK和{之间的空格,如果没有的话只会添加第一个realserver#
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
# 这里的端口号要与real_server那里的端口号一致#
connect_port 80
}
}
real_server 172.30.254.18 80 {
weight 100
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
注:在这样只有一个vrrp_instance 的环境里,主负载均衡器(MASTER)与备份负载均衡器(BACKUP)配置文件的差异一共只有3 处: 全局定义的route_id、vrrp_instance state、vrrp_instance 的优先级priority。备份负载均衡器的配置文件就不再写了。
3.4 Real Server配置
Real Server不需要安装任何软件,只需建立如下脚本,负责服务的启动、停止:
1、编辑脚本lvs_real:
# /usr/local/bin/lvs_real#
# vip(virtual ip)。直接路由模式的vip 必须跟服务器对外提供服务的ip 地址在同一个网段,并且lvs 负载均衡器和其他所有提供相同功能的服务器都使用这个vip.#
VIP=172.30.254.220
/etc/rc.d/init.d/functions
case “ 1”instart)echo”startLVSofREALServer”/sbin/ifconfiglo:0 VIP broadcast VI