LVS(Linux Virtual Server),也就是Linux虚拟服务器, 是一个自由软件项目。使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。
LVS主要用来做四层负载均衡。
1.2 Keepalived简介
Keepalived是分布式部署系统解决系统高可用的软件,结合LVS(Linux Virtual Server)使用,其功能类似于heartbeat,解决单机宕机的问题。
Keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。通过VRRP协议结合LVS,对组群服务器监控情况,若master出现宕机情况,则将VIP漂移到backup机上。实现了分布式系统高可用。可以理解为:keepalived是LVS的管理软件,根据监控情况,将宕机服务器从ipvsadm移除掉。
Keepalived的诞生最初是为LVS ipvs(director)提供高可用性的,后来发展一个多功能、通用的轻量级高可用组件,可以为ipvs、nginx、haproxy等诸多服务提供高可用功能,主要应用在负载均衡调度器上,同时也可以检查后端各realserver的健康状态。
1.3 负载均衡
四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。
七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。
四层通过虚拟 IP + 端口接收请求,然后再分配到真实的服务器,七层通过虚拟的 URL 或主机名接收请求,然后再分配到真实的服务器。所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决定怎么样转发流量。
2. 搭建过程及测试
2.1 主机配置
主机名 ip 操作系统 软件 端口 lvs01 10.1.28.253 CentOS 7.0 lvs keepalived 8080 lvs02 10.1.28.70 CentOS 7.0 lvs keepalived 8080 Nginxsever01 10.1.28.30 CentOS 7.0 nginx 8080 Nginxsever01
2.3 搭建准备
2.3.1 关闭所有机器防火墙
[root@lvs01 ~]#systemctl stop firewalld.service
2.3.2 关闭防selinux
关闭所有服务器selinux,修改/etc/selinux/config,将SELINUX由enforcing设置为disabled,重启服务器。
2.4 ipvs安装
LVS无需安装,安装的是管理工具,第一种叫ipvsadm,第二种叫keepalive。ipvsadm是通过命令行管理,而keepalive读取配置文件管理。
分别在lvs01和lvs02执行如下操作:
[root@lvs01 ~]# yum -y install ipvsadm
2.4.1 把模块加载进系统
[root@lvs01 ~]#ipvsadm
2.5 keepalived安装
分别在lvs01和lvs02执行如下操作:
[root@lvs01 ~]# yum -y install keepalived
2.6 keepalived配置
! Configuration File for keepalived
global_defs {
router_id MASTER ## keepalived 服务器标识符,可以随意设定( 貌似也是全局唯一 )
}
vrrp_instance VI_1 { ## 定义一个名为 VI_1 的 VRRP 实例
state MASTER ## Keepalived 服务器角色,MASTER 为主、BACKUP 为备
interface eth0 ## 指定 HA 监测网络接口
virtual_router_id 51 ## 虚拟路由标识,同一个 VRRP 实例使用唯一的标识,主备必须一样
priority 100 ## 节点优先级,同一 VRRP 实例中 MASTER 的优先级必须大于 BACKUP
advert_int 1 ## MASTER / BACKUP 之间同步检查间隔时间,单位 秒
authentication { ## 节点之间通信验证类型、密码 ,同一 VRRP 实例中,MASTER / BACKUP 必须使用相同的密码才可以通信
auth_type PASS
auth_pass 123456
}
virtual_ipaddress { ## 虚拟 IP 地址,又称漂移 IP 。可以通过 ip add 在 MASTER 上查看是否绑定
10.1.28.123
}
}
virtual_server 10.1.28.123 8080 { ## 定义虚拟服务器
delay_loop 6 ## 定义健康检查时间间隔,单位 秒
lb_algo rr ## 负载均衡调度算法,支持 rr 、wrr 、lc 、wlc 、lblc 、sh 、dh 等
lb_kind DR ## LVS 负载均衡机制,支持 NAT 、TUN 、DR
persistence_timeout 120 ## 会话保持时间,单位 秒。提供动态页面 session 保持功能,同一 IP 该值时间内被持续分配到同一台节点服务器上
protocol TCP ## 转发协议类型,支持 TCP 、UDP
real_server 10.1.28.30 8080 { ## 定义节点服务器
weight 1 ## 节点权重值,数字越大权重越高,分配到的连接越多。主要用于后端节点服务器性能不统一
notify_down /etc/keepalived/real_down.sh ## 该节点服务器处于 DOWN 状态后执行的脚本
TCP_CHECK { ## 健康检测方式,支持 HTTP_GET 、SSL_GET 、TCP_CHECK 、SMTP_CHECK 、MISC_CHECK
connect_port 8080 ## 检测端口,不指定时默认为 real_server 指定的端口
connect_timeout 3 ## 无响应超时时间,单位 秒
nb_get_retry 3 ## 重试次数
delay_before_retry 3 ## 重试间隔,单位 秒
}
}
real_server 10.1.28.40 8080 { ## 第二台节点服务器
weight 1
notify_down /etc/keepalived/real_down.sh
TCP_CHECK {
connect_port 8080
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
lvs02配置
! Configuration File for keepalived
global_defs {
router_id lvs02
}
vrrp_instance VI_1 {
state BACKUP
interface ens160
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.1.28.123
}
}
virtual_server 10.1.28.123 8080 {
delay_loop 6
lb_algo rr
lb_kind DR
# persistence_timeout 50
protocol TCP
real_server 10.1.28.30 8080 {
weight 1
TCP_CHECK{
connetct_timeout 10
retry 3
delay_before_retry 3
connetct_port 8080
}
}
real_server 10.1.28.40 8080 {
weight 2
TCP_CHECK{
connetct_timeout 10
retry 3
delay_before_retry 3
connetct_port 8080
}
}
}
2.7 参数说明
IPVS三种IP负载均衡技术:
VS/NAT: 即(Virtual Server via Network Address Translation)