企业运维实战--lvs之DR模式负载均衡、keepalived、lvs高可用
前言
lvs 负载均衡( linux virtual server),linux虚拟服务器,是一个虚拟的四层交换器集群系统,根据目标地址和目标端口实现用户请求转发,本身不产生流量,只做用户请求转发,目前是负载均衡性能最好的集群系统。
一、负载均衡原理
传统实现负载均衡:DNS ,算法单一、对后方没有健康检测
负载均衡方法:
DR> Tun > NAT> fullNAT
前三种没有抗攻击能力,且对后端没有健康检测
最后一个有上述两种功能,但性能相对较差,不过硬件可以弥补
DR模式: 主要修改mac,mac地址位于数据链路层,需要主机都在一个vlan(虚拟局域网)里面,DR和RS在一个Vlan里面,所以要做arp避免vip冲突
大概实现过程:
C(Client) ----> DR —> RS ----> C(Client)
ipvsadm是一个管理工具,内核中的ipvs、iptables < kernel netfilter,
iptables优先级最高
iptables允许输入:80 进入,ipvs标记读出:80 后续进入lvs策略(DR模式)
二、实现负载均衡
本次负载均衡实验采用DR模式,
server5为DR
server6、7为RS,
server5:
安装ipvsadm
yum install -y ipvsadm.x86_64
添加虚拟访问ip172.25.9.100
ip addr add 172.25.9.100/24 dev eth0
ip addr
-A添加service rr表示轮询
ipvsadm -A -t 172.25.9.100:80 -s rr
添加配置ipvsadm,使得172.25.9.6和172.25.9.7的80端口直连到172.25.9.100的80端口
ipvsadm -a -t 172.25.9.100:80 -r 172.25.9.6:80 -g #-a表示添加 -t tcp模式 -g表示直连
ipvsadm -a -t 172.25.9.100:80 -r 172.25.9.7:80 -g
查看配置 -n表示跳过解析
ipvsadm -ln
删除
ipvsadm -d -t 172.25.9.100:80 -r 172.25.9.2:80 -g
server6:
安装apache,编写默认发布文件,开启服务
yum install -y httpd
echo server6 > /var/www/html/index.html
systemctl start httpd.service
添加ip
ip addr add 172.25.9.100/32 dev eth0
ip addr
安装arp用于锁定mac地址
yum install -y arptables
arptables --help
arptables -nL
设定本机ip虚拟网段172.25.9.100不被访问,锁定MAC地址,mac地址位于数据链路层
arptables -A INPUT -d 172.25.9.100 -j DROP
arptables -A OUTPUT -s 172.25.9.100 -j mangle --mangle-ip-s 172.25.9.6
arptables-save
arptables-save > /etc/sysconfig/arptables
systemctl restart arptables.service
arptables -nL
将arptables配置文件传给server7
scp /etc/sysconfig/arptables server7:/etc/sysconfig/
server7: 与server6操作相同
yum install -y httpd
echo server7 > /var/www/html/index.html
systemctl start httpd
ip addr add 172.25.9.100/32 dev eth0
yum install -y arptables
vim /etc/sysconfig/arptables #修改arptables
cat /etc/sysconfig/arptables
systemctl restart arptables.service
arptables -nL
测试:真实主机:
arp -d 172.25.9.100
ping 172.25.9.100
arp -an|grep 100
for i in {1…10};do curl 172.25.9.100; done
arp -d 172.25.9.100
ping 172.25.9.100
arp -an|grep 100
arp -d 172.25.9.100
ping 172.25.9.100
arp -an|grep 100
反复删除记录,arp锁定mac成功
for i in {1..10};do curl 172.25.9.100; done
注意:
server5本机80端口虽然已经开启,但是由于ipvs优先级较高,他将所有80端口的调度调入lvs策略中进行,所以本机不会执行172.25.9.100:80的操作,也就不会参加到负载均衡中。
三、keepalived进行后端检测
安装keepalived
yum install -y keepalived
编辑配置文件,
cd /etc/keepalived/
ls
vim keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #接收警报的email地址,可添加多个
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1 #邮件服务smtp_server地址 采用本地回环接口
smtp_connect_timeout 30 #设置连接smtp服务器超时时间
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 #状态由priority决定 大的为MASTER,小的为BACKUP
interface eth0 #高可用HA检测网络接口
virtual_router_id 39 #主、备机的vrid必须相同,取值0~255
priority 100 #主机优先级,主机优先级一定要大于备机
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #虚拟vip地址
172.25.9.100
}
}
# 负载均衡配置
# DR配置
virtual_server 172.25.9.100 80 { #定义虚拟服务器
delay_loop 6 #每隔6秒查询realserver状态
lb_algo rr #lvs调度算法 此处为轮询
lb_kind DR #DR模式
#persistence_timeout 50 #延迟50s负载均衡
protocol TCP #指定转发类型 TCP&UDP
# RS配置
real_server 172.25.9.6 80 { #配置服务节点
weight 1 #权重为1 可根据服务器性能调整,数字越大,权值越大
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 172.25.9.7 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
systemctl status postfix #收发邮件系统
端口为25
清空所有之前负载均衡手动的操作
删除之前添加的虚拟网段
ip addr
ip addr del 172.25.9.100/24 dev eth0
ipvsadm -C #删除ipvs设置
ipvsadm -ln
启动服务,自动创建ip并添加到ipvs策略
systemctl start keepalived.service
ipvsadm -ln
测试:
真实主机:
for i in {1..10};do curl 172.25.9.100; done
server6关闭httpd服务
server5 ipvsadm -ln
for i in {1..10};do curl 172.25.9.100; done
server6重新启动apache
for i in {1…10};do curl 172.25.9.100; done
四、lvs高可用
配置另一台BACKUP lvs ,当MASTER down 掉后自动结果vip进行lvs负载均衡操作
全新虚拟机server4:
yum install -y keepalived
yum install -y ipvsadm
cd /etc/keepalived/
vim keepalived.conf
修改keepalived配置文件
MASTER ----> BACKUP
BACKUP优先级低于 MASTER
开启服务
systemctl start keepalived.service
查看ipvs策略是否成功
ipvsadm -ln
ip addr
#当MASTER down后 vip会漂移到BACKUP,重启MASTER后回复到MASTER上,因为master优先级高
测试:
server5:
systemctl stop keepalived.service
server6:
ipvsadm -ln
ip addr
server5:
systemctl start keepalived.service
server4:
server5: