IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 负载均衡lvs DR模式 -> 正文阅读

[系统运维]负载均衡lvs DR模式

前言

client -> dns -> cdn(cache) -> server
客户端先访问dns然后到缓存,要不然流量太大不能直接访问server。
我们要做的时server的负载均衡
aliyun
client -> dns -> cdn(cache) -> SLB server SLB负载均衡层,就是负载均衡加高可用
LB(负载均衡) + HA(高可用) 高可用确保负载均衡器正常运行对后端server能均衡调度
client -> dns -> cdn(cache) -> LB +HA server
client -> dns -> cdn(cache) -> LB +HA -> web server(处理静态的)多个->(处理动态的)比如: tomcat(应用服务器)多个 处理java的->
每个多个都会有负载均衡的存在,每层都有负载均衡
web如何调度服务器,所以有条件会添加逻辑接入层,后端应用服务器太多,前端无法在代码写个具体的连接,所以接入一个统一的调度层逻辑层。
client -> dns -> cdn(cache) -> LB +HA -> web server(处理静态的)多个->逻辑接入层->(处理动态的)比如: tomcat(应用服务器)多个 处理java的 -> db -> storage(存储)
应用放在物理机上面维护成本高,所以要把这些全部放在容器里面。
docker + k8s + openstack + hadoop (大数据,分布式文件系统加并行运算)+ gp(更火,大数据)

复习要看lvs原理

lvs文档

中文文档

lvs搭建

1.实验环境:server1作调度器、server2\3作really server。
通过1来负载均衡2和3两个节点(web server)
server1:

[root@server1 yum.repos.d]# yum install ipvsadm -y

这个工具是用户端专门写lvs策略的
ipvsadm属于lvs内核功能,安装完成后在内核会有模块安装好
linux的内核模块是动态的,当你使用时,它会自动为你加载,也可以手动加载。

[root@server1 yum.repos.d]# lsmod | grep ip_vs
ip_vs                 145497  0 
nf_conntrack          133095  1 ip_vs
libcrc32c              12644  3 xfs,ip_vs,nf_conntrack

server2和3安装httpd作测试:

[root@server2 ~]# yum install httpd -y
[root@server2 ~]# systemctl start httpd
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# ls
[root@server2 html]# echo server2 > index.html
[root@server2 html]# ls
index.html
[root@server2 html]# curl localhost
server2

server3重复server2的操作

相关扩展

[root@server1 yum.repos.d]# ipvsadm --help

查阅本地的文档

[root@foundation38 ~]# cd /run/media/kiosk/Backup\ Plus/pub/docs/lvs/
[root@foundation38 lvs]# evince 阿里lvs.pdf &

A添加一个服务 -t tcp服务 172.25.138.100虚拟ip,该ip要没被占用,-s调度 ,rr最均衡的。

[root@server1 yum.repos.d]# ipvsadm -A -t 172.25.138.100:80 -s rr

-g dr模式直连,将really服务器添加进去

[root@server1 yum.repos.d]# ipvsadm -a -t 172.25.138.100:80 -r 172.25.138.2:80 -g 
[root@server1 yum.repos.d]# ipvsadm -a -t 172.25.138.100:80 -r 172.25.138.3:80 -g 

TCP 172.25.138.100:80 rr 创建的虚拟服务,可多个,里面调度不同的主机。

[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.138.100:80 rr
  -> 172.25.138.2:80              Route   1      0          0         
  -> 172.25.138.3:80              Route   1      0          0         

但是虚拟ip我们没添加

[root@server1 yum.repos.d]# ip addr | grep 172.25.138.100

添加虚拟ip

[root@server1 yum.repos.d]# ip addr add 172.25.138.100/24 dev eth0

宿主机访问不了

[root@foundation38 ~]# curl 172.25.0.100

但是server1这边接受到了请求

[root@server1 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.0.100:80 rr
  -> 172.25.0.2:80                Route   1      0          3         
  -> 172.25.0.3:80                Route   1      0          2         

证明:数据包到调度器后,调度器把数据调度到2\3,证明2、3无法相应请求
因为是tcp协议,tcp要满足三次握手,四次分手(必问)
因为,原地址src:172.25.0.250 目标地址dst:172.25.0.100 经过调度器,目标地址变成0.2\0.3
对于客户端目标地址没变,tcp三次握手目标是不可以改变,地址不变,所以它的数据包被转发在2层被转发到server2时,
它的src和dst依旧依旧0.100,然后server2\3没有100vip,认为走错路,数据包被机器内核丢弃掉。

所以在server2\3

[root@server2 ~]# ip addr add 172.25.138.100/32 dev eth0
[root@server3 ~]# ip addr add 172.25.138.100/32 dev eth0

测试client:

[kiosk@foundation38 Desktop]$ curl 172.25.138.100
server3
[kiosk@foundation38 Desktop]$ curl 172.25.138.100
server2

问题1,DR模式需要相同VIP,要不然完成不了三次握手,同时因为相同VIP造成arp缓存的问题。

本地arp缓存的地址:

[root@foundation38 ~]# arp -an | grep 100
? (172.25.138.100) at 52:54:00:58:2e:f1 [ether] on br0

删掉arp本地缓存的地址:

[root@foundation38 ~]# arp -d 172.25.138.100
[root@foundation38 ~]# arp -an | grep 100

arp协议在本地在一个VLAN会以广播的形式来学习
ping通一下相当于又一次学习一下
拿到的地址不一样了,一样的话就正常,一次server2 一次server3,现在地址变了。
地址变成server3了

[root@foundation38 ~]# ping 172.25.138.100
[root@foundation38 ~]# arp -an | grep 100
? (172.25.138.100) at 52:54:00:57:08:6c [ether] on br0

所有都变成sevrer3了

[root@foundation38 ~]# curl 172.25.138.100
server3
[root@foundation38 ~]# curl 172.25.138.100
server3

同时调度器收不到响应了

[root@server1 ~]# ipvsadm -ln
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.138.100:80 rr
  -> 172.25.138.2:80              Route   1      0          0         
  -> 172.25.138.3:80              Route   1      0          0         

arp缓存地址变成sever3了

[root@server3 ~]# ip addr 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:57:08:6c brd ff:ff:ff:ff:ff:ff
52:54:00:57:08:6c这个地址和上面宿主机arp缓存地址一样了

arp学习谁,先响应就先缓存谁学习谁。同一个VLAN,地址响应级别是等同的。
原因:三个节点在同一个VLAN下拥有同一个vip地址冲突

解决方法1,直接修改内核,禁用arp协议。

因为arp协议在一个广播,它不能过路由,因此它必须在一个VLAN,在server2\3的把arp响应屏蔽掉。
在内核中禁用掉:1.在内核直接修改内核参数
2.rhel系统提供的方法arp防火墙,只针对arp协议有效。
跟iptable无关,iptable是包过的火墙,所有的数据包都过它。
使用方法2:
相关文档在宿主机

Plus/pub/docs/rhel6cluster
[root@foundation38 rhel6cluster]# evince Red_Hat_Enterprise_Linux-6-Virtual_Server_Administration-zh-TW.pdf &

在server2\3上面安装该插件

[root@server2 ~]# yum install -y arptables_jf
[root@server3 ~]# yum install -y arptables_jf

arp防火墙有3条链,input(数据包进来)、output(出去)、forward

[root@server2 ~]# arptables -L
Chain INPUT (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)
Chain FORWARD (policy ACCEPT)

2\3修改策略
进来(INPUT):
-A添加在INPUT链路添加一条策略
当INPUT进来 -d 访问的目标地址是172.25.138.100 -j 这个动作 DROP丢弃

[root@server2 ~]# arptables -A INPUT -d 172.25.138.100 -j DROP

出去arp(OUTPUT)
arp协议本身也是广播协议,接到VLAN上,它会自动把自己的mac地址传到广播让其他主机进行学习。

如果以172.25.138.100出去,转换该地址172.25.138.2(转换成eth0该发布网站的固定地址)

[root@server2 ~]# arptables -A OUTPUT -s 172.25.138.100 -j mangle --mangle-ip-s 172.25.138.2

保存该策略,该策略是在内存中,运行内核会自动生效。
但我们要保存在内核中,要不然一重启就没了。

[root@server2 ~]# arptables-save  > /etc/sysconfig/arptables 
[root@server2 ~]# cat /etc/sysconfig/arptables 
*filter
:INPUT ACCEPT
:OUTPUT ACCEPT
:FORWARD ACCEPT
-A INPUT -j DROP -d 172.25.138.100 
-A OUTPUT -j mangle -s 172.25.138.100 --mangle-ip-s 172.25.138.2 

你每次重启,你系统在服务会自动读取该配置文件,生效。

[root@server2 ~]# systemctl status arptables.service 

刷新内存的arp策略,重启该服务还在,因为系统读取该arp文件了。

[root@server2 ~]# arptables -F
[root@server2 ~]# arptables -L
Chain INPUT (policy ACCEPT)

Chain OUTPUT (policy ACCEPT)

Chain FORWARD (policy ACCEPT)

-nL不解析

[root@server2 ~]# systemctl restart arptables.service 
[root@server2 ~]# arptables -nL
Chain INPUT (policy ACCEPT)
-j DROP -d 172.25.138.100 

Chain OUTPUT (policy ACCEPT)
-j mangle -s 172.25.138.100 --mangle-ip-s 172.25.138.2 

Chain FORWARD (policy ACCEPT)

把该策略给server3:

[root@server2 ~]# scp /etc/sysconfig/arptables server3:/etc/sysconfig/

server3:修改下配置,把ip 2改成3

[root@server3 ~]# vim /etc/sysconfig/arptables

client:测试

[root@foundation38 ~]# arp -d 172.25.138.100
[root@foundation38 ~]# curl 172.25.138.100
server3
[root@foundation38 ~]# curl 172.25.138.100
server2
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-25 12:48:54  更:2021-10-25 12:50:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:47:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码