lvs+keepalived
- 一.lvs 调度器的配置
- client---->DR (客户端访问调度器)在同一个vlan里面------>RS(调度器调度后端的rs) ------>client
- DR端
- 让客户端的调度落在调度器上
- 在client端
- server2中
- server3中
- 测试
- lvs工作原理?(待补充)
- 安全控制---->优先级
- LVS
- 1.2 LVS问题
- 1.– 某台RealServer down了,怎么办? --- 健康检测
- 2.lvs+shell 健康检测
- – LVS本身down了,怎么办?---LVS冗余
- 二.Keepalived – LVS管理软件
- 1.– 主备冗余:采用VRRP协议癿HeartBeat;
- 在server1
- 在server4
- 2.– 健康检测:支持4/7监测;
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。
2.lvs
4层 load balance
—基于策划书曾信息进行调度
—调度算法:WRR/WLC等
—工作模式:NAT/DR/TUNNEL
—传输协议:TCP/UDP
主机名 | ip |
---|---|
server1 | 172.25.10.1 主调度器 |
server2 | 172.25.10.2 |
server3 | 172.25.10.3 |
server4 | 172.25.104 backup调度器 |
一.lvs 调度器的配置
1、客户端发送请求至调度器(VIP),请求报文源地址是CIP,目标地址为VIP;
2、LVS调度器接收到请求,报文在PREROUTING链检查,确定目的IP是本机,于是将报文发送至INPUT链,ipvs内核模块确定请求的服务是配置的LVS集群服务,然后根据用户设定的均衡策略选择某台后端RS,并将目标MAC地址修改RIP的MAC地址。因为调度器和后端服务器RS在同个网段,因此直接二层互通,将请求发给选择的RS处理;
3、因为报文目的mac是本机,且RS上有配置VIP,因此RS能接收该报文。后端服务处理完请求后,将响应直接发往客户端,此时源IP地址为VIP,目标IP为CIP。
server1 相当于一个调度器,负载均衡
client---->DR (客户端访问调度器)在同一个vlan里面------>RS(调度器调度后端的rs) ------>client
DR端
让客户端的调度落在调度器上
准确地定位到调度器上
2,3上的arp已经被屏蔽
DR :调度器和real server 所有节点上都需要vip,
real server 上禁用arp ,
[root@server1 ~]#
yum install -y ipvsadm
###让用户编写策略---->放在内核;里
需要一个vip 虚拟的ip
[root@server1 ~]# ip addr add 172.25.10.100/24 dev eth0
[root@server1 ~]# ip addr show eth0
inet 172.25.10.1/24 brd 172.25.10.255 scope global eth0
valid_lft forever preferred_lft forever
inet 172.25.10.100/24 scope global secondary eth0
valid_lft forever preferred_lft forever
[root@server1 ~]#
ipvsadm -A -t 172.25.10.100:80 -s rr
添加 -t tcp 调度
[root@server1 ~]#ipvsadm -a -t 172.25.10.100:80 -r 172.25.10.2:80 -g
往tcp服务里面添加真实的服务器地址
[root@server1 ~]#ipvsadm -a -t 172.25.10.100:80 -r 172.25.10.3:80 -g
[root@server1 ~]#ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.10.100:80 rr
-> 172.25.10.2:80 Route 1 0 0
-> 172.25.10.3:80 Route 1 0 0
在client端
server2中
yum install -y httpd
systemctl enable --now httpd
echo server2>/var/www/html/index.html
[root@server2 ~]#
ip addr add 172.25.10.100/24 dev eth0
加vip
添加策略屏蔽arp
server3中
yum install -y httpd
systemctl enable --now httpd
echo server3>/var/www/html/index.html
[root@server3 ~]#
ip addr add 172.25.10.100/24 dev eth0
加vip
测试
调度直接落在调度器上
[root@server1 ~]# ip addr show eth0
link/ether52:54:00:f7:b8:3d
brd ff:ff:ff:ff:ff:ff
lvs工作原理?(待补充)
安全控制---->优先级
访问控制
linux的安全体系控制
iptables ----->tcpwarp---->xinted(超级守护进程)---->service------>filesystem(rwx,SELINUX)
在火墙策略中禁止vip访问
LVS
– 内核模块:ip_vs
– 实现了负载均衡
1.2 LVS问题
1.– 某台RealServer down了,怎么办? — 健康检测
2.lvs+shell 健康检测
当检测到realserver挂掉时,在列表中删除
正常,添加
[root@server1 ~]# cat lvs.sh
#!/bin/bash
VIP=172.25.10.100
PORT=80
RS=(172.25.10.2 172.25.10.3)
LOG=checklvs.log
addrs() {
ipvsadm -a -t $VIP:$PORT -r $1:$PORT -g
echo "add $1 to ipvs" >> $LOG
}
delrs() {
ipvsadm -d -t $VIP:$PORT -r $1
echo "del $1 to ipvs" >> $LOG
}
checkrs() {
for i in ${RS[*]}
do
num=`curl -I -s -o /dev/null -w %{http_code} http://$i`
if [ $num -eq 200 -a $(ipvsadm -ln|grep $i|wc -l) -eq 0 ];then
addrs $i
elif [ $num -ne 200 -a $(ipvsadm -ln|grep $i|wc -l) -ne 0 ];then
delrs $i
fi
done
}
while true
do
checkrs
sleep 5
done
– LVS本身down了,怎么办?—LVS冗余
二.Keepalived – LVS管理软件
vip作为集群资源,将会由Keepalived接管,清除所有的ipvsadm策略
做一个备用的调度器:主调度器:1 备用 4
删掉之前加的100ip
1.– 主备冗余:采用VRRP协议癿HeartBeat;
lvs本身down掉
在server1
ipvsadm -C
yum install keepalived
相当于将lvs的策略写成文本的方式执行
[root@server1 keepalived]# vim /etc/keepalived/keepalived.conf
[root@server1 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
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_ipaddrJan 19 14:45:59 server4 Keepalived_vrrp[14334]: Using LinkWatch kernel netlink reflector...
Jan 19 14:45:59 server4 Keepalived_vrrp[14334ess {
172.25.10.100
}
}
virtual_server 172.25.10.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 172.25.10.2 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.10.3 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@server1 keepalived]# ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 52:54:00:f7:b8:3d brd ff:ff:ff:ff:ff:ff
inet 172.25.10.1/24 brd 172.25.10.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fef7:b83d/64 scope link
valid_lft forever preferred_lft forever
在server4
操作同上
当主调度器挂掉的时候-
[root@server1 keepalived]# systemctl stop keepalived.service backup调度器会获取vip,
当主调度器出现故障时,backup调度器转化为主调度器
当主调度器正常时,其又变成backup状态
2.– 健康检测:支持4/7监测;
当关闭client上的httpd服务时
信息会发送到调度器上