/images/avatar.jpg

Kiosk Studio (2022)

Redis基础

Redis 是一种基于 key-value 的NoSQL数据库。Redis的全称是 Remote Dictionary Server。是一个基于内存的存储系统,可以用作缓存和消息中间件。支持多种类型的数据结构,如字符串(string)、哈希(hash)、列表(list)、集合(set)、有序集合(sorted set),在其基础之上还有一些扩展的数据结构,如位图(bitmap)、HyperLogLog、GEO 等数据结构。其内置了复制(replication)、事务(transaction)和磁盘持久化策略(persistence),并通过 Redis 哨兵(Sentinel)和自动分区(Cluster)提供高可用性。

构建一个 OpenStack 云操作系统

在前面的 文章 中认识了 OpenStack ,这篇文章会实际搭建一个 OpenStack 服务来更好的认识 OpenStack。OpenStack 本身能被定义为云操作系统,本身是比较复杂的,其是云计算的基石,虽然近些年已经有被 Kubernets 拍在沙滩上的意思,但是虚拟机相比于容器,其在腾讯云、华为云、阿里云等云厂商,还是主要对外的计算服务。

Linux流量控制-TC框架

TC(Traffic Control)是Linux操作系统中的流量控制器,用于Linux内核的流量控制。它通过在输出端口处建立一个队列来实现流量控制,可以限速、整形和策略控制网络流量的带宽、延迟、丢包等参数,从而实现网络流量的优化和管理

使用Open-vSwitch创建虚拟网络

前面的文章 虚拟化-创建一个虚拟机 介绍了如何创建一个虚拟机,但是整个Iaas生态,网络的虚拟化也是非常大的一块。我们需要将同一台物理机上的虚拟机连通,虚拟机可以上网,甚至还需要将不同物理机上的虚拟机连通。 而 OpenvSwitch 就是为了上述需求而诞生的SDN软件。 OpenvSwtich OpenvSwitch (简称 OVS) 是一个用 C 语言开发的多层虚拟交换机。现如今基本上已经成为了开源 SDN(软件定义网络)基础设施层的事实标准。 OVS 支持功能 支持标准 802.1Q VLAN协议,允许端口配置trunk模式。 支持组播 支持多种隧道协议(GRE、VXLAN、STT、Geneve 和 IPsec) 支持内核和用户空间的转发引擎选项 OVS的术语解释 Bridge 中文名称网桥,一个 Bridge 代表一个以太网交换机(Switch),一台主机可以创建一个或多个 Bridge,Bridge 可以根据一定的规则,把某一个端口接收到的数据报文转发到另一个或多个端口上,也可以修改或丢弃数据报文。 Port 交换机上的插口,可以接水晶头,Port隶属于 Bridge,必须先添加了 Bridge 才能在 Bridge 上添加 Port。 ​ Normal:用户可以把操作系统中已有的网卡添加到 OVS 上,OVS会自动生成一个同名的Port。此类型的 Port 常用于 VLAN 模式的多台物理主机相连的口,交换机的一端属于 Trunk 模式 ​ Internal:当Port的类型是 Internal 时,OVS会自动创建一个虚拟网卡(Interface),此端口收到的数据报文都会转发到这个网卡。 ​ Patch:Patch Port 和 veth pair 功能相同,总是成双成对的出现,在其中一端收到的数据报文会被转发到另一个 Patch Port 上,就像是一根网线一样,Patch Port 常用于链接两个 Bridge,使两个网桥合并成为一个网桥

虚拟化-创建一个虚拟机

现如今,随着云计算技术的越来越成熟,我们在腾讯云、阿里云上购买的服务器本质上都是虚拟机,这就需要在一台物理服务器上虚拟化出更多的虚拟机,还要让这些虚拟机能够弹性伸缩,实现跨主机迁移。 而虚拟化技术正是这些能力的基石,而其中的核心技术就是 KVM 虚拟化技术。 虚拟化 虚拟化的本质是一种资源管理的技术,它可以通过各种技术手段把计算机的实体资源(如:CPU、RAM、存储、网络、I/O 等等)进行抽象和转换,让这些资源可以重新分割、排列与组合,实现最大化使用物理资源的目的。 服务器上的虚拟化软件,多使用 qemu ,其中 emu 是 emulator 模拟器的意思。单纯使用 qemu 采用的是完全虚拟化模式。但是完全虚拟化是非常低效的,所以要使用硬件辅助的虚拟化技术 Interl-VT,AMD-V,所以需要CPU 硬件开启这个标志位,一般是在 BIOS 里面设置。 当开启了标注位后,通过 KVM ,GuestOS 的指令不再用 Qemu 转译,直接运行,大大提高了速度。 CPU 虚拟化 为什么需要 CPU 虚拟化 X86 操作系统是设计在直接运行在裸硬件上的,x86 架构提供4个特权级别给内核(操作系统)来访问硬件,Ring 是指 CPU 的运行级别,Ring 0 是最高级别,依次到 Ring3。以 Linux x86 来说 操作系统(内核)需要直接访问硬件和内存,因此它的代码需要直接运行在最高级别 Ring 0 上,这样它就可以使用特权指令去控制中断,修改页表,访问设备。 应用程序的代码运行在 Ring 3 上,如果需要访问硬件,必须通过系统调用,执行系统调用的时候,CPU 的运行级别会从 Ring3 切换到 Ring0 ,并跳转到系统调用对应的内核代码位置执行,完成后从 Ring3 回到 Ring0。这个过程就是用户态到内核态的转换。 那么,虚拟化在这里就遇到了一个难题。由于宿主机的操作系统工作于 Ring0,VM 客户机操作系统就不能再工作在 Ring0 上了,但是 VM 客户机的内核操作系统不知道这一点,以前执行什么指令,现在还是执行什么指令。但是没有执行权限会出错。这时 VMM(虚拟机管理程序)就要开始工作了,虚拟机通过 VMM 实现 Guest CPU 对硬件的访问,根据原理有三种实现技术:

认识 Openstack

最近机缘巧合,需要重新认识一下 openstack 这门技术,之前其实也接触过很多虚拟化的技术,但是不够统一,也打算将之前了解的虚拟化技术好好的回顾一遍。