部署LVS-DR(LVS+Keepalived)群集
文章目录
- 部署LVS—DR群集
- LVS DR模式的流程大概如下:
- LVS-DR数据包流向分析
- LVS-DR中的ARP问题
- Keepalived简介及原理
- Keepalived简介
- 服务应用场景
- Keepalived实现原理剖析
- 实验:构建负载均衡(DR)+高可用群集
- 配置Keepalived master服务器
- **实验步骤**:
- 配置web节点服务器的虚拟网卡
- 在LVS调度服务器上配置Keepalived
- 在win10客户机上打开命令提示符,测试VIP连通性
部署LVS—DR群集
LVS DR模式的流程大概如下:
1:cirector Server作为群集的访问入口,但不作为网关使用,
2:户端发送请求至VIP,也就是访问服务,请求报文源地址是CIP,目标地址为VIP;
3:服务端经过调度算法,衡策略选择某台后端RS,并将目标MAC地址修改RIP的MAC地址
4:后端节点处理请求,将响应直接发往客户端,此时源IP地址为VIP,目标IP为CIP
这里vip是协商出来的是客户端唯一接口
客户端》》》服务器vip(虚拟地址)》》服务端经过调度算法》》后端服务器池》》》后端节点处理请求》》直接回应客户端
LVS-DR数据包流向分析
Client向目标VIP发出请求,Director(负载均衡器)接收
IP包头及数据帧头信息
Src mac | Dst mac | type | … | source ip(源ip) | src port | dst ip目标 | dsc pot | … | CRC |
---|---|---|---|---|---|---|---|---|---|
… | … | … | … | 192.168.57.135 | 55014 | 192.168.57.126 | 80 | … | … |
source MAC | dest MAC |
---|---|
00:18:82:3c:e8:96 | 00:0c:29:6a:8d:5d |
Director根据负载均衡算法选择RealServer_1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer_1的MAC地址,然后在局域网上发送(ip不变,变的是MAC)
Src mac | Dst mac | type | … | source ip(源ip) | src port | dst ip | dsc pot | … | CRC |
---|---|---|---|---|---|---|---|---|---|
… | … | … | … | 192.168.57.135 | 55014 | 192.168.57.126 | 80 | … | … |
source MAC | dest MAC |
---|---|
00:0c:29:6a:8d:5d | 00:0c:29:b1:97:82 |
RealServer_1收到这个帧,解封装后发现目标IP与本机匹配(RealServer事先绑定了VIP),于是处理这个报文,随后重新封装报文,发送到局域网
- IP包头及数据帧头信息
Src mac | Dst mac | type | … | source ip | src port | dst ip(目标ip) | dsc pot | … | CRC |
---|---|---|---|---|---|---|---|---|---|
… | … | … | … | 192.168.57.126 | 80 | 192.168.57.135 | 55014 | … | … |
source MAC | dest MAC |
---|---|
00:0c:29:b1:97:82 | 00:18:82:3c:e8:96 |
LVS-DR中的ARP问题
1:在LVS-DR负载均衡集群中
- 负载均衡与节点服务器都要配置相同的VIP地址
LVS-DR中ARP问题
- 在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱
- 当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播
- 只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播
- 对节点服务器进行处理,使其不响应针对VIP的ARP请求
- 使用虚接口lo:0承载VIP地址
- 设置内核参数arp_ignore=1:系统只响应目的IP为本地IP的ARP请求
- RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址
- 发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址(如:ens33接口)
源IP | VIP |
---|---|
源MAC | RealServer的MAC |
目的IP | 路由器的IP |
目的MAC | ? |
- 路由器收到ARP请求后,将更新ARP表项
- 原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer的MAC地址
IP | MAC |
---|---|
VIP | Director的MAC |
IP | MAC |
---|---|
VIP | RealServer的MAC |
问题:路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效
解决方法:对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP包的源地址来
设置ARP请求的源地址,而选择发送接口的IP地址
节点服务配置抑制ARP请求
修改letclsysctl.conf文件net.ipv4.conf.lo.arp_ignore = 1 过滤本地arp
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
Keepalived简介及原理
Keepalived简介
- 企业应用中,单台服务器承载应用存在单点故障的危险
- 单点故障一旦发生,企业服务将发生中断,造成极大的危害
- Keepalived是专为LVS和HA设计的一款健康检查工具
- 支持故障自动切换(Failover)
- 支持节点健康状态检查(Health Checking)
- Keepalived采用VRRP热备份协议实现Linux服务器的多机热备功能
服务应用场景
企业应用中,单台服务器承载应用存在单点故障的危险
单点故障一旦发生,企业服务将发生中断,造成极大的危害,
Keepalived是专为LVS和HA设计的一款健康检查工具
Keepalived实现原理剖析
- Keepalived采用VRRP热备份协议,实现Linux服务器的多机热备功能
- VRRP(虚拟路由冗余协议)是针对路由器的一种备份解决方案
- 由多台路由器组成一个热备组,通过共同的虚拟IP地址对外提供服务
- 每个热备组内同时只有一台主路由器提供服务,其他路由器处于冗余状态
- 若当前在线的路由器失效,则其他路由器会根据设置的优先级自动接替虚拟IP地址,继续提供服务
实验:构建负载均衡(DR)+高可用群集
实验软件环境:VMware Workstation 15.5、Xshell 6、Centos7.6
设备 | IP地址 | 职责 |
---|---|---|
LVS+Keepalived(1) | 192.168.100.128/192.168.100.10(VIP) | LVS-DR(主) |
LVS+Keepalived(2) | 192.168.100.129/192.168.100.10(VIP) | LVS-DR(备) |
Web节点1 | 192.168.100.201 | 提供web页面 |
Web节点2 | 192.168.100.202 | 提供web页面 |
客户端(Win10) | 192.168.100.66 | 测试访问 |
配置Keepalived master服务器
Keepalived配置目录位于letc/keepalivedl/
keepalived.conf是主配置文件一
- global_defs {…}区段指定全局参数
- vrrp_instance 实例名称{…}区段指定VRRP热备参数
- 注释文字以"!"”符号开头
- 目录samples,提供了许多配置样例作为参考
实验步骤:
实验前准备,在两台LV上安装keepalived和ipvsadm工具;在两台Web服务器上安装http服务
yum -y install keepalived ipvsadm
yum -y install httpd
将以上工具下载安装完成后,将所有服务器节点及客户机网卡均设置为仅主机模式
3、分别在两台VLS调度器上进行如下配置
节点服务配置抑制ARP请求
[root@localhost ~]# vim /etc/sysctl.conf net.ipv4.ip_forward=1 #开启转发功能#proc响应关闭重定向功能net.ipv4.conf.all.send_redirects= 0net.ipv4.conf.default.send_redirects = 0net.ipv4.conf.ens33.send_redirects = 0
[root@localhost ~]# sysctl -p 生效
分别在两台VLS调度器上配置网卡及VIP
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0[root@localhost network-scripts]# vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.225.0[root@localhost network-scripts]# vim ifcfg-ens33 下面简写
192.168.100.129
GATEWAY=192.168.100.1
配置DR模式启动脚本
[root@localhost network-scripts]# cd /etc/init.d/[root@localhost init.d]# vim dr.sh
直接复制下面
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10
RIP1=192.168.100.201
RIP2=192.168.100.202
case "$1" in
start)/sbin/ipvsadm --save > /etc/sysconfig/ipvsadm#先保存systemctl start ipvsadm#先开启服务/sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 $VIP up#开启ens33:0网卡,ip地址,广播地址,子网掩码/sbin/route add -host $VIP dev ens33:0#添加路由网段信息/sbin/ipvsadm -A -t $VIP:80 -s rr#添加LVS设置,访问80端口,使用轮询算法/sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g#-g 代表使用DR,上一次使用的是-m ,代表使用nat(此处为个人理解)/sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -gecho "ipvsadm starting ____________________[ok]";;
stop)/sbin/ipvsadm -C#清除缓存systemctl stop ipvsadm#关闭LVSifconfig ens33:0 down#关掉虚拟IProute del $VIP#删掉路由条目echo "ipvsadm stoped _______________________[ok]";;
status)if [ ! -e /var/lock/subsys/ipvsadm ];then#如果文件不存在,则echo "ipvsadm stoped _______________________"exit 1elseecho "ipvsadm Runing____________________[ok]"fi;;
*)echo "Usage: $0 {start|stop|status}"exit 1
esac
exit 0[root@localhost init.d]# chmod +x dr.sh [root@localhost init.d]# service network restart [root@localhost init.d]# service dr.sh start
ipvsadm starting ____________________[ok]
另一台LVS-DR的操作步骤同上,不需要更改任何内容,ens33网卡信息改为192.168.100.128
配置web节点服务器的虚拟网卡
安装apache服务
[root@localhost init.d]# yum -y install httpd
配置两台Web节点服务器
cd /etc/sysconfig/network-scripts/
cp -p ifcfg-lo ifcfg-lo:0 ## 复制配置文件作为VIP的配置
vim ifcfg-lo:0
添加如下内容:
DEVICE=lo:0
IPADDR=192.168.100.10
NETMASK=255.255.255.0
ONBOOT=yes
配置本地网卡信息
[root@localhost network-scripts]# vim ifcfg-ens33
IPADDR=192.168.100.201
GATEWAY=192.168.100.1
分别在两台Web节点服务器上创建配置服务管理脚本
cd /etc/init.d/
[root@localhost init.d]# vim web.sh
#!/bin/bash
VIP=192.168.100.10
case "$1" in
start)ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP/sbin/route add -host $VIP dev lo:0echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/lo/arp_announceecho "1" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/all/arp_announcesysctl -p > /dev/null 2>&1echo "RealServer Start OK";;
stop)ifconfig lo:0 downroute del $VIP /dev/null 2>&1echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/lo/arp_announceecho "0" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "0" > /proc/sys/net/ipv4/conf/all/arp_announceecho "RealServer Stoped";;
*)echo "Usage: $0 {start|stop}"exit 1
esac
exit 0
启动脚本
[root@localhost init.d]# chmod +x web.sh
[root@localhost init.d]# service web.sh start
[root@localhost init.d]# service network restart
[root@localhost html]# systemctl restart httpd
配置网页
[root@localhost ~]# cd /var/www/html/
[root@localhost ~]# vi index.html
<h1>this is benet web </h1>
另一台web的操作步骤同上,不需要更改任何内容,ens33网卡信息改为192.168.100.202
配置网页
[root@localhost ~]# cd /var/www/html/
[root@localhost ~]# vi index.html
<h1>this is benet web </h1>
验证一下apache服务
在LVS调度服务器上配置Keepalived
vim cd /etc/keepalived/keepalived.conf ## 编辑keepalived配置文件修改全局10 smtp_server 127.0.0.112 router_id LVS_0121 interface ens3330 192.168.100.10 删除下2行34 virtual_server 192.168.100.10 80 { 虚拟服务器37 lb_kind DR LVS模式41 real_server 192.168.100.201 80 {从43行删除9行41 real_server 192.168.100.201 80 { 在下面添加42 weight 143 TCP_CHECK { #健康状态检查44 connect_port 80复制到下面到49行下面real_server 192.168.100.202 80 {weight 1TCP_CHECK { connect_port 80connect_timeout 3nb_get_retry 3delay_before_retry 3}}}删除60行下面所有
在LVS-DR(1)上配置完成后,直接使用scp命令上传到LVS-DR(2)上即可:
[root@localhost keepalived]# scp /etc/keepalived/keepalived.conf root@192.168.100.129:/etc/keepalived/
在LVS+Keepalived(2)上继续进行调整
root@localhost ~]# vim /etc/keepalived/keepalived.conf
12 router_id LVS_02 ## 主为01,备就是02,不一样即可
20 state BACKUP ## 角色身份不能一样,要改为BACKUP
32 priority 90 ## 优先级要改为90
在两台LVS上分别启动Keepalived服务
systemctl start keepalived
在win10客户机上打开命令提示符,测试VIP连通性
刷新一下
部署LVS-DR(LVS+Keepalived)群集相关推荐
- LVS——DR模式+Keepalived(高可用)
1.什么是keepalived keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障. Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作 ...
- Linux下部署LVS(DR)+keepalived+Nginx负载均衡
架构部署 LVS/keepalived(master):192.168.21.3 LVS/keepalived(Slave):192.168.21.6 Nginx1:192.168.21.4 N ...
- LVS(DR)+keepalived+nfs+raid+LVM
LVS理论篇 1.Client 向目标VIP 发出请求,Director(负载均衡器)接收.此时IP 包头及数据帧信息为: 2.Director 根据负载均衡算法选择RealServer_ ...
- LVS原理详解及部署之五:LVS+keepalived实现负载均衡高可用
本文我们主要讲解的是LVS通过keepalived来实现负载均衡和高可用,而不是我们第三篇文章介绍的通过手动的方式来进行配置.通过脚本的方式来显示RS节点的健康检查和LVS的故障切换.此文会通过一个实 ...
- Ubuntu LVS DR模式生产环境部署
1.环境说明 系统版本:ubuntu14.04 LVS服务器:14.17.64.3 真实服务器:14.17.64.4-12 VIP:14.17.64.13 部署目的:用户请求14.17.64.13的报 ...
- 十六周一次课(4月11日) 学习完成 18.11 LVS DR模式搭建 18.12 keepalived + LVS
2019独角兽企业重金招聘Python工程师标准>>> 18.11 LVS DR模式搭建 准备工作:三台机器 分发器,也叫调度器(简写为dir) 192.134 rs1 192.13 ...
- LVS DR模式搭建,keepalived + LVS
2019独角兽企业重金招聘Python工程师标准>>> LVS DR模式搭建 准备工作 三台机器,只需要有公网IP 分发器,也叫调度器(简写为dir)IP:192.168.133.1 ...
- LVS DR模式搭建、keepalived+LVS
LVS DR 模式搭建 准备工作 三台机器,三台机器均有公网IP. 调度器(director) IP:192.168.159.131 real server 1 (real1) IP:192.168. ...
- Linux集群架构(LVS DR模式搭建、keepalived + LVS)
为什么80%的码农都做不了架构师?>>> LVS DR模式搭建 准备工作:三台机器 分发器,也叫调度器(简写为dir):192.168.248.128 rs1 :192.168 ...
最新文章
- 2022-2028年中国汽车天线行业市场需求与投资规划分析报告
- WindowsAPI开发常用资料
- Duanxx的图像处理学习: 透视变换(一)
- mac 安装 python mysqlclient 遇到的问题及解决方法
- DLT algorithm needs at least 6 points for pose estimation from 3D-2D point correspondences. (expecte
- 将替代ListView的RecyclerView 的使用(一)
- 【8086汇编-Day6】关于loop的实验
- spring mvc错误收集
- Java当中用 javabean和其他容器存入表格数据 或 利用 容器进行存储表格
- javascript中为某个对象(控件)绑定事件的几种方法
- 暑假周进度总结报告4
- VS2015中搭建lua环境
- SRM 515 DIV1 550pt
- Matlab 2016 超详细安装教程
- tex 表格内容换行_LaTex表格内单元格内容强制换行
- oracle 限制条数的查询
- STM32MP157网络环境 TFYPNFS搭建手册-学习记录
- `Stream`的`Collectors.reducing`与`Collectors.groupingBy`
- 腾讯云图,让数据说话
- matlab生成全黑图片,程序第一次可以运行,第二次运行图片是全黑的
热门文章
- Goland 这些实操技巧,你可能还不会!
- 音视频技术开发周刊 | 208
- LiveVideoStack线上分享第四季(一):沉浸式音频技术的采集,传输,播放,以及应用场景初探...
- 吴晓然:实时通信需要Codec和网络模块结合
- 腾讯云EMR基于YARN针对云原生容器化的优化与实践
- 突破领域边界,探索文创文保新趋势
- ngx_conf_s
- redis 流 stream的使用总结 - 基础命令
- 极其实用的sql脚本【建议收藏】
- leetcode 927. Three Equal Parts | 927. 三等分(Java)