通过LVS、KeepAlived实现高可用负载均衡

Table of Contents

LVS

LVS简介

LVS集群的工作模式

NAT网络地址转换

TUN隧道模式

DR直接路由模式

安装ipvsadm

实验1:DR模式

实验2:TUN隧道模式

LVS+KeepAlived实现高可用负载均衡

KeepAlived定义

下载安装KeepAlived 

配置keepalived 

测试


LVS

LVS简介

LVS:Linux Virtual Server,即Linux虚拟服务器。它是一个虚拟的服务器集群系统,可以实现负载均衡集群功能【UNIX/LINUX平台】

lvs基本工作原理:lvs ——> kernel space ——> IP ——> INPUT(ipvs) ——> change ——> POSTROUTING ——> rs

  • LVS集群负载均衡器【LB】接受服务的所有客户端请求,并根据调度算法决定哪个集群节点应该处理回复请求
  • 一组服务器通过高速的局域网或广域网相互连接,在他们前端有一个负载调度器【LB】。负载调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户无感知,客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。客户程序不受服务器集群的影响,不需要做任何修改。通过检测节点或服务进程故障和正确地重置系统达到高可用性

命名约定表 

名称简写说明
虚拟IPVIPLB用于向客户端计算机提供服务的IP地址
真实IPRIP在集群下面节点上使用的IP地址,真实提供服务的IP地址
Dirctor的IPDIP连接内外网络的IP地址,负载均衡器上的IP
客户端IPCIP客户端请求集群服务器的IP地址,源IP

LVS集群的工作模式

  1. NAT(Network Address Translation)
  2. TUN(Tunneling)
  3. DR(Direct Routing)
  4. FULLNAT(Full Network Address Translation)

NAT网络地址转换

  • 在接受客户端请求而调度时,通过DNAT(目的地址转换)将目的地址IP改为RIP
  • 在后端服务器处理请求返回数据包时,通过SNAT(源地址转换)将源IP改为VIP(因为与客户端TCP/IP握手时需要使用VIP才能成功)

TUN隧道模式

  • 在外面增加了一层IP头部,可以跨网段找到真实服务器节点,通过IP隧道通信
  • 负载均衡器把请求的报文通过IP隧道的方式转发到给RS,而RS将处理后的数据直接返回给客户端

DR直接路由模式

DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器,而真实服务器将响应后的处理结果直接返回给客户端用户。而且,DR模式没有IP隧道的开销,对集群RS节点也没有IP隧道协议的要求,但是要求调度器LB与正式服务器RS节点都有一块网卡连在同一物理网段上,也就是说必须在同一个局域网环境

注意:只修改目标MAC地址,通过MAC找到RS节点(通过二层MAC传输,无法跨网段找到RS节点)

流程:

client ——> DS ——> kernel space ——> PREROUTING ——> CIP:VIP ——> INPUT ——> ipvs ——> DMAC:RMAC ——> PREROUTING ——> DS RS ——> er ceng ——> rs ——> lo ——> eth0(VIP:CIP) ——> client

安装ipvsadm

yum install -y ipvsadm.x86_64  # ipvsadm.x86_64:策略编写工具

通过 ipvsadm -l 查看。可以看到,当前还没有任何策略

  • 查看配置文件
rpm -qc ipvsadm-1.27-7.el7.x86_64

  • 编辑配置文件 
vim /etc/sysconfig/ipvsadm-config

这里要自己创建一个 /etc/sysconfig/ipvsadm 文件 

实验1:DR模式

IP角色说明
192.168.1.客户端 
192.168.1.11LB调度器对外提供虚拟IP:VIP 192.168.1.100
192.168.1.12RS1 
192.168.1.13RS2 
  • LB调度器主机临时添加VIP,作为入口
ip addr add 192.168.1.100/24 dev eth0

  • 配置lvs,并添加两台RS节点

首先保证策略中为空,避免影响实验结果

ipvsadm -A -t 192.168.1.100:80 -s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.13:80 -g

# -A : 添加一个虚拟路由主机(LB)
# -t : 指定虚拟路由主机的VIP地址和监听端口
# -s : 指定负载均衡算法
# -p : 指定会话保持时间

# -a : 添加RS节点
# -r : 指定RS节点的RIP地址和监听端口
# -g : 指定DR模式

# rr : 这这里我使用的是rr轮循算法,所以没有使用-w参数,可以通过-w参数指定权值

  • 重启服务,策略添加到文件中

  • 客户端 dsd 测试

是因为没有访问到吗,我们在LB主机查看

InActConn变成了1,那这就说明访问调度器无误,调度器调度也正常。 无法正常的返回数据,这是因为DR模式是RS直接返回数据给客户端,而客户端访问的是VIP,无法完成握手阶段

流程:client   ——> vs ——> rs ——> client

  • 在RS节点添加 192.168.1.100 公网IP

  • 客户端测试结果 

注意:DR模式下,RS节点和LVS同处一个局域网网段内,当网关通过ARP广播试图获取VIP的MAC地址的时候LVS和RS节点都会接收到ARP广播并且LVS和RS节点都绑定了VIP,所以都会去响应广播,导致冲突现象的发生 

解决方法:

  • 在RS节点安装并启动arptables服务
yum install -y arptables.x86_64
systemctl start arptables.service

image widget

  • 添加并保存规则 
RS1:
arptables -A INPUT -d 192.168.1.100 -j DROP
arptables -A OUTPUT -s 192.168.1.100 -j mangle --mangle-ip-s 192.168.1.12
RS2:
arptables -A INPUT -d 192.168.1.100 -j DROP
arptables -A OUTPUT -s 192.168.1.100 -j mangle --mangle-ip-s 192.168.1.13

## 接收时目的地址为192.168.1.100的全部丢弃
## 响应时192.168.1.12/13 源地址伪装成192.168.1.100

arptables-save > etc/sysconfig/arptables

两台RS主机做同样设置

实验2:TUN隧道模式

  • 清空ipvsadm

  • 启用隧道模式需要的模块
modprobe ipip # 添加ipip模块

  • 开启

ifconfig tunl0 up  # 开启,必须在添加ip之前开启,否则会导致系统卡死 

  • 配置LVS,添加RS节点
ipvsadm -A -t 192.168.1.100:80 -s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.12:80 -i
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.13:80 -i   # -i表示隧道模式

ipvsadm -ln  # 其中Tunnel表示为隧道模式

  • 重启ipvsadm,保存规则

  • 开启隧道并绑定VIP(RS和LB都需要) 
ip addr del 192.168.1.100/24 dev eth0  # 删除eth0网卡上的VIP
ip addr add 192.168.1.100/24 dev tunl0 # 添加tunl0网卡上的VIP

 这里我只贴出LB上的操作,RS节点操作和其相同

  • 查看并关闭反向过滤规则

所有的RS节点都必须要关闭反向过滤,避免由于不符合反向过滤规则会被丢弃

查看:

sysctl -a | grep rp_filter

关闭: 

 再次查看,确认已经全部关闭:image widget

上述只贴出node2的关闭过程,node3与其相同,就不再重复赘余

LVS+KeepAlived实现高可用负载均衡

KeepAlived定义

KeepAlived是用C语言编写的路由软件,它的作用是为Linux系统和基于Linux的基础结构提供负载均衡和高可用性的简单而强大的功能。负载平衡框架依赖提供第4层负载平衡的著名且广泛使用的Linux虚拟服务器【IPVS】内核模块。‘

  • KeepAlived实现了一组检查器,以根据其运行状况动态,自适应地维护和管理负载平衡的服务器池。
  • VRRP【虚拟路由冗余协议】实现了高可用性 协议。VRRP是路由器故障转移的基础砖。
  • Keepalived还实现了一组VRRP有限状态机的挂钩,从而提供了低级和高速协议交互。
  • 为了提供最快的网络故障检测,Keepalived实施BFD协议【用于检测两个转发点之间故障的网络协议】。
  • VRRP状态转换可以考虑BFD提示来驱动快速状态转换。Keepalived框架可以独立使用,也可以一起使用以提供弹性基础架构。

下载安装KeepAlived 

下载地址:https://www.keepalived.org/download.html 

回顾一下源码编译三个步骤:./configure —> make —> make install

  • 解压并编译安装 
tar zxf keepalived-2.0.20.tar.gz  # 解压缩
cd keepalived-2.0.20/

./configure --prefix=/usr/local/keepalived --with-init=systemd
# .configure 编译
# --prefix   目录
# 企业7 是systemd,在这里指定一下--with-init

会发现,在我们的编译过程中,出现了报错,查看原因,是由于我们缺失了SSL模块

yum install -y openssl-devel
# 在编译过程中出现报错,是因为缺少对应模块的库文件,直接安装对应的模块的开发包即可

安装完成,我们再次进行编译,编译成功!

查看Use IPVS Framework【IPVS架构】是否为yes

  • make 和 make install 

过程正常,没有error!

访问刚才我们设置的目录,可以看到keepalived已经安装完成

配置keepalived 

在这里要注意,之前实验我们添加了VIP,查看一下自己是否已经删除,保证环境的纯净。因为keepalived会自己生成VIP,无需我们手动设置

  • 通过软链接,直接在/etc/下操作
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
cd /etc/keepalived/
  • 编写配置文件
vim keepalived.conf
###
notification_email               # 通知邮件,若节点宕机,发邮件给它
notification_email_from          # 谁发的邮件
smtp_server                      # 发件服务器
#vrrp_strict                     # 注释掉,否则会做检查,阻挡我们的操作
interface eth0                   # 检查是否是你当前主机配置VIP的网卡,若不是则进行修改
virtual_router_id                # 虚拟路由id,在同一网络内,id不能相同,否则会发生冲突
priority                         # 优先级
virtual_ipaddress                # VIP
virtual_server 192.168.1.100 80  # 虚拟服务器,此处默认是443,为SSL默认端口,但此处我们使用的是http,没有加密,因此直接使用80端口即可
delay_loop                       # 当RS报错时,会尝试多少次之后,才会发送邮件
###

  • node4主机编译安装keepalived
tar zxf keepalived-2.0.20.tar.gz
cd keepalived-2.0.20/

yum install -y gcc openssl-devel
./configure --prefix=/usr/local/keepalived --with-init=systemd

make && make install

  • 在node4中做软链接
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
  • 将配置文件从node1传到node4
scp -r /etc/keepalived/keepalived.conf node4:/etc/keepalived/
  • 修改node4中的配置文件
vim /etc/keepalived.conf
###
state BACKUP # 不再是master,换为备用节点
priority 50  # 降低优先级
###

  • 检测后端两台服务器
curl localhost

  • 启动node1和node4中的keepalived并查看VIP
systemctl start keepalived.service
ip a

很明显,node1的优先级高,VIP设置成功,node4进入备用状态,VIP自动删除

RS节点配置与单独配置LVS时相同

node4日志

测试

  • 当server2和server3都正常时,两个主机轮循访问
  • 当server2关闭httpd,可以看到,server2 down时,只会访问server3
  • 当关闭server1的keepalived,node4接手,不影响客户感知

查看node4日志

查看邮件

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值