统一鸣谢所参考的以下所有博文,感谢各位付出
目录
1.ovs
参考:https://zhuanlan.zhihu.com/p/550258158
1.支持多层转发
2.很好的编程扩展性
3.具备传统交换机的网络隔离和数据转发功能
4.提供远程管理
5.openflow协议:通过流表管理交换机的行为,用于定义sdn网络,用于实现网络转发平面和控制平面的分离
6.ovsdb协议:用来暴露交换机的端口状态
详情参考:https://www.processon.com/v/643f39e5d0c0db54c60cab70
2.netlink
以下参考:https://blog.csdn.net/weixin_45030965/article/details/127632982
1.netlink:
参考:https://blog.csdn.net/gege_hxg/article/details/120421530
1.1 内核空间:比较重要和核心的系统进程放置在内核空间
1.2 用户空间:把GUI,管理,控制程序放置在用户空间运行
1.3 IPC:内核空间和用户空间需要进行通讯,如何通信?
常用的IPC有 ioctl,系统调用,netlink socket
IPC(Inter-Process Communication,进程间通信)。
进程间通信是指两个进程的数据之间产生交互
1.4.netlink socket 原理:
1.异步通信机制:发送的消息只是暂存在socket接收缓存中,不需要等待接收者立即处理
2.实现内核空间和用户空间之间的通信,用户空间只调用统一的socket的api,来使用netlink通信
3.netlink协议基于BSD socket AF_NETLINK 地址簇,使用32位的端口号寻址(PID)
每个netlink协议通常与一个或一组内核服务/组件相关联,
如常用的NETLINK_ROUTE用于获取和设置路由与链路信息
3.POSIX
以下参考:https://blog.csdn.net/cunjiu9486/article/details/109076572
1.POSIX:Portable Operating System Interface
IEEE Std 1003 而国际标准名称为ISO/IEC 9945
可以只操作系统接口,
也就是说遵守了这个api标准,就能在大多数承认并加载这个标准的操作系统上平移代码并拥有同样的执行环境
4.存储-gluster
以下参考:
https://www.jianshu.com/p/92c2236ccaa5
https://blog.csdn.net/qq_25562325/article/details/125480060
https://blog.csdn.net/m0_69056972/article/details/125800736
https://blog.csdn.net/younger_china/article/details/124777149
1.gluster优点
有多个节点,无单点故障,扩容容易,家存储节点即可,三个节点起步
分布式开原文件系统,具有强大的横向扩展能力,可以支持PB级的存储容量和数千个客户端
通过互联网组成一个并行的网络文件系统,具有可扩展性,高性能,高可用等特点
如果文件系统支持扩展属性便能支持gluster
可使用标准协议NFS&SMB
提供副本,配额,geo-replication,快照和比特检测功能
允许对不同的工作服在进行优化
gluster CLI over SSH
glusterd glusterfsd
virtual physical
三个节点:
向存储池中添加节点D:在任意节点上执行gluster peer probe D
brick server:存储服务器、客户端、及存储网关组成
没有元数据服务器组件,这样有助于提升整个系统的性能、可靠性和稳定性
2.gluster 术语
以下参考:https://blog.csdn.net/LiuHuan303/article/details/121958910
brick 存储块:主机池中主机提供的用于物理存储的专用分区,是GlusterFs中的基本存储单元,同时也是用存储池中服务器
5.OVN
以下参数:https://www.likecs.com/show-307263384.html
1.ovn和ovs 三层实现区别
ovn里面的报文都是通过OVS OPENFLOW流表实现的,而neutrun里面的二层报文是通过ovs openflow实现的,三层报文处理是通过linux的tcp/ip协议栈
ovs internal port 不能经过协议栈,因此无法通过iptables来做acl
ovs 2..4.0以前不支持contrack (linux kernal netfilter 的 一个功能,可以记录连接状态,是有状态访问控制和nat的必要条件)
2.传统neutron的安全组和ovn中的安全组实现不同
neutron给每一个应用了security group 的port创建一个Linuxbridge neutron tap port 连接到Linuxbridge ,然后创建一个veth Pair 一端连接到ovs bridge(默认br-int)security group 的rule通过iptables 配置到netfilter作用在neutron tap port 上
只需要把tap port 连接在ovs bridge(默认是br-int)
不需要创建那么多network device 大大减少了跳数
ovn 的Security group 用到了ovs的conntrack 功能,可以直接根据连接状态进行匹配,而不是匹配的报文字段
提高了流表的查找速率,还可以左右状态的防火墙
ovs 的 conntrack 使用linux 的 kernal 的netfilter 来做的
他调用netfilter userspace netlink api把 来报文发送给Linux kernal的netfiler connection tracker 模块进行处理,netfiler connection tracker 维护以一个连接状态表,记录连接状态,ovs获取连接状态,openflow 可以match这些连接状态
ovs 的conntrack 做Security group 比 Linuxbridge + iptables做Security group cpu消耗更少,尤其是在rule越多,性能对比越明显
6.namespace&cgroup
1. 应用和概述
ovn的l3和neutron 的l3实现
neutron L3 利用namespace技术
namespace技术原理:
参考:https://zhuanlan.zhihu.com/p/443605569
无论容器,还是虚拟化技术(不论何种抽象层面的虚拟化技术)都能做到资源层面的隔离和限制
对于容器而言:资源层面的隔离依赖于linux内核所提供的cgroup和namespace技术
cgroup:管理资源的分配和限制
namespace:封装,抽象,限制,隔离,是命名空间内的进程看起来拥有他们自己的全局资源
cgroup: linux control group 是Linux 内核的一个功能,用来限制,控制与分离一个进程组群的资源
2.namespace 简介
namespace:plan 9 from bell labs,贝尔实验室的 Plan 9,这是一个分布式操作系统
文件系统:所有系统资源都列在文件系统中,以node标识,所有接口也作为文件系统的一部分进行呈现
namespace:能更好的应用和展示文件系统的层次结构,实现了所谓的分离和独立。
具备标准通信协议:9P协议(STyx/9p2000)
linux 2.4.x 开始引入namespace,3.8完全实现了usernamespace 相关功能集成到内核
是Linux内核的一项特性,他可以对内核资源进行分区,是的一组进程可以看到另一组资源
而另一组进程可以看到另一组不同的资源,该功能的原理是为一组资源和进程使用相同的namespace
但是这些namespace实际引用的是不同的资源
简单来说namespace是由Linux内核提供的,用于进程间资源隔离的一种技术
将全局的系统资源包装在一个抽象里,让进程(看起来)拥有 独立的全局资源实例
Linux默认了多种namespace,用于对多种不同资源进行隔离
7.openstack-用户-单租户-多租户
以下参考:https://blog.csdn.net/u013469753/article/details/118905780
keystone:认证
用户:拥有登陆权限,密码的人,有身份验证信息的api消费实体,一个用户可以属于多个租户,项目,组织,角色
租户:default,必须选择default这个域,也就是这个项目project。在此项目基础之上,才可以创建用户,admin是默认生成的基于default项目的用户
创建用户:
openstack user create --domain default --password-prompt hzbtest
查看租户和用户的关系:
openstack role assignment list --user=hzbtest
参考:https://blog.51cto.com/u_11979904/5969645
单租户:云环境只被一个租户的用户使用
多租户:安全和成本之间的一种妥协 trade-off,isolation 隔离的进一步降低,更高的安全风险
8.云计算入门概念-iaas,paas,saas
参考:https://blog.51cto.com/u_11979904/5969645
iaas:基础硬件虚拟化共享,层面的租户隔离
paas:基础软件服务,如提供云数据库,云中间件系统,语言识别api调用等
saas:即接即用的服务,只需在云端注册使用,用户使用统模板的基础服务,可以定制购买增量模块服务
9.存储-ceph
参考:https://blog.csdn.net/m0_65931372/article/details/126129305
crush 算法完成寻址操作,去中心化摒弃集中式,服务器集群数据分布均衡,理论上支持上千个存储节点
高可用:数据副本灵活调整
crush算法指定副本物理存放位置以分割故障域
支持多种故障场景自动尝试进行修复
支持多份强一致性副本,可以跨主机,机架,机房,数据中心存放
10.openstack架构树
参考:https://www.cnblogs.com/klb561/p/8660264.html
1.关键模块和隶属关系
controller node
supporting service
mysql:
qpid
base service
identify
keystone:认证信息/令牌管理
image
glance:镜像及模板
compute
nove management
networking
neutron server:网络拓扑管理 nova-api通信
dashboard
Horizon
optional service
black storage
cinder:管理存储节点的cinder
大多数情况下用于虚拟机空间不足空间扩容
object storage
swift:管理存储节点的swift相关
虚拟磁盘空间,只能存放文件不能进行格式化,大多应用于磁盘/文件
database
Trove:数据库节点的统一管理
orchestration
Heat:基于模板来实现云环境中资源的初始化
依赖关系,部署等基本操作
解决自动收缩,负载均衡等高级特性
Telemeter
centimeter:监控
network interface
management 10.20.0.10
network node
base service
networking
ML2 plugin
Layer2 Agent (ovs)
Layer3 Agent
DHCP agent
network interface
management 10.20.0.20/24
private 192.168.4.20/24
external 172.16.0.20/24
computer node
base service
compute
nova Hypervisor QEMU
networking
ML2-plugin layer2 ovs
optional service
Telemeter
centimeter Agent
networking interface
management 10.20.0.30/24
private 192.168.4.30/24
2.较陌生又很重要的点
基于密码和token的认证方式
nova:
支持各种宿主:Xen、XenServer/XCP、KVM、UML、VMware vSphere及Hyper-V
卷工作站(nova-volume)
卷工作站管理基于LVM的 实例卷,它能够为一个实例创建、删除、附加卷,也可以从一个实例中分离卷。卷管理为何如此重要?因为它提供了一种保持实例持续存储的手段,比如当结束一个 实例后,根分区如果是非持续化的,那么对其的任何改变都将丢失。可是,如果从一个实例中将卷分离出来,或者为这个实例附加上卷的话,即使实例被关闭,数据 仍然保存其中。这些数据可以通过将卷附加到原实例或其他实例的方式而重新访问。
因此,为了日后访问,重要数据务必要写入卷中。这种应用对于数据服务器实例的存储而言,尤为重要。
11.neutron基于vlan的三层路由
参考:https://www.jianshu.com/p/80b8d5e12fea
1.使用vlan
2.链路聚合
3.3层上进行vlan间路由
4.为每个vlan配置ovs
5.linux中启用vlan接口
参考:https://www.jianshu.com/p/80b8d5e12fea
参考:https://zhuanlan.zhihu.com/p/488911351
12.DPDK
以下转载参考:https://baike.baidu.com/item/DPDK/20804798?fr=aladdin
1.简介
DPDK:数据平面开发套件,Data Plane Develepment Kit,2010年
主要基于Linux系统运行,用于快速数据包处理的函数库与驱动集合
可以极大提高数据处理性能和吞吐量,提高数据平面应用程序的工作效率
工作环境:freeBSD Linux
2.数据平面
(Data Plane)是Qos框架的三平面之一承担了通信中分组的队列管理,排队调度,拥塞避免等
直接在数据流上进行操作的机制,对提高网络通信的效率起着至关重要的作用
.......... 在此基础之上,人们期望用更低的成本和更短的产品开发周期来提供多样的网络单元与丰富的功能,如应用处理,控制处理,包处理,信号处理等
为了适应流量暴增和不断增加的音视频业务场景这一新的产业优势,基于intel x86的DPDK应运而生,DPDK: 数据平面应用中为快速的数据包处理一个简单而完善的架构,
在理解此工具集之后,开发人员可以以此为基础进行新的原型设计,或简单的为我所用
3.EAL
DPDK 架构通过创建EAL(Environment Abstraction Layer, 环境抽象层)来为不同的工作环境创造函数库集,创建之后开发者就能把自己的应用与函数库进行链接,该架构也包含跟踪链接,PCIe总线接入等功能,并且帮助开发者学习如何使用这些功能
工作环境:环境抽象层向应用与函数库隐藏了底层细节,因而能扩展到任何处理器上使用,在操作系统上,它提供了对Linux和freeBSD的支持
4.工作原理
DPDK使用了轮询而不是中断来处理数据包,在收到数据包时,经过DPDK重载的网卡驱动不会通过中断通知CPU,而是直接将数据包存入内存,交付应用层软件通过DPDK提供的接口来直接处理,这样节省了大量的CPU中断时间和内存拷贝时间,大大提高网络处理效率和充分利用内存性能。