NOVA文件系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NOVA文件系统相关的知识,希望对你有一定的参考价值。

参考技术A

Jake Edge 发表于2018年5月18日 原文

LSFMM

在2018年的Linux存储,文件系统和内存管理峰会上,Andiry Xu发布了他正试图进入上游内核的 NOVA文件系统 。与现有的内核文件系统不同,NOVA专门针对非易失性主内存(NVMM),而不是传统的块设备(磁盘或SSD)。实际上,它根本不使用内核的Block层,而是使用直接映射到内核地址空间的持久性内存(persistent memory)。

Xu将NOVA与支持 DAX直接访问机制 的ext4和XFS文件系统版本进行了比较。有了这些,只有文件系统数据(filesystem data)绕过页面缓存;元数据(metadata)仍然通过页面缓存。另外,这些文件系统对附加(append)操作的延迟要高得多。还有一个写入放大效应(write amplification effect)。所有这些都导致了日志记录的高开销,他说。

除此之外,NVMM上的这些文件系统还存在可扩展性问题。他在高端多核硬件上进行了一些测试,将NOVA和tmpfs与ext4和XFS的DAX模式进行比较。在他的测试中,他用RAM来模拟NVMM,因为在这一时期上很难真正获得NVMM设备。一般而言,只有tmpfs和NOVA可以合理扩展 - 其他文件系统争夺各种锁和信号量 - 尽管如此,NOVA仍有改进空间,因为只有tmpfs可以合理地按比例进行测试。

Xu表示,对于DAX文件系统来说,支持大页面是很困难的。巨大的页面要求物理地址在大页面大小的边界上对齐,并且内存物理连续,但由文件系统分配的内存不一定符合这些要求。Dave Chinner表示XFS有一个inode选项来支持大页面的使用;另一位与会者表示,ext4具有类似的功能,但它只能支持2MB的大页面,而不是1GB。

Xu在2016年 NOVA论文[PDF]中 向与会者指出了更多信息,但简要介绍了NOVA的一些功能。它是为NVMM设计的日志结构文件系统。它具有只包含元数据更改的每个inode日志记录;该日志指出对实际数据的更改。它使用基数树(radix tree)作为块映射,并写入复制(CoW)其文件数据。

NOVA使用轻量级的日志记录方案,该日志记录方案仅记录日志条目链接列表的头部和尾部指针。这有利于快速垃圾回收,因为当条目不再有效时就从列表中删除。除非无效条目占日志的一半以上,否则不会复制,在这种情况下,会创建一个新的日志以原子地替换旧日志;元数据日志条目仅在该点复制。

他展示了一些比较DAX版本的ext4和XFS与NOVA的性能图表。通常,NOVA在他测试的大多数 filebench 工作负载上的性能要优于ext4或XFS。“Web服务器”工作负载例外,其中文件系统的执行大致相同。

Xu表示,第三个基于4.16-rc4的RFC 发布 是在3月份完成的。这篇文章收到了一些反馈意见,所以他正在研究这些项目,并将很快发布v3。所需的更改包括64位时间戳和更好的巨大页面支持。

Chinner询问了用户空间工具,特别是NOVA是否有<tt>fsck</tt> 。在文件系统可以合并之前这是需要的,因为用户需要能够修复他们的文件系统。徐说,一直以来关注性能,所以没有<tt>fsck</tt> 。Ted Ts\'o指出NOVA还需要一个可以验证文件系统映像的工具,这将允许在xfstests上运行更多的测试。

OpenStack 运维 - 部署Nova组件 [T版]

OpenStack 运维 - 部署Nova组件

一、创建Nova数据库并执行授权操作

CT控制节点

mysql -u root -p 

create database nova_api
create database nova
create database nova_cell0;

grant all privileges on nova_api.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova_api.* to 'nova'@'%' identified by 'NOVA_DBPASS';
grant all privileges on nova.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova.* to 'nova'@'%' identified by 'NOVA_DBPASS';
grant all privileges on nova_cell0.* to 'nova'@'localhost' identified by 'NOVA_DBPASS';
grant all privileges on nova_cell0.* to 'nova'@'%' identified by 'NOVA_DBPASS';
flush privileges;
exit

二、管理Nova用户及服务

① 创建Nova用户

#把nova用户添加到service项目,拥有admin权限
openstack user create --domain default --password NOVA_PASS nova

openstack role add --project service --user nova admin

② 创建Nova服务

openstack service create --name nova --description "OpenStack Compute" compute

③ Nova关联endpoint端点

openstack endpoint create --region RegionOne compute public http://ct:8774/v2.1

openstack endpoint create --region RegionOne compute internal http://ct:8774/v2.1

openstack endpoint create --region RegionOne compute admin http://ct:8774/v2.1



④ 安装Nova组件

yum -y install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler

⑤ 修改配置文件

cp -a /etc/nova/nova.conf,.bak
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf

#修改nova.conf
 openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
 openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.1.100 			####修改为 ct的IP(内部IP)
 openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
 openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
 openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
 openstack-config --set /etc/nova/nova.conf api_database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api
 openstack-config --set /etc/nova/nova.conf database connection mysql+pymysql://nova:NOVA_DBPASS@ct/nova
 openstack-config --set /etc/nova/nova.conf placement_database connection mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement
 openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
 openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
 openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
 openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
 openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
 openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
 openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
 openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
 openstack-config --set /etc/nova/nova.conf vnc enabled true
 openstack-config --set /etc/nova/nova.conf vnc server_listen ' $my_ip'
 openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip'
 openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
 openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
 openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
 openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
 openstack-config --set /etc/nova/nova.conf placement project_name service
 openstack-config --set /etc/nova/nova.conf placement auth_type password
 openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
 openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
 openstack-config --set /etc/nova/nova.conf placement username placement
 openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS

#查看配置
cat /etc/nova/nova.conf

[DEFAULT]
enabled_apis = osapi_compute,metadata		#指定支持的api类型
my_ip = 192.168.1.100				#定义本地IP
use_neutron = true					#通过neutron获取IP地址
firewall_driver = nova.virt.firewall.NoopFirewallDriver
transport_url = rabbit://openstack:RABBIT_PASS@ct	#指定连接的rabbitmq

[api]
auth_strategy = keystone				#指定使用keystone认证

[api_database]
connection = mysql+pymysql://nova:NOVA_DBPASS@ct/nova_api

[barbican]
[cache]
[cinder]
[compute]
[conductor]
[console]
[consoleauth]
[cors]

[database]
connection = mysql+pymysql://nova:NOVA_DBPASS@ct/nova

[devices]
[ephemeral_storage_encryption]
[filter_scheduler]

[glance]
api_servers = http://ct:9292

[guestfs]
[healthcheck]
[hyperv]
[ironic]
[key_manager]
[keystone]

[keystone_authtoken]				#配置keystone的认证信息
auth_url = http://ct:5000/v3				#到此url去认证
memcached_servers = ct:11211			#memcache数据库地址:端口
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS

[libvirt]
[metrics]
[mks]
[neutron]
[notifications]
[osapi_v21]

[oslo_concurrency]					#指定锁路径
lock_path = /var/lib/nova/tmp			#锁的作用是创建虚拟机时,在执行某个操作的时候,需要等此步骤执行完后才能执行下一个步骤,不能并行执行,保证操作是一步一步的执行

[oslo_messaging_amqp]
[oslo_messaging_kafka]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]

[pci]
[placement]
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://ct:5000/v3
username = placement
password = PLACEMENT_PASS

[powervm]
[privsep]
[profiler]
[quota]
[rdp]
[remote_debug]
[scheduler]
[serial_console]
[service_user]
[spice]
[upgrade_levels]
[vault]
[vendordata_dynamic_auth]
[vmware]
[vnc]						#此处如果配置不正确,则连接不上虚拟机的控制台
enabled = true		
server_listen =  $my_ip				#指定vnc的监听地址
server_proxyclient_address =  $my_ip			#server的客户端地址为本机地址;此地址是管理网的地址

[workarounds]
[wsgi]
[xenserver]
[xvp]
[zvm]

[placement_database]
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@ct/placement

⑥ 初始化数据库

su -s /bin/sh -c "nova-manage api_db sync" nova
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
#创建cell单元格
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

su -s /bin/sh -c "nova-manage db sync" nova

验证cell0和cell1是否注册成功

su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova


查看日志文件

tail -f /var/log/nova/nova-manage.log

⑦ 启动Nova服务并查看端口

systemctl enable openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

systemctl start openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service openstack-nova-novncproxy.service

netstat -tnlup|egrep '8774|8775'
curl http://ct:8774

【netstat】命令用于显示各种网络相关信息
【-tnlup】选项组合使用
-t:仅显示tcp相关选项
-n:拒绝显示别名,能显示数字的全部转化为数字
-l:仅列出在Listen(监听)下的服务状态
-u:仅显示udp相关选项
-p:显示建立相关链接的程序名
【curl】命令用于模拟http浏览器发起访问向ct:8774,用作测试


三、计算节点配置 Nova 服务

C1/C2节点

① 安装nova-computer插件

yum -y install openstack-nova-compute

② 修改配置文件

cp -a /etc/nova/nova.conf,.bak
grep -Ev '^$|#' /etc/nova/nova.conf.bak > /etc/nova/nova.conf

#注意修改本机IP
openstack-config --set /etc/nova/nova.conf DEFAULT enabled_apis osapi_compute,metadata
openstack-config --set /etc/nova/nova.conf DEFAULT transport_url rabbit://openstack:RABBIT_PASS@ct
openstack-config --set /etc/nova/nova.conf DEFAULT my_ip 192.168.1.250
openstack-config --set /etc/nova/nova.conf DEFAULT use_neutron true
openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver
openstack-config --set /etc/nova/nova.conf api auth_strategy keystone
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf keystone_authtoken memcached_servers ct:11211
openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_type password
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
openstack-config --set /etc/nova/nova.conf keystone_authtoken project_name service
openstack-config --set /etc/nova/nova.conf keystone_authtoken username nova
openstack-config --set /etc/nova/nova.conf keystone_authtoken password NOVA_PASS
openstack-config --set /etc/nova/nova.conf vnc enabled true
 openstack-config --set /etc/nova/nova.conf vnc server_listen 0.0.0.0
openstack-config --set /etc/nova/nova.conf vnc server_proxyclient_address ' $my_ip'
openstack-config --set /etc/nova/nova.conf vnc novncproxy_base_url http://192.168.1.250:6080/vnc_auto.html
openstack-config --set /etc/nova/nova.conf glance api_servers http://ct:9292
openstack-config --set /etc/nova/nova.conf oslo_concurrency lock_path /var/lib/nova/tmp
openstack-config --set /etc/nova/nova.conf placement region_name RegionOne
openstack-config --set /etc/nova/nova.conf placement project_domain_name Default
openstack-config --set /etc/nova/nova.conf placement project_name service
openstack-config --set /etc/nova/nova.conf placement auth_type password
openstack-config --set /etc/nova/nova.conf placement user_domain_name Default
openstack-config --set /etc/nova/nova.conf placement auth_url http://ct:5000/v3
openstack-config --set /etc/nova/nova.conf placement username placement
openstack-config --set /etc/nova/nova.conf placement password PLACEMENT_PASS
openstack-config --set /etc/nova/nova.conf libvirt virt_type qemu

③ 开启服务

systemctl enable libvirtd.service openstack-nova-compute.service
systemctl start libvirtd.service openstack-nova-compute.service

四、在控制节点测试计算节点

openstack compute service list --service nova-compute

② 扫描当前有几个可用的计算节点

#扫描到可用节点后,会将其创建到cell中,后续就可以在cell中创建虚拟机
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

③ 修改控制nova的配置文件

vim /etc/nova/nova.conf

[scheduler]
#每300秒扫描一次
discover_hosts_in_cells_interval = 300

systemctl restart openstack-nova-api.service

④ 验证计算节点服务

openstack compute service list

⑤ 查看各个组件API是否正常

openstack catalog list

⑥ 查看镜像

openstack image list

⑦ 查看cell API和Placement API是否正常

nova-status upgrade check

以上是关于NOVA文件系统的主要内容,如果未能解决你的问题,请参考以下文章

五,openstack之nova服务的安装(计算节点)

华为nova9鸿蒙系统使用录屏

华为nova7怎么虚拟打卡啊

记录Android Studio连接华为(nova)手机鸿蒙系统踩过的坑

记录Android Studio连接华为(nova)手机鸿蒙系统踩过的坑

荣耀nova7是虚拟机吗?