LVS 简介及工作原理
LVS 是 Linux Virtual Server 的简写,意即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。本项目在 1998 年 5 月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。LVS 简单工作原理:用户请求 LVS VIP,LVS 根据转发方式和算法,将请求转发给后端服务器,后端服务器接受到请求,返回给用户。对于用户来说,看不到 WEB 后端具体的应用。
LVS 转发方式有三种,分别是 NAT、DR、TUN 模式,常用算法:RR、LC、WRR、WLC 模式等(RR 为轮询模式,LC 为最少连接模式)LVS NAT 原理:用户请求 LVS 到达 director,director 将请求的报文的目标地址改成后端的 realserver 地址,同时将报文的目标端口也改成后端选定的 realserver 相应端口,最后将报文发送到 realserver,realserver 将数据返给 director,director 再把数据发送给用户。(两次请求都经过 director,所以访问大的话,director 会成为瓶颈)LVS DR 原理:用户请求 LVS 到达 director,director 将请求的报文的目标 MAC 地址改成后端的 realserver MAC 地址,目标 IP 为 VIP(不变),源 IP 为用户 IP 地址(保持不变),然后 Director 将报文发送到 realserver,realserver 检测到目标为自己本地 IP,如果在同一个网段,然后将请
求直接返给用户。如果用户跟 realserver 不在一个网段,则通过网关返回用户。(此种转发效率最高)LVS TUN 原理:跟 LVS DR 类似,也是改变封装 MAC 地址,多了一
层隧道加密。实施环境复杂,比 LVS DR 模式效率略低。
LVS 环境安装配置
下载 LVS 所需软件 ipvsadm-1.2.4.tar.gz 软件,编译安装:
wget -c
http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.
gz
ln -s /usr/src/kernels/2.6.* /usr/src/linux //IPVS 模块编译进内核里,
需要做软连接
tar xzvf ipvsadm-1.24.tar.gz &&cd ipvsadm-1.24 && make && make
install
LVS 安装完毕之后,需要进行配置,配置的步骤有两步,第一步为定
义端口服务,第二步为添加 realserver 后端服务。
ipvsadm -A -t 192.168.149.129:80 -s rr
ipvsadm -a -t 192.168.149.129:80 -r 192.168.149.130 -m -w 2
ipvsadm -a -t 192.168.149.129:80 -r 192.168.149.131 -m -w 2
参数说明:
-A 增加一台虚拟服务器地址。
-t 虚拟服务器提供的是 tcp 服务。
-s 使用的调度算法。
-a 在虚拟服务器中增加一台后端真实服务器。-r 指定真实服务器地址。
-m 设置当前转发方式为 NAT 模式;-g 为直接路由模式;-i 模式为
隧道模式。
-w 后端真实服务器的权重。
查看 LVS 转发列表命令为:ipvsadm –Ln
如果这台 LVS 发生突发情况,down 机了,那后端所
有的应用程序都访问不了。如何避免这种问题呢,这里需要用到故障
切换,也就是如果有一台备用的 LVS 就好了,主 down 了,自动切换
到从,怎么实现这个需求,接下来讲解的 keepalived 软件就是专门用
来做故障检测及切换的。
Keepalived 基于三层检测(IP 层,TCP 层,及应用层),主要用于
检测 web 服务器的状态,如果有一台 web 服务器死机,或工作出现
故障,Keepalived 检测到并将有故障的 web 服务器从系统中剔除;
当 web 服务器工作正常后 Keepalived 自动将 web 服务器加入到服
务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的
只是修复故障的 web 服务器。
需要注意一点,如果使用了 keepalived.conf 配置,就不需要再执
行 ipvs –A 命令去添加均衡的 realserver 命令了,所有的配置都会在
keepalived.conf 里面,一个配置文件搞定所有,即只需要安装 ipvs 模块。
Keepalived 安装配置
官方下载 keepalived 相应稳定版本:
cd /usr/src ;wget -c
http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
tar -xzvf keepalived-1.1.15.tar.gz &&cd keepalived-1.1.15 && ./configure
&& make && make install
安装完毕,配置 keepalived 服务为系统服务。
DIR=/usr/local/
cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ && cp
$DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p
/etc/keepalived && cp $DIR/sbin/keepalived /usr/sbin/
在 MASTER 上/etc/keepalived/目录创建 keepalived.conf 配置文件,并
写入如下内容:
! Configuration Filefor keepalived
global_defs {
notification_email {
wgkgood@163.com
}
notification_email_from wgkgood@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state MASTER
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 51
priority 100
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.149.129
}
}
#REAL_SERVER_1
virtual_server 192.168.149.129 80 {
delay_loop 6
lb_algo wlclb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.149.130 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
#REAL_SERVER_2
real_server 192.168.149.131 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}}
如上配置文件,红色标记的地方需要注意,state 状态主服务器设置
MASTER,从设置为 BACKUP,优先级备机设置比 MASTER 小,例如设
置 90,使用 TCP 端口检测。
在 LVS BACKUP 服务器写入如下配置,需要注意的是客户端的配置要
修改优先级及状态:
! Configuration Filefor keepalived
global_defs {
notification_email {
wgkgood@163.com
}
notification_email_from wgkgood@163.com
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state BACKUP
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 51priority 90
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.149.129
}
}
#REAL_SERVER_1
virtual_server 192.168.149.129 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.149.130 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3delay_before_retry 3
connect_port 80
}
}
#REAL_SERVER_2
real_server 192.168.149.131 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
如上设置,LVS 主备配置完毕