lvs+keepAlived——负载均衡
一、 简介
1. 负载均衡的类型
l 负载均衡可以采用硬件设备,也可以采用软件负载
l 商用硬件负载设备成本通常较高,所以一般情况下会采用软件负载
l 软件负载解决的两个核心问题是:选谁、转发,其中最著名的是lvs
2. lvs是什么?
l 英文全称是Linux Virtual Server,即Linux虚拟服务器
l 由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org
l Linux2.4内核以后,LVS已经是Linux标准内核的一部分
l 可以将请求分发给后端真实服务器处理
l 有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等
l 提供了多种调度算法
² 轮询调度(Round-Robin Scheduling)
² 加权轮询调度(Weighted Round-Robin Scheduling)
² 最小连接调度(Least-Connection Scheduling)
² 加权最小连接调度(Weighted Least-Connection Scheduling)
² 基于局部性的最少链接(Locality-Based Least Connections Scheduling)
² 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication Scheduling)
² 目标地址散列调度(Destination Hashing Scheduling)
² 源地址散列调度(Source Hashing Scheduling)
² 最短预期延时调度(Shortest Expected Delay Scheduling)
² 不排队调度(Never Queue Scheduling)对应: rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
l 有三种转发规则
² NAT:简单理解,就是数据进出都通过LVS,性能不是很好。
² TUNL:简单理解:隧道
² DR:最高效的负载均衡规则
3. lvs的体系结构
l 最前端的负载均衡层,用Load Balancer表示
l 中间的服务器集群层,用Server Array表示
l 最底端的数据共享存储层,用Shared Storage表示
l 在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务
4. keepAlived是什么?
l 因为所有的请求都要经过负载均衡,所以负载均衡必然是非常重要,不能挂掉,说白了就是要keep the lvs alived。
l 提供的功能就是可以配置2台LVS,一台主机,一台备机。并且检测任何一个节点是否还活着。
5. lvs的优点?
l 抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。
l 有完整的双机热备方案,当节点出现故障时,lvs会自动判别,所以系统整体是非常稳定的。
l 基本上能支持所有应用,因为lvs工作在4层,所以它可以对几乎所有应用做负载均衡,包括http、数据库、聊天室等等。
6. lvs与nginx对比?
l 负载度 lvs优于nginx
l 稳定度 lvs优于nginx
l 服务器性能要求 lvs优于nginx
l 网络层数的效率 lvs优于nginx
² 网络七层:应用层、会话层、表示层、传输层、网络层、链路层、物理层
l 功能多少 nginx优于lvs
7. lvs+keepAlived的应用场景?
l 大型网站负载均衡
二、 lvs+keepAlived安装
1. 软件环境
l CentOS7(4台)
l 2台http服务器
l 2台负载均衡:lvs+keepAlived
2. http服务器安装配置(2台)
首先,后2台装http服务器
设置开机自启动
开启服务
查看服务
此时,可以访问测试
2台机器,在如下位置,创建 index.html,随意写内容,区分2台机器即可
此时访问,是可以区分2台机器的
l 2台机器创建配置文件,都粘贴以下内容
l 192.168.198.150是虚拟IP,注意与其他机器在一个网段就可以,IP不冲突,用于访问
#!/bin/bash
#description : start realserver
SNS_VIP=192.168.6.150
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of REALServer"
/sbin/ifconfig lo:0 $SNS_VIP broadcast $SNS_VIP netmask 255.255.255.255 up
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
/sbin/ifconfig lo:0 down
echo "close LVS Directorserver"
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
2台机器,分别给文件赋权限
2台机器start
ifconfig查看,此时是多出了一块网卡
3. lvs+keepAlived安装配置(主lvs)
系统版本2.4以上,linux内置了LVS
若有冲突报错,删除一下
装keepAlived
可以查看到它的配置文件位置
创建并覆盖文件
l 输入 vi /etc/keepalived/keepalived.conf 编辑配置文件,加入以下内容
global_defs {
# notification_email {
# }
# smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.6.150
}
}
virtual_server 192.168.6.150 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.6.130 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.6.131 80 {
weight 2
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
启动服务
可以查看日志信息
查看启动状态
4. lvs+keepAlived负载均衡测试
l 转发,通过VIP进行访问,真实处理请求的不一定是哪个http
l 故障移除
关掉某台http,模拟挂了
此时,挂掉的机器,自动移除
l 故障恢复自动添加
再开启,模拟故障恢复
此时,可以再次正常访问
5. lvs备机搭建(备lvs)
系统版本2.4以上,linux内置了LVS
若有冲突报错,删除一下
装keepAlived
可以查看到它的配置文件位置
创建并覆盖文件
l 输入 vi /etc/keepalived/keepalived.conf 编辑配置文件,加入以下内容
global_defs {
# notification_email {
# }
# smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.6.150
}
}
virtual_server 192.168.6.150 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.6.130 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.6.131 80 {
weight 2
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
启动服务
查看状态
查看日志
6. lvs主备测试
l 备机自动切换
模拟主LVS挂掉
访问浏览器VIP,还是照常工作
l 主机启动,主机自动上位