1、虚拟化概述
KVM是所有云平台的底座,虚拟化是所有云的基础,虚拟化只提供基础架构,云可以提供服务。
CNA是个定制的欧拉系统EulerOS,基于centos内核只保留和虚拟化相关的代码,CNA默认已经部署好kvm虚拟化的软件。CNA=迷你版欧拉系统EulerOS+kvm
在物理服务器上安装CNA操作系统,这台物理服务器就具备了虚拟化能力,可以将底层的物理资源如存储、计算、网络资源进行虚拟化,然后再提供给上层的业务使用。
Guest OS 虚拟机操作系统
Guest Machine 虚拟机
Hypervisor 虚拟化软件层/虚拟机监控机(Virtual Machine Monitor,VMM)
(对虚拟机的所有操作都是由这个虚拟化中间层实现,控制虚拟机的创建、删除、开启关闭等等)
Host OS 运行在物理机之上的OS
Host Machine 物理机
2、虚拟化历史
1964年,IBM就在自己的大型机上去尝试虚拟化
1972年,IBM推出实现了大型机上的虚拟机
1993年,IBM推出可升级的POWER并行系统,这是第一款采用RS/6000技术,基于微处理器的超级计算机。
1998年,著名的x86仿真模拟器Bochs发布。
1998年,VMware成立,1999年推出了可以流畅运行的商业虚拟化软件VMware Workstation。从此虚拟化技术终于走下了大型机的神坛。
1999年,IBM在AS/400上第一次提出了LPAR(Logical Partition,逻辑分区)虚拟化技术。
2000年,Citrix(思杰)桌面虚拟化产品发布。
2002年,Xen正式开源,后被Citrix(思杰)收购。
2004年,IBM发布了虚拟化解决方案APV(Advanced Power Virtualization),支持资源共享。该方案在2008年改名为PowerVM。
2005年,Xen 3.0.0发布,该版本可以在32位服务器上运行,是第一个支持Intel VT-x的虚拟机监控程序。
2006年,以色列的创业公司Qumranet在完成了虚拟化Hypervisor基本功能、动态迁移以及主要的性能优化之后,正式对外宣布了KVM(Kernel-based Virtual Machine,基于内核的虚拟机)的诞生。
2006-至今,云计算与大数据时代。
2007年,德国InnoTek公司开发了VirtualBox虚拟化软件,后被美国甲骨文Oracle收购。
2008年,Linux Container(LXC)发布0.1.0版本,可以提供轻量级的虚拟化。
2010年,红帽发布RHEL 6.0,这个版本将默认安装的Xen虚拟化机制彻底去除,仅提供KVM虚拟化机制。红帽在5.0加入Xen虚拟化,5.4版本xen和kvm虚拟化并行。
2013年,Docker推出(容器技术是内容空间的隔离、进程级别隔离,虚拟化是资源的隔离)
2015年,Kubernetes v1.0发布,进入云原生时代。
xen 和 kvm 区别,xen和kvm 都是开源虚拟化
2001-2002 Xen ,2007年被思杰收购了。
2007年,红帽RHEL5.0 加入xen,红帽刚加入xen同年xen被思杰收购。
2006年的时候,出现了kvm基于内核虚拟化,后被红帽收购。
RHEL5.0-5.4 只有xen
从RHEL5.4-6.0 xen和kvm两个虚拟化产品并行。
RHEL6.0红帽剔除了 xen虚拟化。
为什么红帽选择kvm?
1.xen虚拟化没有给红帽带来更多的收益
2.xen 被思杰收购了
3.最重要的:xen不愿意把源码内置到红帽源码里面。
这就意味着红帽每发布一个产品,都要去维护两套内核。
一套base基础内核,一套带了xen的内核。
内核维护量非常大,非常不方便。
Xen虚拟化(当年还没有硬件辅助的时候),Xen虚拟化需要修改guest os(虚拟机操作系统)内核源码的,以支持它本身的虚拟化特性,意味着xen当年只支持linux(开源),不支持windows(闭源)。
Kvm虚拟化(Kernel-based Virtual Machine)基于内核的虚拟机。Kvm已经作为了红帽内核源码的一部分了,内核的维护很方便。不修改客户机源码,不仅支持linux,而且也支持windows。
VMware虚拟化闭源的,不讨论。xen和kvm 是开源虚拟化。
思杰收购了xen,赞助了一家开源社区 cloudstack
红帽收购了kvm,赞助了一家开源社区 openstack
Hypervisor(VMM)分类
Hypervisor 虚拟化软件层/虚拟机监控机(Virtual Machine Monitor,VMM)
(对虚拟机的所有操作都是由这个虚拟化中间层实现,控制虚拟机的创建、删除、开启关闭等等)
CNA,计算节点代理,安装了CNA.ISO的物理服务器,这台物理服务器就具备了虚拟化能力,它就能创建虚拟机了。
1、裸金属型,VMM跑在物理硬件上(VMM虚拟化层是作为操作系统一部分直接运行在物理硬件上)
2、宿主型,VMM跑在物理服务器操作系统上(在物理硬件上跑的物理服务器操作系统,安装的虚拟化软件充当VMM虚拟化层,VMM虚拟化层是在物理服务器操作系统之上,不直接属于物理服务器操作系统)
虚拟化技术分类
1、二进制翻译技术VMware率先实现的,本质就是通过VMM来回翻译,里面的虚拟机永远不知道自己是个虚拟机,所以二进制翻译(Binary Translation(BT))性能可能不是很好。BT就是一个软件实现的完全虚拟化。
2、早期(xen)半虚拟化只支持 linux(开源),而不支持windows(闭源)。
3、硬件辅助虚拟化:直接在cpu底层修改cpu架构,cpu会直接捕获那些出现漏洞的指令集,通过cpu硬件辅助执行,效率非常高。Vmware 安装 64位操作系统,如果未开启vt-x或amd-v cpu辅助虚拟化,则是无法创建虚拟机的。VMware支持BT实现的完全虚拟化为什么还要开启硬件辅助虚拟化,因为考虑性能问题,必须开启。
注意:半虚拟化是早期xen的解决方案,但是有了cpu硬件辅助虚拟化之后,xen虚拟化也通过cpu硬件辅助虚拟化,可以实现完全虚拟化。所以现在的XEN:靠自己支持半虚拟化,靠cpu支持全虚拟化。
二进制翻译和cpu硬件辅助:完全虚拟化(软件完全虚拟化/硬件辅助完全虚拟化)
Xen:早期半虚拟化代表
全虚拟化:特权和敏感指令集都是由VMM来传递,来回传递翻译,效率低。不知道自己是个虚拟机。
半虚拟化:guest os 明确自己是虚拟机操作系统,修改内核,要求系统必须开源,指令无需中间虚拟化的封装解码操作,速度相对比较快。性能好一些。
硬件辅助:修改cpu底层架构,cpu直接捕获敏感指令进行执行,硬件执行效率最高(现在计算机默认开启使用硬件辅助虚拟化),主板bios未开启虚拟化报错如下图
3、存储虚拟化
建议VRM部署在CNA的本地硬盘(本地硬盘做RAID,VRM不会迁移),业务虚拟机一般不安装在本地磁盘而是安装在共享磁盘,其他业务虚拟机比如windows2016, CentOS建议部署在共享存储中,方便未来迁移。CNA本地所有磁盘坏了,只会影响VRM,不会影响业务虚拟机。
存储组网(SAN)
模拟搭建一个存储
华为开发了一个存储仿真器。Ocenstor Dorado V3/V6
V3版本:开发的有 vmware 版本,也有 fusioncompute版本
V6版本:没有开发vmware版本,开发hyper-v版本(注意:如果你在本机win上启用了hyper-v,那么它对cpu虚拟化是独占的,未来是不能在vmware上同时开启cpu虚拟化的。),也开发了fusioncompute版本,还有公有云版本。
V3和v6界面差别非常大,但是流程是一样的。
V6在hyper-v上的搭建:https://blog.51cto.com/cloudcs/5248583
V3仿真器磁盘文件,把仿真器做成了一个磁盘文件,加载这个文件进行仿真器安装,磁盘文件有问题重新解压。
V3仿真器License文件。
先创建两个文件夹storage_disk(保存解压出来的仿真器磁盘文件)和storage_vm(保存虚拟机),再创建虚拟机。
注意:必须是Workstation 10.x版本
必须是SUSE Linux Enterprise 11 64位
内存至少8G
我选择的是仅主机(要注意自己的仅主机对应的子网ip是什么。)
使用现有虚拟磁盘storage_disk
这里的20G是仿真器对应的磁盘,还要再添加一块磁盘40G,用于模拟存储空间。
再另外添加5块仅主机网卡。
检查CD/DVD光驱,这里不需要镜像。
开启storage_vm虚拟机,安装存储。
这个ip地址段,输入虚拟机仅主机的网段内ip(这里是设置mgmt存储管理口ip)
等待加载,根据电脑性能,快的2-5分钟,慢的15-30分钟。
当看到提示 Old Password 输入旧密码的时候,表示安装成功。
开始修改密码
可以通过 show port ip 这个命令查看mgmt存储管理口ip。但是v3存储在vmware上配置后,是无法显示的。
登录 https://11.1.1.10:8088/ https并带上8088端口号才能登录。
调整设备时间,因为存储仿真器要导入license,官方提供的这个v3 license时间截止日期 2019年。所以手工把设备时间改一下,改成2019年之前(生产环境不用改)。
导入license
它是模拟仿真器,是个虚拟的仿真器,不能对它进行关闭重启只能挂起暂停,一旦关闭重启这个存储就损坏了,得重新安装了,所以建议做快照,后面有问题就恢复快照又是一台新的存储。
存储配置
1.配置存储业务IP地址,11.1.1.100
2.创建硬盘域
3.创建存储池
4.创建LUN(LUN可理解成盘符,像C盘D盘)
5.创建LUN组(方便映射管理)
6.创建主机(存储里面的逻辑主机)
业务主机通过存储里面的逻辑主机跟lun组映射,业务主机和存储里面的逻辑主机一一关联,把业务主机里面的iqn号加入到存储里面的逻辑主机,存储根据存储里面的逻辑主机的iqn号知道是哪台业务主机(iqn号唯一的)
7.创建主机组
8.创建映射视图(LUN组和主机组的映射)
配置存储业务ip
创建硬盘域(模拟出8块硬盘这是虚拟的,实际只有一块40G的硬盘)
创建存储池
创建LUN
注意:存储仿真器,单个LUN最大不得超过5GB
创建LUN组
把刚才创建的lun加入到这个lun组里面
创建主机(这里的操作系统只是个备注信息),一直下一步
创建主机组
把刚才创建的逻辑主机加入到这个主机组
创建映射视图,是LUN组和主机组的映射(不需要那个创建端口组)
Windows访问(搜索iSCSI)
将上层业务主机的iqn号(类似于身份id),在上层业务主机发起连接的时候加入到逻辑主机(windows001)里面。
发起连接(业务主机加载LUN组中的LUN)
这里就意味着电话打通了,但是存储不知道你是谁,这时候需要把你的iqn号(身份id)加入到逻辑主机里面(windows001)
打开Windows的计算机管理
右键单击,重新扫描
删除,脱机,在存储里把iqn号移除,在重新扫描磁盘。
问题总结
1.注意:IQN号不可以是中文
2.存储怎么关闭(不可以关闭/不可以重启,但可以挂起暂停)
linux访问存储
和windows流程一样,可以再创建一个lun、lun组、主机、主机组、映射视图
发起连接(向存储业务口ip发起连接) 连接存储业务口先ping下存储业务口11.1.1.100
[root@jumpserver ~]# iscsiadm -m discovery -t st -p 11.1.1.100 向存储业务口ip发起连接
-m mode模式:discovery/node/fw/session等
-t type类型:send target 发送目标st
-p portal ip[:port] ip加端口号(端口号可选)
-l: login 登录
[root@jumpserver ~]# iscsiadm -m node -l 登入
[root@jumpserver ~]# cat /etc/iscsi/initiatorname.iscsi 查看下iqn号
InitiatorName=iqn.1994-05.com.redhat:f341342db1
把业务主机的iqn号(身份id)加入到逻辑主机里面(linux002)
退出(-u)再登入( -l),刷新下才会识别到刚添加的硬盘/dev/sdb
[root@jumpserver ~]# iscsiadm -m node -u
[root@jumpserver ~]# iscsiadm -m node -l
[root@jumpserver ~]# lsblk 就读取到第二块硬盘/dev/sdb
[root@jumpserver ~]# fdisk /dev/sdb 分区
[root@jumpserver ~]# mkfs.xfs /dev/sdb1 格式化分区成想要的文件系统
[root@jumpserver ~]# mkdir /data
[root@jumpserver ~]# mount /dev/sdb1 /data
[root@jumpserver ~]# df -Th -T显示文件系统类型
4、存储的分类
按照存储组网类型
1、DAS(Direct Attached Storage)直连式存储,一台服务器连接一个存储,且存储无法共享使用。受距离限制。
2、NAS(Network Attached Storage)网络附加式存储,通过网络共享的方式来访问的。
NAS本身携带文件系统的,然后提供NFS协议(linux/unix)和CIFS协议(windows)。
文件共享平台(不会经常修改,而是经常浏览下载),用NAS,主打共享。
3、SAN(Storage Area Networks)存储区域网络,NAS和SAN都是可以通过网络进行共享的,不同的是文件系统所在的地方不同。NAS文件系统所在的地方是服务端(NAS存储本身机头),SAN文件系统所在的地方是客户端(linux/windows),如果你是linux客户端,文件系统应该是ext2/ext3/ext4/xfs ,如果是windows客户端,文件系统应该是 ntfs。
NAS主打的是共享(不会经常修改,而是经常浏览下载)。
但是SAN主打的就是大量读写,比如数据库业务场景。
SAN(FC-SAN/IP-SAN)
按照存储形态
1、集中式
集中式存储的缺点:
孤立的存储资源,存储通过专用网络连接到有限数量的服务器;
集中式纵向扩容通过增加硬盘框实现,硬件控制器性能(单控制器带盘能力)成为瓶颈;
集中式存储横向扩容需要通过控制器全连接实现,硬件控制器性能成为扩容瓶颈;
集中式存储资源缺乏共享,存储设备和资源往往由不同厂家提供,设备之间无法进行资源共享,数据中心看到的是一个个孤立的存储池;
集中式存储采用集中式元数据管理方式,系统所能提供的并发操作能力将受限于元数据服务的性能,元数据服务也将会成为系统的性能瓶颈;
2、分布式
按照业务类型
1、块存储
只要是需要被格式化使用的存储(磁盘、移动硬盘,u盘等)都叫块存储。
发生大量的读写的场景,比如数据库业务场景。
直接访问,开销最小,效率最高。
成本高,扩展困难。
场景:企业数据库,Oracle等。
不管是什么存储,最终数据落脚点就在磁盘上,而磁盘就是块存储。
2、文件存储
更易管理,更易与应用对接。
具备一定扩展性,但限制较多
场景:企业内部应用整合,文件共享等。NAS
3、对象存储
结构扁平,近乎无限的容量扩展。
更加智能的自管理特性。
业界标准互联网协议,跨地域传输能力
场景:面向互联网服务的存储,归档、备份等。
对象存储是一种新兴存储技术,对象存储系统综合了NAS和SAN的优点,同时具有SAN的高速直接访问和NAS的数据共享等优势,提供了高可靠性、跨平台性以及安全的数据共享的存储体系结构。对象存储与块存储、文件存储的对比如下:
1、块存储对存储层直接访问,开销最小,效率最高,速度最快。但成本最高,扩展困难。块存储采用iSCSI/FC协议,很难跨网络传输。适合的应用场景是企业数据库,如运行Oracle等;
2、文件存储是在块存储之上构建了文件系统,采用目录-目录-文件的方式组织数据,更容易管理。因为大多数应用程序都是对文件进行操作,因此文件存储更容易和应用系统对接。文件系统受目录树的限制,扩展性受限,一般最多扩展到几十PB。文件系统适用于企业内部应用整合,文件共享场景;
3、对象存储是在块存储之上构建了对象管理层,与文件系统相比,对象系统层是扁平的,扩展限制少,因此拥有近乎无限的扩展性。对象由唯一的Key,文件,数据(文件),元数据,自定义元数据构成,由于包含了自管理信息,更加智能。对象存储采用兼容标准的互联网协议接口,可以跨地域传输。对象存储适用于面向互联网服务的存储场景,以及企业内部的归档、备份场景。
5、链路冗余多路径
Windows安装多路径,OceanStor_UltraPath_31.2.0_Windows不支持win10,建议虚拟机中安装windows server 2012
假设H0口为A控的存储业务口(11.1.1.100),H3口为B控的存储业务口(11.1.1.101)。
创建lun、lun组、主机、主机组、映射视图。
业务系统主机多路径软件建议提前安装,因为安装多路径软件之后需要重启。
发起连接(向存储业务口ip发起连接) 连接存储业务口先ping下存储业务口11.1.1.101
把业务主机的iqn号(身份id)加入到逻辑主机里面。
加入4条业务链路(4个存储业务口)
安装多路径软件,业务系统主机多路径软件建议提前安装,因为安装多路径软件之后需要重启。
Linux安装多路径
发起连接(向存储业务口ip发起连接)
[root@jumpserver ~]# iscsiadm -m discovery -t st -p 11.1.1.100 向存储业务口ip发起连接
[root@jumpserver ~]# iscsiadm -m discovery -t st -p 11.1.1.101 向存储业务口ip发起连接
[root@jumpserver ~]# iscsiadm -m discovery -t st -p 11.1.1.102 向存储业务口ip发起连接
[root@jumpserver ~]# iscsiadm -m discovery -t st -p 11.1.1.103 向存储业务口ip发起连接
-m mode模式:discovery/node/fw/session等
-t type类型:send target 发送目标st
-p portal ip[:port] ip加端口号(端口号可选)
-l: login 登录
[root@jumpserver ~]# iscsiadm -m node -l 登入
[root@jumpserver ~]# cat /etc/iscsi/initiatorname.iscsi 查看下iqn号
InitiatorName=iqn.1994-05.com.redhat:f341342db1
把业务主机的iqn号(身份id)加入到逻辑主机里面
退出(-u)再登入( -l),刷新下才会识别到刚添加的硬盘/dev/sdb
[root@jumpserver ~]# iscsiadm -m node -u
[root@jumpserver ~]# iscsiadm -m node -l
[root@jumpserver ~]# lsblk 就读取到第二块硬盘/dev/sdb
[root@jumpserver ~]# fdisk /dev/sdb 分区
[root@jumpserver ~]# mkfs.xfs /dev/sdb1 格式化分区成想要的文件系统
[root@jumpserver ~]# mkdir /data
[root@jumpserver ~]# mount /dev/sdb1 /data
[root@jumpserver ~]# df -Th -T显示文件系统类型