一,DR模式介绍
1,数据包流向分析
1.用户发送请求到Director Server,请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。
2.由于DS和RS在同一个网络中,所以是通过二层数据链路层来传输。
3.内核空间判断数据包的目标IP是本机IP,此时IPVS比对数据包请求的服务是否为集群服务,若是,重新封装数据包,修改源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server.
4.RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文,重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过lo接口传送给eth0网卡然后向外发出。
5.RS直接将响应报文传送到客户端。
- LVS-DR模型的特点
1.RS和DS必须在同一个物理网络中。
2.RS可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对RIP进行直接访问。
3.所有的请求报文经由Director。 Server,但响应报文必须不能经过Director Server。
4.RS的网关绝不允许指向DIP(不允许数据包经过director)。
5.RS上的lo接口配置VIP的IP地址。
二,keepalived
1.介绍
keepalived是一个基于VRRP(virtual route redundent protocol)协议来实现的LVS服务高可用方案,可以利用其来避免单点故障。
一个LVS服务会有2台 服务器运行keepalived,一台为主服务器,一台为备服务器,但对外表现一个虚拟IP。
主服务会发送特定的消息给备服务器,当备服务器无法接收到主服务器的消息时,即认为主服务器宕机,备服务器会接管主服务器的VIP,继续提供服务,从而保证高可用性。
2.特点
优点: 轻量级、配置简单
缺点:不能实现服务状态级别的高可用
3.HA与LB的区别
HA:实现服务的高可用
LB:实现流量入口的最大化
三,实验
准备工作检查防火墙和网络
systemctl stop firewalld ##关闭防火墙
systemctl disable firewalld
setenforce 0
主负载调度器1 #192.168.35.40
备负载调度器2#192.168.35.30
web服务器1 #192.168.35.10
lo:0 (VIP) #192.168.35.100
web服务器2 # 192.168.35.20
lo:0 (VIP) #192.168.35.100
centos客户端#192.168.35.150
centos客户端#192.168.35.160
LVS调度服务器配置(主-备)
yum -y install ipvsadm
modprobe ip_vs #加载ip_vs模块
cat /proc/net/ip_vs #查看ip_vs版本信
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.35.100
NETMASK=255.255.255.255
ifup ens33:0
ifconfig ens33:0
systemctl restart network
vim /etc/sysctl.conf #调整proc响应参数
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
两台LVS服务器开启ipvsadm
modprobe ip_vs
cat /proc/net/ip_vs
两台LVS服务器配置负载分配策略
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
systemctl status ipvsadm
编写脚本方便管理ipvsadm命令
vim /opt/dd.sh
#!/opt/dd.sh
ipvsadm -C ##清除表中所有记录
ipvsadm -A -t 192.168.35.100:80 -s rr
ipvsadm -a -t 192.168.35.100:80 -r 192.168.35.10:80 -g ##指定一条新的vip服务器真实地址为192.168.35.10,工作模式为DR
ipvsadm -a -t 192.168.35.100:80 -r 192.168.35.20:80 -g ##指定一条新的vip服务器真实地址为192.168.35.20,工作模式为DR
ipvsadm
web站点服务器配置
web服务器1:
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.35.100
NETMASK=255.255.255.255
ifcfg lo:0
route add -host 192.168.35.100 dev lo:0 ##禁锢路由
route -n
vim /etc/rc.local ##配置启动管理执行路由禁锢
/sbin/route add -host 192.168.35.100 dev lo:0
yum -y install httpd
两台web服务器调整内核的ARP响应参数
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1 ##环形接口的策略
net.ipv4.conf.lo.arp_announce = 2 ##环形接口的响应策略
net.ipv4.conf.all.arp_ignore = 1 ##所有接口的策略
net.ipv4.conf.all.arp_announce = 2 ##所有接口的响应策略
web1:
vim /var/www/html/index.html
<html>
<body>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<h1>this is klkl web</h1>
</body>
</html>
web2:
vim /var/www/html/index.html
<html>
<body>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<h1>this is zwzyt web</h1>
</body>
</html>
访问客户端
访问192.168.35.100
配置keepalived
两台LVS服务器安装
yum -y install keepalived
cd /etc/keepalived/
cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
global_defs { #定义全局参数
router_id lvs_01 #热备组内的设备名称不能一致
}
vrrp_instance vi_1 { #定义VRRP热备实例参数
state MASTER #指定热备状态,主为master,备为backup
interface ens33 #指定承载vip地址的物理接口
virtual_router_id 51 #指定虚拟路由器的ID号,每个热备组保持一致
priority 110 #指定优先级,数值越大越优先
advert_int 1
authentication { ##加密
auth_type PASS
auth_pass 6666
}
virtual_ipaddress { #指定集群VIP地址
192.168.35.100
}
}
virtual_server 192.168.35.100 80 {
lb_algo rr #指定调度算法,轮询(rr)
lb_kind DR #指定集群工作模式,直接路由DR
persistence_timeout 6 #健康检查的间隔时间
protocol TCP #应用服务采用的是TCP协议
}
real_server 192.168.35.10 80 {
weight 1 #节点权重
TCP_CHECK {
connect_port 80 #添加检查的目标端口
connect_timeout 3 #添加连接超时
nb_get_retry 3 #添加重试次数
delay_before_retry 3 #添加重试间隔
}
}
real_server 192.168.35.20 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
LVS两台服务器均开启keepalived
systemctl start keepalived
systemctl status keepalived
查看虚拟网卡信息
验证一下