为解决服务器高并发访问时的压力,将访问分担到不同的服务器上实现负载均衡lvs
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统
ipvs : 嵌入到linux的内核
ipvsadm:管理应用程序
类型:
NAT:地址转换(D_NAT lvs负责接收和返回)
DR: 直接路由 ( LVS负责接收,RS负责返回)
TUN:隧道 ( LVS通过隧道转给RS, LVS负责接收,RS负责返回)
假想架构图
下面实现的是DR模式
LVS服务器与RS服务器公用一个公网ip(VIP),隐藏RS的vip达到欺骗效果
VIP:与客户端交互,对客户端透明
DIP,RIP:LVS与RS之间交互的内网IP,只需用MAC地址来寻址
1、 一台主机作为 DR(虚拟服务器,lvs)安装ipvsadm
yum install ipvsadm
2、在DR上设置两个静态ip
DIP 192.168.126.12
VIP 192.168.126.200
ifconfig eth0:1 192.168.126.200 netmask 255.255.255.0
3 、多台机器作为RS
a) 静态设置 rip 192.168.126.13
192.168.126.14
b)修改报文源IP的设置,需设置内核参数,降低对ARP请求mac反应的级别
arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标(MAC)地址配置请求到达的接口上的时候,才给予响应;
arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
c)在RS上,设置网卡别名:192.168.126.200 隐藏VIP 子网掩码需为255.255.255.255
ifconfig lo:1 192.168.126.200 netmask 255.255.255.255 broadcast 192.168.126.200
4 、RS分别配置web服务
yum install httpd -y
cd /var/www/html
vi index.html
启动服务 (netstat -natp | grep 80 查看端口情况)
service httpd start
不同index.html配置不同内容以测试
vi /var/www/html/index.html
5 、在DR上使用ipvsadm 添加集群服务
ipvsadm -C
ipvsadm -A -t 192.168.126.200:80 -s wlc
ipvsadm -a -t 192.168.126.200:80 -r 192.168.126.13 -g -w 1
ipvsadm -a -t 192.168.126.200:80 -r 192.168.126.14 -g -w 1
测试本机对于网络连接详情
客户端访问本机进程的情况
netstat -nalp
LVS 查看负载详情
ipvsadm –Lnc
Keepalived高可用
keepalived是集群管理中保证集群高可用的服务软件,解决单个LVS出现故障,进行主备切换
高可用 High Available
1、需要心跳机制探测后端RS是否提供服务。
a) 探测down,需要从lvs中删除该RS
b) 探测发送从down到up,需要从lvs中再次添加RS。
2、Lvs DR,需要主从(HA),由主服务器发送心跳,备服务器根据心跳判断主服务器是否alive
Keepalived 原理:
VRRP协议(虚拟路由冗余协议) - Virtual Router Redundancy Protocol
IP漂移
架构图
keepalive安装
在WEB1和WEB2分别执行
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
分别设置网卡别名:10.0.0.148 隐藏VIP 子网掩码需为255.255.255.255
ifconfig lo:1 10.0.0.148 netmask 255.255.255.255
分别安装httpd,并
vi /var/www/html/index.html
不然keepalived心跳验证时会显示304
可以不用安装ipvsadm,keepalived会完成LVS配置,安装ipvsadm则可以使用ipvsadm -lnc查看网络
在LVS_MASTER和LVS_BACKUP上安装keepalived
yum install keepalived
帮助手册
man 5 keepalived.conf
查看日志
tail /var/log/message
修改配置(LVS_MASTER和LVS_BACKUP上)
配置文件位置
/etc/keepalived/keepalived.conf
编辑之前,需要备份
cp keepalived.conf keepalived.conf.backup
vi keepalived.conf
keepalived
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #发送提醒邮件的目标地址可有多个
goldbin@126.com
}
notification_email_from test@localhost #发送邮件的from地址,可以随意写,邮件地址不存在都无所谓
smtp_server 127.0.0.1 #邮件服务的地址,一般写本地
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP #MASTER 主和从
interface eth0 #VIP需要绑定的网卡名称
virtual_router_id 51
priority 101 #优先级 主的优先级要高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.148/24 dev eth0 label eth0:1 #设置VIP,不需要手动设置lvs的vip了,keepalived会自动配置
}
}
virtual_server 10.0.0.148 80 { #设置虚拟lvs服务,VIP PORT
delay_loop 6
lb_algo rr#调度算法wrr
lb_kind DR#lvs的模式
nat_mask 255.255.255.0
persistence_timeout 50 #同一个IP地址在50秒内lvs转发给同一个后端服务器
protocol TCP
real_server 10.0.0.137 80 { #设置真实服务器的心跳机制 RID PORT
weight 1 #权重
HTTP_GET { #心跳检测的方式
url {
path / #心跳检查的地址
status_code 200 #心跳检查返回的状态
}
connect_timeout 2 #超时时间
nb_get_retry 3 #重复检查3次
delay_before_retry 1 #每隔1秒钟再次检查
}
}
real_server 10.0.0.139 80 { #第二个真实服务器设置
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 2
nb_get_retry 3
delay_before_retry 1
}
}
}
在主备LVS分别启动
service keepalived start
测试
在LVS_MASTER上执行
ipconfig eth0 down
查看LVS_BACKUP是否会启用vip
ipconfig
keepalived缺点
直接杀死LVS_MASTER,会导致LVS_BACKUP启用vip,从而产生两个暴露的vip