一、DR特性
1、Director Server和Real Server必须在同一个物理网络中。
2、Real Server可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问。
3、Director Server作为群集的访问入口,但不作为网关使用。
所有的请求报文经由Director Server,但回复响应报文不能经过Director Server。
4、Real Server的网关不允许指向Director Server IP,即Real Server发送的数据包不允许经过Director Server。
5、Real Server上的l0接口配置VIP的IP地址。
二、Keepalived
一、概述
1、Keepalived支持故障自动切换(Failover)
2、Keepalived支持节点健康状态检查(Health Checking)
3、判断LVS负载调度器、节点服务器的可用性,当master主机出现故障及时切换到backup节点保证业务正常,当master故障主机恢复后将其重新加入群集并且业务重新切换回master节点(优先级)。
二、实现原理剖析
1、keepalived采用VRRP热备份协议实现Linux 服务器的多机热备功能。
2、VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案。
3、由多台路由器组成一个热备份组,通过共用的虚拟IP地址对外提供服务。
4、每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态。
5、若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务。
二、实例
实例配置
lvs1:ens33:192.168.238.150
ens33:0:192.168.238.20
lvs2:ens33:192.168.238.133
ens33:0:192.168.238.20
web1:ens33:192.168.238.100
lo:0:192.168.238.20
web2:ens33:192.168.238.99
lo:0:192.168.238.20
client:192.168.238.60
lvs服务器(主/备)
[root@localhost ~]# hostnamectl set-hostname lvs1
[root@localhost ~]# su
[root@lvs1 ~]# ntpdate ntp.aliyun.com
[root@lvs1 ~]# yum -y install ipvsadm keepalived
[root@lvs1 ~]# modprobe ip_vs
[root@lvs1 ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
配置lvs服务器虚拟网卡
[root@lvs1 ~]# cd /etc/sysconfig/network-scripts/
[root@lvs1 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@lvs1 network-scripts]# vim ifcfg-ens33:0
[root@lvs1 network-scripts]# ifup ens33:0 #开启虚拟网卡
ps:lvs从服务器无法在使用ifup开启,可以使用systemctl restart network重启网卡
[root@lvs1 network-scripts]# ifconfig ens33:0 #查看ens33:0网卡信息
ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.238.20 netmask 255.255.255.255 broadcast 192.168.238.20
ether 00:0c:29:88:a2:0a txqueuelen 1000 (Ethernet)
[root@lvs1 network-scripts]# vim /etc/sysctl.conf #调整内核参数
net.ipv4.ip_forward = 0 #关闭路由转发
net.ipv4.conf.all.send_redirects = 0 # 关闭所有重定向
net.ipv4.conf.default.send_redirects = 0 #关闭默认重定向
net.ipv4.conf.ens33.send_redirects = 0 #关闭ens33网卡重定向
[root@lvs1 network-scripts]# sysctl -p #刷新内核文件
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@lvs1 network-scripts]# ipvsadm-save > /etc/sysconfig/ipvsadm #启动负载均衡策略
[root@lvs1 network-scripts]# systemctl start ipvsadm #开启服务
[root@lvs1 network-scripts]# cd /opt
[root@lvs1 opt]# vim dr.sh #配置负载均衡分配策略
[root@lvs1 opt]# bash dr.sh #执行策略脚本
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs1:http rr
-> 192.168.238.99:http Route 1 0 0
-> 192.168.238.100:http Route 1 0 0
配置keepalive
[root@lvs1 opt]# yum install -y keepalived
[root@lvs1 opt]# cd /etc/keepalived/
[root@lvs1 keepalived]# vim keepalived.conf
global_defs { #定义全局参数
router_id lvs1 #热备组内的设备名称不能一致,备设为lvs2
}
vrrp_instance vi_1 { #定义VRRP热备实例参数
state MASTER #指定热备状态,主为master,备为backup
interface ens33 #指定承载vip地址的物理接口
virtual_router_id 51 #指定虚拟路由器的ID号,每个热备组保持一致
priority 110 #指定优先级,数值越大越优先,备设为100
advert_int 1
authentication {
auth_type PASS
auth_pass 6666
}
virtual_ipaddress { #指定集群VIP地址
192.168.238.20
}
}
#指定虚拟服务器地址vip,端口,定义虚拟服务器和web服务器池参数
virtual_server 192.168.238.20 80 {
lb_algo rr #指定调度算法,轮询(rr)
lb_kind DR #指定集群工作模式,直接路由DR
persistence_timeout 6 #健康检查的间隔时间
protocol TCP #应用服务采用的是TCP协议
#指定第一个web节点的地址,端口
real_server 192.168.238.100 80 {
weight 1 #节点权重
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
#指定第二个web节点的地址,端口
real_server 192.168.238.99 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
[root@lvs1 keepalived]# systemctl start keepalived
web服务器(两台web服务器)
配合web服务器lo:0网卡信息
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0
[root@web1 network-scripts]# ifup lo:0 #启动网卡
[root@web1 network-scripts]# ifconfig lo:0 #查看网卡信息
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.238.20 netmask 255.255.255.255
loop txqueuelen 1000 (Local Loopback)
[root@web1 network-scripts]# route add -host 192.168.238.20 dev lo:0 #路由禁锢,将192.168.238.20禁锢在本地
[root@web1 network-scripts]# route -n #查看路由,查看路由禁锢是否设置成功
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.238.2 0.0.0.0 UG 0 0 0 ens33
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 ens33
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.238.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33
192.168.238.20 0.0.0.0 255.255.255.255 UH 0 0 0 lo
ps:永久禁锢方式
vim /etc/rc.local #路由配置文件
在文件最后插入一下禁锢路由的代码
/sbin/route add -host 192.168.238.20 dev lo:0
[root@web1 network-scripts]# yum install -y httpd #安装Apache服务
[root@web1 network-scripts]# vim /etc/sysctl.conf #调整内核的ARP响应参数以阻止更新VIP的MAC地址,避免冲突
[root@web2 network-scripts]# sysctl -p #刷新生效
[root@web1 network-scripts]# systemctl start httpd
[root@web1 network-scripts]# vim /var/www/html/index.html
lvs1服务器
[root@lvs1 keepalived]# watch -n 1 ipvsadm -Lnc #实时查看节点状态
client访问192.168.238.20
模拟主lvs服务器宕机
[root@lvs1 keepalived]# ip a
[root@lvs1 keepalived]# systemctl stop keepalived
[root@lvs1 keepalived]# ip a
[root@lvs2 keepalived]# ip a
client访问192.168.238.20,任可以继续访问,如下图:
小结:
1、lvs:四层的负载均衡策略,使用于中、大型环境。
2、三种模式:①nat模式②tun模式③dr模式
3、算法:①轮询②加权轮询③最小连接④加权最小连接
4、lvs和keepalive实现备份、冗余、健康检查、故障切换等功能