部署LVS-DR+Keepalived高可用群集构建


LVS-DR工作原理

LVS-DR(Linux Virtual Server Director Server)工作模式,是生产环境中最常用的一 种工作模式。

  • LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用
  • 节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。
  • 为了响应对整个群集的访问,Director Server 与 Real Server 都需要配置 VIP 地址。
    每个Real Server上都有两个IP:VIP(负载均衡对外提供访问的 IP 地址)和RIP(负载均衡后端的真实服务器 IP 地址),但是VIP是隐藏的,就是不能提供解析等功能,只是用来做请求回复的源IP的,Director上只需要一个网卡,然后利用别名来配置两个IP:VIP和DIP(负载均衡与后端服务器通信的 IP 地址),在DIR接收到客户端的请求后,DIR根据负载算法选择一台rs sever的网卡mac作为客户端请求包中的目标mac,通过arp转交给后端RS serve处理,后端再通过自己的路由网关回复给客户端

LVS-DR数据包流向分析

为了方便进行原理分析,将Client与群集机器放在同一网络中,数据包流经路线为1-2-3-4
①Client向目标VIP发出请求,Director(负载均衡器)接受
②Director根据负载均衡算法选择RealServer_1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer_1的MAC地址,然后在局域网上发送
③RealServer_1收到这个帧,解封装后发现目标IP与本机匹配(RealServer事先绑定了VIP),于是处理这个报文。随后重新封装报文,发送到局域网
④Client将收到回复报文。Client认为等到正常的服务,而不会知道是哪一台处理器的
ps:如果是跨网段,则报文通过路由器经由internet返回给用户
在这里插入图片描述

DR模式特点及缺点

  • Director Server 和 Real Server 必须在同一个物理网络中。
  • Real Server 可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对 RIP 进行直接访问
  • Director Server作为群集的访问入口,但不作为网关使用
  • 所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server
  • Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server
  • Real Server 上的 lo 接口配置 VIP 的 IP 地址

ARP问题分析

问题1

在LVS-DR负载均衡集群中,负载均衡与节点服务器都要配置相同的VIP地址,势必会造成各服务器ARP通信紊乱

ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收ARP广播,
只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播

解决办法

对节点服务器进行处理,使其不响应针对VIP的ARP请求,
使用虚接口lo:0承载VIP地址,
设置内核参数arp_ ignore=1: 系统只响应目的IP为本地IP的ARP请求

问题2

RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP) 作为ARP请求包中的源IP地址,而不使用发送接口的IP地址,路由器收到ARP请求后,将更新ARP表项,原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址,导致Director的VIP失效

解决办法

对节点服务器进行处理,设置内核参数arp_announce=2,系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

Keepalived概述

Keepalived是企业应用中,单台服务器承担应用存在单点故障的危险,单点故障一旦发生,企业服务器将会发生终端,造成极大的危害和损失

keepalived工具介绍、

  • keepalived 负载均衡软件设计的,用来管理并监控 LVS 集群中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP 功能。因此,keepalived 除了能够管理 LVS 集群外,还可以为其他服务(例如:Nginx、Haproxy、MySQL等)实现高可用。
  • keepalived 软件主要是通过 VRRP 协议实现高可用功能的。VRRP 是 Virtual Router Redundancy Protocol(虚拟路由器冗余协议的缩写,VRRP 出现的目的就是为了解决静态路由单点故障的问题,它能够保证当个别节点宕机时,整个网络可以不间断地运行。所以,keepalived 一方面具有配置管理 LVS 的功能,同时还具有对 LVS 下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用。

keepalived服务重要功能

  • 管理LVS负载均衡软件
  • 支持故障自动切换(Failover)
  • 实现LVS集群中节点的健康检查(Health Checking)
  • 实现LVS负载调度节点服务器的高可用性(HA)

对于节点服务器:健康检查如果发现有故障的节点就会将其隔离或者剔除集群,待其回复后再重新加入的集群当中去

负载均衡器:健康检查会定时去检查主机的状态(包括主机和服务的状态),如果出现故障就会自动切换到备主机上待主机恢复,在重新让主承载业务请求

keepalived实现原理

VRRP虚拟冗余协议

VRRP会把多个路由组成一个虚拟路由组VRID,VRRP会生成一个虚拟路由(包含虚拟IP、虚拟MAC,局域网内,用户不需要关心谁是主路由/谁是备路由,他们只用虚拟路由器的虚拟IP作为他们的网关),实际上虚拟IP就是承载在Master路由上,也就是说实际的数据是通过Master进行转发的,Backup是通过优先级来决定哪一个是Master路由,优先级最大的那台就是Master,Backup只是用来监听Master定时发送的VRRP报文,如果超时未收到Master发来的VRRP报文,则Backup就会抢占Master,虚拟IP也会一起漂移到Backup上。当Master恢复后,虚拟IP会漂移回到Master上(非健康检查模式)

keepalived时一款高可用软件,可以工作在三层(网络层)、四层(传输层)和五层(应用层)上,进行健康检测功能。

我们可以手动配置,选择主用设备和备用设备,选择抢占和非抢占。当开启抢占模式时,原有的主用设备恢复后会抢占原有的备用设备,恢复对VIP的响应,而原有的备用设备则会恢复到备用设备的状态。一般情况下,我们都会把一个硬件性能好的设备作为主用设备,因此我们通常会开启抢占功能。
keepalived可以工作在类似三层、四层和五层的模式上,当keepalived工作在三层模式时,以IP的形式去进行健康检测,当keepalived工作在四层模式时,以IP+端口的形式去进行健康检测,当keepalived工作在五层模式时,以自定义脚本的方式去进行健康检测。

Keepalived体系主要模块

模块作用
croe模块为Keepalived的核心,负载主进程的启动、维护及全局配置文件的加载和解析
vrrp模块是来实现VRRP协议的
check模块负责健康检查,常见的方式有端口及URL检查

使用Keepalived实现双机热备

  • 基于VRRP协议的热备方式Keepalived可以用作故障切换,每个热备组可以有多台服务器,当然最常用的还是双机热备
  • 在双机热备方案中,故障切换主要针对虚拟IP地址的漂移来实现,因此可以适用于各种应用服务器(如:Web、FTP、Mail、SSH、DNS…)
  • 其中主、备服务器都需要安装Keepalived
    在这里插入图片描述

LVS+DR+Keepalived高可用群集构建

环境准备

主DR服务器:192.168.32.10
备DR服务器:192.168.32.20
web服务器1:192.168.32.30
web服务器2:192.168.32.40
客户端:192.168.32.50
VIP:192.168.32.100

主DR服务器配置

yum install -y ipvsadm keepalived
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.32.100
NETMASK=255.255.255.255

在这里插入图片描述
在这里插入图片描述
ifup ens33:0 #开启
ifconfig #查看
在这里插入图片描述
调整proc响应参数

由于LVS负载均衡器和各节点需要公用vip地址,应该关闭linux内核的重定向相应参数,不充当路由器(转发、重定向)
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
在这里插入图片描述
sysctl -p #加载
在这里插入图片描述
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
在这里插入图片描述
cd /opt
写一个脚本,并且执行
#!/bin/bash
ipvsadm -C
ipvsadm -A -t 192.168.32.100:80 -s rr
ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.30:80 -g
ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.40:80 -g
ipvsadm
在这里插入图片描述

备DR服务器

yum install -y ipvsadm keepalived
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.32.100
NETMASK=255.255.255.255
在这里插入图片描述
systemctl restart network #开启
ifconfig #查看
在这里插入图片描述
调整proc响应参数

由于LVS负载均衡器和各节点需要公用vip地址,应该关闭linux内核的重定向相应参数,不充当路由器(转发、重定向)
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
在这里插入图片描述
sysctl -p #加载
在这里插入图片描述
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
在这里插入图片描述
cd /opt
写一个脚本,并且执行
#!/bin/bash
ipvsadm -C
ipvsadm -A -t 192.168.32.100:80 -s rr
ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.30:80 -g
ipvsadm -a -t 192.168.32.100:80 -r 192.168.32.40:80 -g
ipvsadm
在这里插入图片描述

web服务器1配置

yum install -y httpd #安装
在这里插入图片描述
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-lo:0

vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.32.100
NETMASK=255.255.255.255

在这里插入图片描述

ifup lo:0
在这里插入图片描述
在这里插入图片描述
route add -host 192.168.32.100 dev lo:0 #路由禁锢
在这里插入图片描述
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
在这里插入图片描述
sysctl -p
在这里插入图片描述

cd /var/www/html/
vim index.html

<html><body><h1>liuxu</h1></body></html>

在这里插入图片描述
在这里插入图片描述

web服务器2配置

yum install -y httpd #安装
在这里插入图片描述
配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-ens33 ifcfg-lo:0
在这里插入图片描述
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.32.100
NETMASK=255.255.255.255
在这里插入图片描述
ifup lo:0
在这里插入图片描述
route add -host 192.168.32.100 dev lo:0 #路由禁锢
在这里插入图片描述
调整内核的ARP相应参数以阻止更新VIP的MAC地址,防止冲突
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
在这里插入图片描述
sysctl -p
在这里插入图片描述
准备页面文件
cd /var/www/html/
vim index.html
在这里插入图片描述
在这里插入图片描述

执行脚本

访问VIP IP
在这里插入图片描述
在这里插入图片描述

部署keepalivd(主-备)

cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak #备份
vim keepalived.conf

global_defs {
router_id lvs_01
}
vrrp_instance vi_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 110
advert_int 1
authentication {
auth_type PASS
auth_pass 6666
}
virtual_ipaddress {
192.168.32.100
}
}
virtual_server 192.168.32.100 80 {
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.32.30 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.32.40 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
在这里插入图片描述
在这里插入图片描述

cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak #备份

global_defs {
router_id lvs_02
}
vrrp_instance vi_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 105
advert_int 1
authentication {
auth_type PASS
auth_pass 6666
}
virtual_ipaddress {
192.168.32.100
}
}
virtual_server 192.168.32.100 80 {
lb_algo rr
lb_kind DR
persistence_timeout 6
protocol TCP
real_server 192.168.32.30 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.32.40 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
在这里插入图片描述

systemctl start keepalived
在这里插入图片描述

验证

主dr服务器
在这里插入图片描述
备dr服务器
在这里插入图片描述
关闭主dr服务器keepalived,查看
在这里插入图片描述
查看备dr服务器
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值