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和keepalived -> 正文阅读

[系统运维]lvs和keepalived

lvs

lvs的主要用处是四层负载均衡。
vip:虚拟ip,路由服务或者真实服务器都可以配置。
failover:故障转移,可以通过arp协议修改路由配置
ipvs:内核模块,lvs的内核实现,属于netfilter模块的子模块
ipvs table:使用ipvsadm更新或删除集群成员。使用调度算法需要和ipvs table配合选择路由。ipvs table记录着每个连接的路由。

调度算法

轮询
加权轮询
最少连接
加权最少连接(默认算法)
基于局部性的最少连接(用于cache服务,连接建立后不想变动,或者缓存就浪费了)
带复制的基于局部性的最少连接(也是cache服务,不过是副本集的cache服务)
目的地址哈希(需要查询静态哈希表中的目的ip地址)
源地址哈希(需要查询静态哈希表中的源ip地址)
最短期望延迟
never queue
overflow-connection

服务掉线重连问题

连接变成0,可能会使所有新连接转发到这台服务,使这台服务短时间内承受很大压力。
解决方法:可以设置掉线的服务器为静默服务。

路由模式

nat模式(网络地址转换):需要两张物理网卡设备,将请求报文的地址替换成自己的面向内网的网卡ip,这个过程又称为ip伪装。流进和流出的数据报文都需要经过nat路由,容易有瓶颈。

dr模式(直接路由):就相当于一个路由器,只是路由的地址是可以负载均衡的。流出的数据报文可以走其他路由器。
dr模式的问题:路由的地址要怎么发给多台服务器中的一个,解决方法就是把多台服务器vip设置成一样,但是有相同vip的机子都会处理arp请求并给出自己的响应,所以需要把服务器的vip设置到lo回环设备上,然后设置忽略arp请求并且关闭lo网卡的arp_announce。由于源地址是cip目的地址是vip,需要从lo网卡发出去,需要设置一条路由规则,将lo网卡经由eth0转发出去。(arp一般15分钟请求一次更新mac/ip列表)

持久化数据和防火墙标记

持久化数据:每个连接断开都不会马上将记录删除,而是维护一个定时器。
防火墙标记:使用防火墙能标志更详细的信息包括协议,端口,并且效率更高。

一主一从架构

在这里插入图片描述

源码解析

1.模块注册函数 ip_vs_init
2.注册子系统 register_pernet_subsys,关键结构体 ipvs_core_ops
3.__ip_vs_init初始ipvs的netns内存空间,并注册hook: nf_register_net_hooks(ip_vs_ops),插入到ip层的hook处理函数的链表头
4.在包经过filtering,forward处理后,执行hook函数 ip_vs_ops->ip_vs_remote_request4
5.执行ip_vs_in处理包。
6.ip_vs_try_to_schedule->conn_schedule处理负载均衡算法
7.tcp执行tcp_conn_schedule->ip_vs_schedule->schedule
8.如果是rr算法,执行 ip_vs_rr_schedule得出目的地址ip_vs_dest。

keepalived

依赖lvs实现负载均衡

进程模型

1.父进程负责创建和监控子进程
2.三个子进程:
一个负责VRRP协议框架
一个负责健康检测和ipvs配置
一个负责bfd(检测两点网络故障)

使用到的内核组件

1.lvs框架:使用getsockopt和setsockopt来获取设置socket
2.netfilter框架:ipvs代码支持nat和伪装
3.netlink接口:网络接口设置和移除vrrp的虚拟ip
4.多播:可根据vrrp多播组进行多播

架构图

在这里插入图片描述

1.io多路复用使用epoll处理调度(thread_make_master启动该master线程)

2.核心组件
通用全局库:html parsing,链表,定时器,vector,string formating,buffer dump,网络工具,监控管理,pid handling,底层tcp L4

checkers:管理真实服务,可添加移除或者改变权重。还包括健康检查,检查结果会决定添加或者移除或者改变权重真实服务器,操作到lvs拓扑中。checkers使用多线程的有限状态机来实现。

vrrp栈(虚拟路由冗余协议栈):独立进程运行,不依赖于lvs,负责直接接管操作,提供底层路由备份,实现了完整的lvs和防火墙的标准以及扩展(vrrp_sync_group扩展管理持久化路由,使用MD5
-96位算法实现ipsec-ah安全的广播交互协议)。

bsd栈:也是独立进程运行,可以被vrrp进程和checker进程作为检查真实服务状态的功能。

system call:主要用来运行自定义健康检查脚本,脚本会被一个fork出来的进程运行。

Netlink Reflector:用来设置vrrp的vip,并且进程间通信(内核到用户空间的通信)也可以使用netlink内核广播。

smtp:通知管理员的邮件协议

ipvs wrapper:使用libipvs封装

健康检查

实现了以下检查形式:
TCP_CHECK,HTTP_GET,SSL_GET,MISC_CHECK(自定义脚本),SMTP_CHECK,DNS_CHECK,BFD_CHECK,UDP_CHECK,PING_CHECK,FILE_CHECK(检查文件变动)

VRRP(故障转移)

vrrp修改vip原理:使用arp广播通知刷新mac/ip列表

use_vmac:使用虚拟mac地址
vrrp_instance instance1 {
state BACKUP
interface eth0
virtual_router_id 250
use_vmac
vmac_xmit_base # Transmit VRRP adverts over physical interface
priority 150
advert_int 1
virtual_ipaddress {
10.0.0.254
}
}

路由策略

NAT:
Tunneling
Direct Routing

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 23:03:01  更:2022-03-10 23:05:07 
 
开发: 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/16 3:24:12-

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