LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统
ipvs : 嵌入到linux的内核
ipvsadm:管理应用程序
类型:
NAT:地址转换
DR: 直接路由
TUN:隧道
lvs的调度方法:
四种静态:
rr:轮循
wrr:
dh:
sh:
动态调度方法:
lc: 最少连接
wlc: 加权最少连接
sed: 最短期望延迟
nq: never queue
LBLC: 基于本地的最少连接
DH:
LBLCR: 基于本地的带复制功能的最少连接
默认方法:wlc
安装ipvsadm
yum install ipvsadm -y
管理集群服务
添加:-A -t|u|f service-address [-s scheduler]
-t: TCP协议的集群
-u: UDP协议的集群
service-address: IP:PORT
-f: FWM: 防火墙标记
service-address: Mark Number
修改:-E
删除:-D -t|u|f service-address
ipvsadm -A -t 192.168.9.100:80 -s rr
管理集群服务中的RS
添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定义好的某集群服务
-r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
[-g|i|m]: LVS类型
-g: DR
-i: TUN
-m: NAT
[-w weight]: 定义服务器权重
修改:-e
删除:-d -t|u|f service-address -r server-address
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 –g
ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g
查看
-L|l
-n: 数字格式显示主机地址和端口
–stats:统计数据
–rate: 速率
–timeout: 显示tcp、tcpfin和udp的会话超时时长
-:c 显示当前的ipvs连接状况
删除所有集群服务
-C:清空ipvs规则
保存规则
-S
ipvsadm -S > /path/to/somefile
载入此前的规则:
-R
ipvsadm -R < /path/form/somefile
隐藏VIP方法:对外隐藏,对内可见
kernel parameter:
目标mac地址为全F,交换机触发广播
/proc/sys/net/ipv4/conf/IF/
arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标(MAC)地址配置请求
到达的接口上的时候,才给予响应;
arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
LVS-DR实现
1,准备3台虚拟机
2,先配置3台虚拟机的网络:
eth0,配置在一个网段
DIP,RIP在一个网段
3,配置lvs的VIP
ifconfig eth0:0 192.168.9.100/24
echo “1” > /proc/sys/net/ipv4/ip_forward
4,调整RS的响应。通告级别(每一台RS都配):
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
5,配置RS的VIP(每一台RS都配)
ifconfig lo:8 192.168.9.100 netmask 255.255.255.255
6,启动RS上的httpd
yum install httpd -y
/var/www/html
vi index.html
from ooxxip
service httpd start
客户端验证:RIP:80 能显示
VIP:80不能显示
7,LVS——ipvsadm
yum install ipvsadm -y
ipvsadm -A -t 192.168.9.100:80 -s rr
ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.12 -g
ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.13 -g
ipvsadm -ln
浏览器刷新: 访问vip
ipvsadm –lnc
netstat -natp
LVS:
负载均衡
四层
不会握手——高速转发
看IP和PORT,[flag]
丰富的调度算法
后端:镜像服务器
后端:没有健康检查机制
自身:单点故障
数据倾斜
没有解决的问题:后端服务器如果臃肿,由计算和io瓶颈,lvs是无能为力的
针对单点故障,引入主从模式,利用keepalive
实现
准备两台虚拟机,一台为主一台为从
编辑主:keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.46.100/24 dev eth0 label eth0:3
}
}
virtual_server 192.168.46.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.46.151 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.46.152 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
编辑从:keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.46.100/24 dev eth0 label eth0:3
}
}
virtual_server 192.168.46.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 192.168.46.151 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.46.152 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
从的keepalived.conf 主要就是state:BACKUP和priority一定要比主的小 别的一致,(一定要关闭防火墙)不然就会出现两个虚拟ip