• 关于

    全网管理会出现哪些问题

    的搜索结果

问题

【精品问答】不懂如何使用ECS?ECS功能百问看这里

【精品问答】不懂如何使用ECS?ECS功能百问看这里 云服务器(Elastic Compute Service,简称 ECS)是一种简单高效、处理能力可弹性伸缩的计算服务࿰...
问问小秘 2020-01-02 15:48:11 9261 浏览量 回答数 5

问题

【精品问答】微服务引擎 MSE你都知道?

微服务引擎 MSE(Microservice Engine)是服务注册和配置中心全托管平台,提供免运维的高可用 ZooKeeper 、Nacos 和 Eureka 集群微服务管理功能。完美兼容开源产...
montos 2020-04-08 12:17:43 3 浏览量 回答数 1

回答

未来云计算的发展将会面临哪些问题呢?1、数据的安全问题数据的安全是企业关心的问题之一。数据的安全包括2个方面:一是保证数据不会丢失,二是保证数据不会被泄露和非法访问。如果数据出现丢失又没有备份或者被泄露和非法访问,都会给企业和客户带来无法估量的损失。因此必须制定出有效的方案来保证数据的安全。虽然云计算为存储数据提供了无限的空间,也为数据的处理提供了无限的计算能力,但是用户对于托管自己加密数据的云计算运营公司能否确保数据的安全仍存在着质疑。在使用云计算服务时,用户往往不清楚自己数据存放的位置,这样就会使用户产生对数据安全的担心,所以要有效地解决数据的安全问题,未来的云计算必须考虑全方位的安全解决方案,提供多用户架构的良好设计,还必须要有确实可信的云计算运营公司。2、互操作问题在对云计算系统进行管理时,应当考虑云系统之间的互操作问题。当一个云系统需要访问另一个云系统的计算资源时,必须要对云计算的接口制定交互协议,这样才能使得不同的云计算服务提供者相互合作,以便提供更好更强大的服务。3、网络的性能问题提高网络性能也是云计算面临的挑战之一。用户使用云计算服务离不开网络,但是接入网络的带宽较低或不稳定都会使云计算的性能大打折扣,因此要大力发展接入网络技术。此外,在云计算网络中完成信息的高效处理,云计算集群服务器要具备较高的性能,同时为了保证云计算的服务高质量地传给需要的用户,网络中通信设施也必须具备高性能。4、公共标准的开放问题目前,云计算还没有开放的公共标准,这给用户造成了许多不便。用户很难将使用的某个公司的云计算应用程序迁移到另一家公司的云计算平台上,这样就大大降低了云计算服务的转移弹性。因此,云计算要想更好的发展,就必须制定出一个统一的云计算公共标准。来自:http://www.enkj.com/idcnews/Article/20180908/14462
dickeylth 2019-12-02 01:48:17 0 浏览量 回答数 0

回答

混合云备份服务(Hybrid Backup Recovery,简称HBR) 是一种高效、安全、低成本的全托管式云备份存储服务。您可以使用混合云备份将企业数据中心的数据、分支机构数据,或云上资源备份到混合云备份的云上备份仓库。 混合云备份架构图 在本地数据中心部署HBR客户端后,用户可以通过专线、VPN或者公网将指定需要备份的本地文件、NAS文件、VMWare虚拟机以及SQL Server数据库备份到阿里云上的备份库中。同时,通过高等级加密以及高效的重删压缩技术,确保了数据传输的高效性和安全性。 此外,针对阿里云上各个类型的数据,包括ECS的文件、SQL Server、SAP HANA、NAS服务、以及OSS服务上的数据,HBR提供了简单易用的原生数据保护功能。 为什么选择混合云备份 相比于在自建的数据中心搭建备份系统或自行搭建云上备份系统,混合云备份具有以下优势: 对比项 手工备份 混合云备份服务 权限管理 无 手工备份没有严格的权限管理功能,容易出现数据误删除等操作。 有 混合云备份服务使用RAM服务为操作人员划分等级权限,限制其访问被授权的资源。 重删压缩 无 重复备份的数据会增加大量的存储成本,且备份速度低。 有 混合云备份服务采用阿里云自研的重删(重复数据删除)、压缩技术,可有效减少I/O传输量和云备份存储量,从而提高备份速度,节省成本。 备份报警 无 一旦出现备份失败,不通过人工跟踪无法感知。有些只有在恢复备份时,才发现备份失败。 有 混合云备份服务的备份报警功能可以在备份失败或客户端与服务器连接断开时,向备份人员发送报警通知。 备份数据生命周期 手动管理 自动管理 数据恢复 需手动整合多个恢复副本。 混合云备份服务的备份版本展示清晰,方便恢复时选择,还可以设置恢复规则。 管理成本 高 手工备份需要人工写脚本、需要相应的管理人员,整体运维复杂、难度较大、资源利用率低、管理成本高。 低 使用混合云备份服务,您只需将备份数据托管到我们的云上备份仓库,无需担心硬件预置、配置、集群扩展、安全等问题。 数据加密 需自建 全自动,支持AES256加密、AK授权加密、HTTPS传输加密。 混合云备份支持备份哪些数据源 数据源 系统 备份客户端 本地数据中心 文件目录 Windows/Windows Server/Linux 文件客户端 VMware vSphere中的虚拟机镜像 Windows/Windows Server/Linux 虚机客户端 SAP HANA Linux 文件客户端 SQL Server Windows Server 文件客户端 MySQL Windows Server/Linux 文件客户端 MongoDB Windows Server/Linux 文件客户端 阿里云ECS ECS中的文件目录 Windows Server/Linux ECS备份客户端 部署在ECS上的SAP HANA Windows Server/Linux ECS备份客户端 部署在ECS上的SQL Server Windows Server ECS备份客户端 云存储网关 部署在阿里云上的文件网关 不涉及 云存储网关客户端 阿里云文件存储NAS 保存在阿里云文件存储NAS的数据 不涉及 不涉及 阿里云对象存储OSS 保存在阿里云对象存储OSS的数据 不涉及 不涉及 相关概念 名称 描述 备份源 需要备份的数据所在的机器,例如服务器、虚拟机或者ECS实例。 客户端 客户端安装在备份源上。您可以通过客户端进行备份和恢复等操作。不同的备份源系统和平台需要安装相应的客户端。 客户端支持断点续传、定时重试等方式确保备份稳定性,在网络短时抖动情况下依然可以完成备份。 地域 地域是指阿里云物理的数据中心。资源创建成功后不能更换地域。更多参见地域和可用区。 备份仓库 备份仓库是HBR的云上备份仓库,用于存储您备份在云上的数据。多个客户端可以备份到同一个仓库,帮助您更高效的管理备份数据,减小管理时间和成本。 备份仓库支持的客户端数和存储容量没有限制,按需订阅,按需扩容,同时备份库提供12个9的数据可靠性。 备份仓库有地域属性,选择合理的备份仓库地域可以帮助您提高备份性能,布局容灾。备份仓库创建成功后不能更换地域。数据的重删压缩都以备份仓库为单位。 镜像仓库 镜像仓库是备份仓库的异地镜像,镜像仓库可以帮助您实现异地容灾,您还可以使用异地镜像仓库实现跨区域恢复。 图形化中转机 如果您需要备份Linux系统中的文件目录,且该Linux系统未安装图形化界面,需要将HBR的客户端下载到一台有图形化界面的中转机上,然后部署到被保护机器。您可以在中转机登录客户端界面。
1934890530796658 2020-03-30 14:04:31 0 浏览量 回答数 0

问题

跨区域数据复制功能上线

阿里云对象存储OSS首发 跨区域复制功能! 能解决什么问题? 保障业务连续性-通过跨区域数据复制功能实现异地容灾,当出现灾难,如地震、海啸、光缆挖断等,...
terry.zhouh 2019-12-01 21:02:12 20675 浏览量 回答数 16

问题

浅谈服务器的可用性

作为信息化建设中硬件架构不可或缺的服务器一直以来都备受关注,同时,服务器的更新换代也在见证着世界领先科技的发展历程,不论是最初的16位处理,还是后来红极一时的32位处理器,...
pittman 2019-12-01 21:42:33 8159 浏览量 回答数 1

回答

在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上 要重 视 它 , 战术上又 要 藐 视 它。先举个例子感受一下千万级到底是什么数量级?现在很流行的优步(Uber),从媒体公布的信息看,它每天接单量平均在百万左右, 假如每天有10个小时的服务时间,平均QPS只有30左右。对于一个后台服务器,单机的平均QPS可以到达800-1000,单独看写的业务量很简单 。为什么我们又不能说轻视它?第一,我们看它的数据存储,每天一百万的话,一年数据量的规模是多少?其次,刚才说的订单量,每一个订单要推送给附近的司机、司机要并发抢单,后面业务场景的访问量往往是前者的上百倍,轻松就超过上亿级别了。 今天我想从架构的本质谈起之后,希望大家理解在做一些建构设计的时候,它的出发点以及它解决的问题是什么。 架构,刚开始的解释是我从知乎上看到的。什么是架构?有人讲, 说架构并不是一 个很 悬 乎的 东西 , 实际 上就是一个架子 , 放一些 业务 和算法,跟我们的生活中的晾衣架很像。更抽象一点,说架构其 实 是 对 我 们 重复性业务 的抽象和我 们 未来 业务 拓展的前瞻,强调过去的经验和你对整个行业的预见。 我们要想做一个架构的话需要哪些能力?我觉得最重要的是架构师一个最重要的能力就是你要有 战 略分解能力。这个怎么来看呢: 第一,你必须要有抽象的能力,抽象的能力最基本就是去重,去重在整个架构中体现在方方面面,从定义一个函数,到定义一个类,到提供的一个服务,以及模板,背后都是要去重提高可复用率。 第二, 分类能力。做软件需要做对象的解耦,要定义对象的属性和方法,做分布式系统的时候要做服务的拆分和模块化,要定义服务的接口和规范。 第三, 算法(性能),它的价值体现在提升系统的性能,所有性能的提升,最终都会落到CPU,内存,IO和网络这4大块上。 这一页PPT举了一些例子来更深入的理解常见技术背后的架构理念。 第一个例子,在分布式系统我们会做 MySQL分 库 分表,我们要从不同的库和表中读取数据,这样的抽象最直观就是使用模板,因为绝大多数SQL语义是相同的,除了路由到哪个库哪个表,如果不使用Proxy中间件,模板就是性价比最高的方法。 第二看一下加速网络的CDN,它是做速度方面的性能提升,刚才我们也提到从CPU、内存、IO、网络四个方面来考虑,CDN本质上一个是做网络智能调度优化,另一个是多级缓存优化。 第三个看一下服务化,刚才已经提到了,各个大网站转型过程中一定会做服务化,其实它就是做抽象和做服务的拆分。第四个看一下消息队列,本质上还是做分类,只不过不是两个边际清晰的类,而是把两个边际不清晰的子系统通过队列解构并且异步化。新浪微博整体架构是什么样的 接下我们看一下微博整体架构,到一定量级的系统整个架构都会变成三层,客户端包括WEB、安卓和IOS,这里就不说了。接着还都会有一个接口层, 有三个主要作用: 第一个作用,要做 安全隔离,因为前端节点都是直接和用户交互,需要防范各种恶意攻击; 第二个还充当着一个 流量控制的作用,大家知道,在2014年春节的时候,微信红包,每分钟8亿多次的请求,其实真正到它后台的请求量,只有十万左右的数量级(这里的数据可能不准),剩余的流量在接口层就被挡住了; 第三,我们看对 PC 端和移 动 端的需求不一样的,所以我们可以进行拆分。接口层之后是后台,可以看到微博后台有三大块: 一个是 平台服 务, 第二, 搜索, 第三, 大数据。到了后台的各种服务其实都是处理的数据。 像平台的业务部门,做的就是 数据存储和读 取,对搜索来说做的是 数据的 检 索,对大数据来说是做的数据的 挖掘。微博其实和淘宝是很类似 微博其实和淘宝是很类似的。一般来说,第一代架构,基本上能支撑到用户到 百万 级别,到第二代架构基本能支撑到 千万 级别都没什么问题,当业务规模到 亿级别时,需要第三代的架构。 从 LAMP 的架构到面向服 务 的架构,有几个地方是非常难的,首先不可能在第一代基础上通过简单的修修补补满足用户量快速增长的,同时线上业务又不能停, 这是我们常说的 在 飞 机上 换 引擎的 问题。前两天我有一个朋友问我,说他在内部推行服务化的时候,把一个模块服务化做完了,其他部门就是不接。我建议在做服务化的时候,首先更多是偏向业务的梳理,同时要找准一个很好的切入点,既有架构和服务化上的提升,业务方也要有收益,比如提升性能或者降低维护成本同时升级过程要平滑,建议开始从原子化服务切入,比如基础的用户服务, 基础的短消息服务,基础的推送服务。 第二,就是可 以做无状 态 服 务,后面会详细讲,还有数据量大了后需要做数据Sharding,后面会将。 第三代 架构 要解决的 问题,就是用户量和业务趋于稳步增加(相对爆发期的指数级增长),更多考虑技术框架的稳定性, 提升系统整体的性能,降低成本,还有对整个系统监控的完善和升级。 大型网站的系统架构是如何演变的 我们通过通过数据看一下它的挑战,PV是在10亿级别,QPS在百万,数据量在千亿级别。我们可用性,就是SLA要求4个9,接口响应最多不能超过150毫秒,线上所有的故障必须得在5分钟内解决完。如果说5分钟没处理呢?那会影响你年终的绩效考核。2015年微博DAU已经过亿。我们系统有上百个微服务,每周会有两次的常规上线和不限次数的紧急上线。我们的挑战都一样,就是数据量,bigger and bigger,用户体验是faster and faster,业务是more and more。互联网业务更多是产品体验驱动, 技 术 在 产 品 体验上最有效的贡献 , 就是你的性能 越来越好 。 每次降低加载一个页面的时间,都可以间接的降低这个页面上用户的流失率。微博的技术挑战和正交分解法解析架构 下面看一下 第三代的 架构 图 以及 我 们 怎么用正交分解法 阐 述。 我们可以看到我们从两个维度,横轴和纵轴可以看到。 一个 维 度 是 水平的 分层 拆分,第二从垂直的维度会做拆分。水平的维度从接口层、到服务层到数据存储层。垂直怎么拆分,会用业务架构、技术架构、监控平台、服务治理等等来处理。我相信到第二代的时候很多架构已经有了业务架构和技术架构的拆分。我们看一下, 接口层有feed、用户关系、通讯接口;服务层,SOA里有基层服务、原子服务和组合服务,在微博我们只有原子服务和组合服务。原子服务不依赖于任何其他服务,组合服务由几个原子服务和自己的业务逻辑构建而成 ,资源层负责海量数据的存储(后面例子会详细讲)。技 术框架解决 独立于 业务 的海量高并发场景下的技术难题,由众多的技术组件共同构建而成 。在接口层,微博使用JERSY框架,帮助你做参数的解析,参数的验证,序列化和反序列化;资源层,主要是缓存、DB相关的各类组件,比如Cache组件和对象库组件。监 控平台和服 务 治理 , 完成系统服务的像素级监控,对分布式系统做提前诊断、预警以及治理。包含了SLA规则的制定、服务监控、服务调用链监控、流量监控、错误异常监控、线上灰度发布上线系统、线上扩容缩容调度系统等。 下面我们讲一下常见的设计原则。 第一个,首先是系统架构三个利器: 一个, 我 们 RPC 服 务组 件 (这里不讲了), 第二个,我们 消息中 间 件 。消息中间件起的作用:可以把两个模块之间的交互异步化,其次可以把不均匀请求流量输出为匀速的输出流量,所以说消息中间件 异步化 解耦 和流量削峰的利器。 第三个是配置管理,它是 代码级灰度发布以及 保障系统降级的利器。 第二个 , 无状态 , 接口 层 最重要的就是无状 态。我们在电商网站购物,在这个过程中很多情况下是有状态的,比如我浏览了哪些商品,为什么大家又常说接口层是无状态的,其实我们把状态从接口层剥离到了数据层。像用户在电商网站购物,选了几件商品,到了哪一步,接口无状态后,状态要么放在缓存中,要么放在数据库中, 其 实 它并不是没有状 态 , 只是在 这 个 过 程中我 们 要把一些有状 态 的 东 西抽离出来 到了数据层。 第三个, 数据 层 比服 务层 更需要 设计,这是一条非常重要的经验。对于服务层来说,可以拿PHP写,明天你可以拿JAVA来写,但是如果你的数据结构开始设计不合理,将来数据结构的改变会花费你数倍的代价,老的数据格式向新的数据格式迁移会让你痛不欲生,既有工作量上的,又有数据迁移跨越的时间周期,有一些甚至需要半年以上。 第四,物理结构与逻辑结构的映射,上一张图看到两个维度切成十二个区间,每个区间代表一个技术领域,这个可以看做我们的逻辑结构。另外,不论后台还是应用层的开发团队,一般都会分几个垂直的业务组加上一个基础技术架构组,这就是从物理组织架构到逻辑的技术架构的完美的映射,精细化团队分工,有利于提高沟通协作的效率 。 第五, www .sanhao.com 的访问过程,我们这个架构图里没有涉及到的,举个例子,比如当你在浏览器输入www.sanhao网址的时候,这个请求在接口层之前发生了什么?首先会查看你本机DNS以及DNS服务,查找域名对应的IP地址,然后发送HTTP请求过去。这个请求首先会到前端的VIP地址(公网服务IP地址),VIP之后还要经过负载均衡器(Nginx服务器),之后才到你的应用接口层。在接口层之前发生了这么多事,可能有用户报一个问题的时候,你通过在接口层查日志根本发现不了问题,原因就是问题可能发生在到达接口层之前了。 第六,我们说分布式系统,它最终的瓶颈会落在哪里呢?前端时间有一个网友跟我讨论的时候,说他们的系统遇到了一个瓶颈, 查遍了CPU,内存,网络,存储,都没有问题。我说你再查一遍,因为最终你不论用上千台服务器还是上万台服务器,最终系统出瓶颈的一定会落在某一台机(可能是叶子节点也可能是核心的节点),一定落在CPU、内存、存储和网络上,最后查出来问题出在一台服务器的网卡带宽上。微博多级双机房缓存架构 接下来我们看一下微博的Feed多级缓存。我们做业务的时候,经常很少做业务分析,技术大会上的分享又都偏向技术架构。其实大家更多的日常工作是需要花费更多时间在业务优化上。这张图是统计微博的信息流前几页的访问比例,像前三页占了97%,在做缓存设计的时候,我们最多只存最近的M条数据。 这里强调的就是做系统设计 要基于用 户 的 场 景 , 越细致越好 。举了一个例子,大家都会用电商,电商在双十一会做全国范围内的活动,他们做设计的时候也会考虑场景的,一个就是购物车,我曾经跟相关开发讨论过,购物车是在双十一之前用户的访问量非常大,就是不停地往里加商品。在真正到双十一那天他不会往购物车加东西了,但是他会频繁的浏览购物车。针对这个场景,活动之前重点设计优化购物车的写场景, 活动开始后优化购物车的读场景。 你看到的微博是由哪些部分聚合而成的呢?最右边的是Feed,就是微博所有关注的人,他们的微博所组成的。微博我们会按照时间顺序把所有关注人的顺序做一个排序。随着业务的发展,除了跟时间序相关的微博还有非时间序的微博,就是会有广告的要求,增加一些广告,还有粉丝头条,就是拿钱买的,热门微博,都会插在其中。分发控制,就是说和一些推荐相关的,我推荐一些相关的好友的微博,我推荐一些你可能没有读过的微博,我推荐一些其他类型的微博。 当然对非时序的微博和分发控制微博,实际会起多个并行的程序来读取,最后同步做统一的聚合。这里稍微分享一下, 从SNS社交领域来看,国内现在做的比较好的三个信息流: 微博 是 基于弱关系的媒体信息流 ; 朋友圈是基于 强 关系的信息流 ; 另外一个做的比 较 好的就是今日 头 条 , 它并不是基于关系来构建信息流 , 而是基于 兴趣和相关性的个性化推荐 信息流 。 信息流的聚合,体现在很多很多的产品之中,除了SNS,电商里也有信息流的聚合的影子。比如搜索一个商品后出来的列表页,它的信息流基本由几部分组成:第一,打广告的;第二个,做一些推荐,热门的商品,其次,才是关键字相关的搜索结果。 信息流 开始的时候 很 简单 , 但是到后期会 发现 , 你的 这 个流 如何做控制分发 , 非常复杂, 微博在最近一两年一直在做 这样 的工作。刚才我们是从业务上分析,那么技术上怎么解决高并发,高性能的问题?微博访问量很大的时候,底层存储是用MySQL数据库,当然也会有其他的。对于查询请求量大的时候,大家知道一定有缓存,可以复用可重用的计算结果。可以看到,发一条微博,我有很多粉丝,他们都会来看我发的内容,所以 微博是最适合使用 缓 存 的系统,微博的读写比例基本在几十比一。微博使用了 双 层缓 存,上面是L1,每个L1上都是一组(包含4-6台机器),左边的框相当于一个机房,右边又是一个机房。在这个系统中L1缓存所起的作用是什么? 首先,L1 缓 存增加整个系 统 的 QPS, 其次 以低成本灵活扩容的方式 增加 系统 的 带宽 。想象一个极端场景,只有一篇博文,但是它的访问量无限增长,其实我们不需要影响L2缓存,因为它的内容存储的量小,但它就是访问量大。这种场景下,你就需要使用L1来扩容提升QPS和带宽瓶颈。另外一个场景,就是L2级缓存发生作用,比如我有一千万个用户,去访问的是一百万个用户的微博 ,这个时候,他不只是说你的吞吐量和访问带宽,就是你要缓存的博文的内容也很多了,这个时候你要考虑缓存的容量, 第二 级缓 存更多的是从容量上来 规划,保证请求以较小的比例 穿透到 后端的 数据 库 中 ,根据你的用户模型你可以估出来,到底有百分之多少的请求不能穿透到DB, 评估这个容量之后,才能更好的评估DB需要多少库,需要承担多大的访问的压力。另外,我们看双机房的话,左边一个,右边一个。 两个机房是互 为 主 备 , 或者互 为热备 。如果两个用户在不同地域,他们访问两个不同机房的时候,假设用户从IDC1过来,因为就近原理,他会访问L1,没有的话才会跑到Master,当在IDC1没找到的时候才会跑到IDC2来找。同时有用户从IDC2访问,也会有请求从L1和Master返回或者到IDC1去查找。 IDC1 和 IDC2 ,两个机房都有全量的用户数据,同时在线提供服务,但是缓存查询又遵循最近访问原理。还有哪些多级缓存的例子呢?CDN是典型的多级缓存。CDN在国内各个地区做了很多节点,比如在杭州市部署一个节点时,在机房里肯定不止一台机器,那么对于一个地区来说,只有几台服务器到源站回源,其他节点都到这几台服务器回源即可,这么看CDN至少也有两级。Local Cache+ 分布式 缓 存,这也是常见的一种策略。有一种场景,分布式缓存并不适用, 比如 单 点 资 源 的爆发性峰值流量,这个时候使用Local Cache + 分布式缓存,Local Cache 在 应用 服 务 器 上用很小的 内存资源 挡住少量的 极端峰值流量,长尾的流量仍然访问分布式缓存,这样的Hybrid缓存架构通过复用众多的应用服务器节点,降低了系统的整体成本。 我们来看一下 Feed 的存 储 架构,微博的博文主要存在MySQL中。首先来看内容表,这个比较简单,每条内容一个索引,每天建一张表,其次看索引表,一共建了两级索引。首先想象一下用户场景,大部分用户刷微博的时候,看的是他关注所有人的微博,然后按时间来排序。仔细分析发现在这个场景下, 跟一个用户的自己的相关性很小了。所以在一级索引的时候会先根据关注的用户,取他们的前条微博ID,然后聚合排序。我们在做哈希(分库分表)的时候,同时考虑了按照UID哈希和按照时间维度。很业务和时间相关性很高的,今天的热点新闻,明天就没热度了,数据的冷热非常明显,这种场景就需要按照时间维度做分表,首先冷热数据做了分离(可以对冷热数据采用不同的存储方案来降低成本),其次, 很容止控制我数据库表的爆炸。像微博如果只按照用户维度区分,那么这个用户所有数据都在一张表里,这张表就是无限增长的,时间长了查询会越来越慢。二级索引,是我们里面一个比较特殊的场景,就是我要快速找到这个人所要发布的某一时段的微博时,通过二级索引快速定位。 分布式服务追踪系统 分布式追踪服务系统,当系统到千万级以后的时候,越来越庞杂,所解决的问题更偏向稳定性,性能和监控。刚才说用户只要有一个请求过来,你可以依赖你的服务RPC1、RPC2,你会发现RPC2又依赖RPC3、RPC4。分布式服务的时候一个痛点,就是说一个请求从用户过来之后,在后台不同的机器之间不停的调用并返回。 当你发现一个问题的时候,这些日志落在不同的机器上,你也不知道问题到底出在哪儿,各个服务之间互相隔离,互相之间没有建立关联。所以导致排查问题基本没有任何手段,就是出了问题没法儿解决。 我们要解决的问题,我们刚才说日志互相隔离,我们就要把它建立联系。建立联系我们就有一个请求ID,然后结合RPC框架, 服务治理功能。假设请求从客户端过来,其中包含一个ID 101,到服务A时仍然带有ID 101,然后调用RPC1的时候也会标识这是101 ,所以需要 一个唯一的 请求 ID 标识 递归迭代的传递到每一个 相关 节点。第二个,你做的时候,你不能说每个地方都加,对业务系统来说需要一个框架来完成这个工作, 这 个框架要 对业务 系 统 是最低侵入原 则 , 用 JAVA 的 话 就可以用 AOP,要做到零侵入的原则,就是对所有相关的中间件打点,从接口层组件(HTTP Client、HTTP Server)至到服务层组件(RPC Client、RPC Server),还有数据访问中间件的,这样业务系统只需要少量的配置信息就可以实现全链路监控 。为什么要用日志?服务化以后,每个服务可以用不同的开发语言, 考虑多种开发语言的兼容性 , 内部定 义标 准化的日志 是唯一且有效的办法。最后,如何构建基于GPS导航的路况监控?我们刚才讲分布式服务追踪。分布式服务追踪能解决的问题, 如果 单一用 户发现问题 后 , 可以通 过请 求 ID 快速找到 发 生 问题 的 节 点在什么,但是并没有解决如何发现问题。我们看现实中比较容易理解的道路监控,每辆车有GPS定位,我想看北京哪儿拥堵的时候,怎么做? 第一个 , 你肯定要知道每个 车 在什么位置,它走到哪儿了。其实可以说每个车上只要有一个标识,加上每一次流动的信息,就可以看到每个车流的位置和方向。 其次如何做 监 控和 报 警,我们怎么能了解道路的流量状况和负载,并及时报警。我们要定义这条街道多宽多高,单位时间可以通行多少辆车,这就是道路的容量。有了道路容量,再有道路的实时流量,我们就可以基于实习路况做预警? 对应于 分布式系 统 的话如何构建? 第一 , 你要 定义 每个服 务节 点它的 SLA A 是多少 ?SLA可以从系统的CPU占用率、内存占用率、磁盘占用率、QPS请求数等来定义,相当于定义系统的容量。 第二个 , 统计 线 上 动态 的流量,你要知道服务的平均QPS、最低QPS和最大QPS,有了流量和容量,就可以对系统做全面的监控和报警。 刚才讲的是理论,实际情况肯定比这个复杂。微博在春节的时候做许多活动,必须保障系统稳定,理论上你只要定义容量和流量就可以。但实际远远不行,为什么?有技术的因素,有人为的因素,因为不同的开发定义的流量和容量指标有主观性,很难全局量化标准,所以真正流量来了以后,你预先评估的系统瓶颈往往不正确。实际中我们在春节前主要采取了三个措施:第一,最简单的就是有降 级 的 预 案,流量超过系统容量后,先把哪些功能砍掉,需要有明确的优先级 。第二个, 线上全链路压测,就是把现在的流量放大到我们平常流量的五倍甚至十倍(比如下线一半的服务器,缩容而不是扩容),看看系统瓶颈最先发生在哪里。我们之前有一些例子,推测系统数据库会先出现瓶颈,但是实测发现是前端的程序先遇到瓶颈。第三,搭建在线 Docker 集群 , 所有业务共享备用的 Docker集群资源,这样可以极大的避免每个业务都预留资源,但是实际上流量没有增长造成的浪费。 总结 接下来说的是如何不停的学习和提升,这里以Java语言为例,首先, 一定要 理解 JAVA;第二步,JAVA完了以后,一定要 理 解 JVM;其次,还要 理解 操作系统;再次还是要了解一下 Design Pattern,这将告诉你怎么把过去的经验抽象沉淀供将来借鉴;还要学习 TCP/IP、 分布式系 统、数据结构和算法。
hiekay 2019-12-02 01:39:25 0 浏览量 回答数 0

问题

剖析短视频分发过程中的用户体验优化技术点

深圳云栖大会已经圆满落幕,在3月29日飞天技术汇-弹性计算、网络和CDN专场中,阿里云CDN高级技术专家周哲为我们带来了《海量短视频极速分发》的主题分享,带领我们从视频内容采集、上传、存储和分发的角...
樰篱 2019-12-01 21:50:09 2644 浏览量 回答数 0

回答

计算机科学与技术专业课程 课程简介 1.数字逻辑电路: “数字逻辑”是计算机专业本科生的一门主要课程,具有自身的理论体系和很强的实践性。它是计算机组成原理的主要先导课程之一,是计算机应用专业关于计算机系统结构方面的主干课程之一。 课程的主要目的是使学生了解和掌握从对数字系统提出要求开始,一直到用集成电路实现所需逻辑功能为止的整个过程的完整知识。内容有数制和编码、布尔代数和逻辑函数、组合逻辑电路的分析和设计,时序逻辑电路的分析和设计,中、大规模集成电路的应用。通过对该课程的学习,可以为计算机组成原理、微型计算机技术、计算机系统结构等课程打下坚实的基础。 2.计算机组成原理: 本课程是计算机系本科生的一门重要专业基础课。在各门硬件课程中占有举足轻重的地位。它的先修课程是《数字逻辑电路》,后继课程有《微机接口技术》、《计算机系统结构》。从课程地位来说,本课程在先修课和后继课中起着承上启下的作用。主要讲解计算机五大部件的组成及工作原理,逻辑设计与实现方法,整机的互连技术,培养学生具有初步的硬件系统分析、设计、开发和使用的能力。具体内容包括:数制与码制、基本逻辑部件、运算方法与运算器、指令系统与寻址方式,中央处理器(CPU)的工作原理及设计方法。存储系统和输入/输出(I/O)系统等。通过该课程的学习,可以使学生较深地掌握单台计算机的组成及工作原理,进一步加深对先修课程的综合理解及灵活应用,为后继课程的学习建立坚实的基础知识。 3.微机接口技术: 本课程是计算机科学与技术专业学生必修的核心课程之一,它的先修课程为数字逻辑、计算机组成原理。本课程对于训练学生掌握硬件接口设计技术,熟悉微处理器和各种接口芯片的硬件设计和软件调试技术都有重要作用,在软件方面要求掌握汇编语言,在硬件方面要掌握中断、DMA、计数器/定时器等设计技术。通过该课程的学习使学生学会微机接口设计的基本方法和技能。 4.计算机系统结构: 计算机系统结构主要是研究高性能计算机组织与结构的课程。主要包括:计算机系统结构的基本概念、指令的流水处理与向量计算机、高性能微处理器技术、并行处理机结构及算法和多处理机技术。结合现代计算机系统结构的新发展,介绍近几年来计算机系统结构所出现的一些新概念和新技术。 5.数据库概论: 数据库已是计算机系本科生不可缺少的专业基础课,它是计算机应用的重要支柱之一。该课程讲授数据库技术的特点,数据库系统的结构,三种典型数据模型及系统(以关系型系统为主)、数据库规范化理论,数据库的设计与管理,以及数据库技术的新进展等。通过本课程学习,掌握基本概念、理论和方法,学会使用数据库管理系统设计和建立数据库的初步能力,为以后实现一个数据库管理系统及进行系统的理论研究打下基础。 6.算法与数据结构: “数据结构”是计算机程序设计的重要理论技术基础,是计算机科学与技术专业的必修课,是计算机学科其它专业课的先修课程。通过学习本课程使学生掌握数据结构的基本逻辑结构和存储结构及其基本算法的设计方法,并在实际应用中能灵活使用。学会分析研究数据对象的特性,选择合适的逻辑结构、存储结构及设计相应的算法。初步掌握算法的时空分析技巧,同时进行程序设计训练。使学生学会应用抽象数据类型概念进行抽象设计。主要内容有:线性表、链表、栈、队列、数组、广义表、树与二叉树、图、查找、排序、内存管理、文件存储管理。 7.离散数学: “离散数学”是计算机科学与技术专业必修课程,其主要内容包括:命题逻辑;一阶命题逻辑;集合、关系与映射;代数系统、布尔代数 ;图论等。这些内容为学习计算机专业课程,如编译原理、数据结构提供重要的理论工具,同时也是计算机应用不可缺少的理论基础。 离散数学主要培养学生对事物的抽象思维能力和逻辑推理能力,为今后处理离散信息,从事计算机软件的开发和设计,以及计算机的其它实际应用打好数学基础。 8.操作系统: 操作系统是现代计算机系统中不可缺少的重要组成部分。它的先修课程是数据结构和计算机基础,在此基础上讲解操作系统的主要内容:CPU管理、存储器管理、作业管理、I/O设备管理和文件管理。这些基本原理告诉人们作为计算机系统中各种资源的管理者和各种活动的组织者、指挥者,操作系统是如何使整个计算机系统有条不率地高效工作,以及它为用户使用计算机系统提供了哪些便利手段。掌握了这些知识,人们就会对计算机系统的总体框架、工作流程和使用方法有了一个全面的认识,就会清楚后续专业课程所述内容在计算机系统中所处的地位和作用,这样不仅便于理解后续课程内容,而且能使人们把计算机的各部分知识有机地联系起来。此外,由于多处理机系统和计算机网络的盛行,本课程中也包含了对多处理机操作系统和网络操作系统的概述,从而使学习者可以跟上计算机技术的发展速度。 9.数据通信与计算机网: 该课程主要介绍网络基本理论和网络最新实用技术,分基础理论、实用技术和新技术三部分进行讲述。主要讲解计算机网络的功能和组成,数据传输,链路控制,多路复用,差错检测,网络体系结构,网络分层协议及局域网、广域网等。要求学生掌握数据通信的基本原理和计算机网络的体系结构,打下坚实的理论基础,培养实际应用的能力,为今后从事计算机网络的科研和设计工作打下基础。 10.高级语言程序设计: 本课程介绍了C与C++的全集。它从语法入手,同时强调程序设计的基本方法,以使学生能在较短的时间内,掌握C语言的结构化程序设计方法与C++语言的面向对象程序设计方法。主要内容有:1、过程初步;2、过程组织和管理;3、C++的数据类型;4、类与对象;5、继承;6、I/O流。 11.软件工程: 软件工程课程是计算机专业的一门主要专业课程,是培养高水平软件研制和开发人员的一门重程。该课程主要介绍软件工程的概念、原理及典型的方法技术,进述软件生存周期各阶段的任务、过程、方法和工具,讨论了软件工程使用的科学管理技术。 12.数据库应用: 通过实践方式使学生进一步掌握数据库知识和技术,掌握C/S(客户/服务)模式下的大型数据库的设计与实现,培养同行间的合作精神,学习应用合作方法。 13.软件编程实践: 主要介绍最新的常规的软件编程平台、工具和方法。本课程面向应用技术和实用技术,培养学生自学新技术的能力,在WINDOWS下的综合编程能力,实际解决问题能力。 14.计算机网络工程: 计算机技术与通信技术相结合导致了计算机网络的产生。计算机网络已成为当今大型信息系统的基础。-------------------------高等数学、大学英语、概率统计、离散数学、电路、模拟电子、数字电子、数据结构、操作系统、编译原理、计算机网络、数据库原理、软件工程、汇编语言、C++程序设计、接口技术、Java、VC++、计算机病毒分析、信息安全、等。 高数学的是微积分,线性代数,概率论与数理统计。英语是大学英语上下。还有就是专业的计算机知识,数据分析,c语言,java,还有计算机的系统分析,各种软件技术,学会写代码,程序等。
琴瑟 2019-12-02 01:22:34 0 浏览量 回答数 0

问题

【前沿对话】如何看待国产操作系统UOS?体验如何?

【前沿对话】如何看待国产操作系统UOS?体验如何? 统一操作系统官网正式发布了 UOS v20,这是统一操作系统 v20 系列的首个正式版本。 UOS 是一个基于 Linux 内核的操作系统...
问问小秘 2020-01-17 10:46:49 1108 浏览量 回答数 5

回答

Kafka 是目前主流的分布式消息引擎及流处理平台,经常用做企业的消息总线、实时数据管道,本文挑选了 Kafka 的几个核心话题,帮助大家快速掌握 Kafka,包括: Kafka 体系架构 Kafka 消息发送机制 Kafka 副本机制 Kafka 控制器 Kafka Rebalance 机制 因为涉及内容较多,本文尽量做到深入浅出,全面的介绍 Kafka 原理及核心组件,不怕你不懂 Kafka。 1. Kafka 快速入门 Kafka 是一个分布式消息引擎与流处理平台,经常用做企业的消息总线、实时数据管道,有的还把它当做存储系统来使用。早期 Kafka 的定位是一个高吞吐的分布式消息系统,目前则演变成了一个成熟的分布式消息引擎,以及流处理平台。 1.1 Kafka 体系架构 Kafka 的设计遵循生产者消费者模式,生产者发送消息到 broker 中某一个 topic 的具体分区里,消费者从一个或多个分区中拉取数据进行消费。拓扑图如下: 目前,Kafka 依靠 Zookeeper 做分布式协调服务,负责存储和管理 Kafka 集群中的元数据信息,包括集群中的 broker 信息、topic 信息、topic 的分区与副本信息等。 ** 1.2 Kafka 术语** 这里整理了 Kafka 的一些关键术语: Producer:生产者,消息产生和发送端。 Broker:Kafka 实例,多个 broker 组成一个 Kafka 集群,通常一台机器部署一个 Kafka 实例,一个实例挂了不影响其他实例。 Consumer:消费者,拉取消息进行消费。 一个 topic 可以让若干个消费者进行消费,若干个消费者组成一个 Consumer Group 即消费组,一条消息只能被消费组中一个 Consumer 消费。 Topic:主题,服务端消息的逻辑存储单元。一个 topic 通常包含若干个 Partition 分区。 Partition:topic 的分区,分布式存储在各个 broker 中, 实现发布与订阅的负载均衡。若干个分区可以被若干个 Consumer 同时消费,达到消费者高吞吐量。一个分区拥有多个副本(Replica),这是Kafka在可靠性和可用性方面的设计,后面会重点介绍。 message:消息,或称日志消息,是 Kafka 服务端实际存储的数据,每一条消息都由一个 key、一个 value 以及消息时间戳 timestamp 组成。 offset:偏移量,分区中的消息位置,由 Kafka 自身维护,Consumer 消费时也要保存一份 offset 以维护消费过的消息位置。 1.3 Kafka 作用与特点 Kafka 主要起到削峰填谷(缓冲)、系统解构以及冗余的作用,主要特点有: 高吞吐、低延时:这是 Kafka 显著的特点,Kafka 能够达到百万级的消息吞吐量,延迟可达毫秒级; 持久化存储:Kafka 的消息最终持久化保存在磁盘之上,提供了顺序读写以保证性能,并且通过 Kafka 的副本机制提高了数据可靠性。 分布式可扩展:Kafka 的数据是分布式存储在不同 broker 节点的,以 topic 组织数据并且按 partition 进行分布式存储,整体的扩展性都非常好。 高容错性:集群中任意一个 broker 节点宕机,Kafka 仍能对外提供服务。 2. Kafka 消息发送机制 Kafka 生产端发送消息的机制非常重要,这也是 Kafka 高吞吐的基础,生产端的基本流程如下图所示: 主要有以下方面的设计: 2.1 异步发送 Kafka 自从 0.8.2 版本就引入了新版本 Producer API,新版 Producer 完全是采用异步方式发送消息。生产端构建的 ProducerRecord 先是经过 keySerializer、valueSerializer 序列化后,再是经过 Partition 分区器处理,决定消息落到 topic 具体某个分区中,最后把消息发送到客户端的消息缓冲池 accumulator 中,交由一个叫作 Sender 的线程发送到 broker 端。 这里缓冲池 accumulator 的最大大小由参数 buffer.memory 控制,默认是 32M,当生产消息的速度过快导致 buffer 满了的时候,将阻塞 max.block.ms 时间,超时抛异常,所以 buffer 的大小可以根据实际的业务情况进行适当调整。 2.2 批量发送 发送到缓冲 buffer 中消息将会被分为一个一个的 batch,分批次的发送到 broker 端,批次大小由参数 batch.size 控制,默认16KB。这就意味着正常情况下消息会攒够 16KB 时才会批量发送到 broker 端,所以一般减小 batch 大小有利于降低消息延时,增加 batch 大小有利于提升吞吐量。 那么生成端消息是不是必须要达到一个 batch 大小时,才会批量发送到服务端呢?答案是否定的,Kafka 生产端提供了另一个重要参数 linger.ms,该参数控制了 batch 最大的空闲时间,超过该时间的 batch 也会被发送到 broker 端。 2.3 消息重试 此外,Kafka 生产端支持重试机制,对于某些原因导致消息发送失败的,比如网络抖动,开启重试后 Producer 会尝试再次发送消息。该功能由参数 retries 控制,参数含义代表重试次数,默认值为 0 表示不重试,建议设置大于 0 比如 3。 3. Kafka 副本机制 前面提及了 Kafka 分区副本(Replica)的概念,副本机制也称 Replication 机制是 Kafka 实现高可靠、高可用的基础。Kafka 中有 leader 和 follower 两类副本。 3.1 Kafka 副本作用 Kafka 默认只会给分区设置一个副本,由 broker 端参数 default.replication.factor 控制,默认值为 1,通常我们会修改该默认值,或者命令行创建 topic 时指定 replication-factor 参数,生产建议设置 3 副本。副本作用主要有两方面: 消息冗余存储,提高 Kafka 数据的可靠性; 提高 Kafka 服务的可用性,follower 副本能够在 leader 副本挂掉或者 broker 宕机的时候参与 leader 选举,继续对外提供读写服务。 3.2 关于读写分离 这里要说明的是 Kafka 并不支持读写分区,生产消费端所有的读写请求都是由 leader 副本处理的,follower 副本的主要工作就是从 leader 副本处异步拉取消息,进行消息数据的同步,并不对外提供读写服务。 Kafka 之所以这样设计,主要是为了保证读写一致性,因为副本同步是一个异步的过程,如果当 follower 副本还没完全和 leader 同步时,从 follower 副本读取数据可能会读不到最新的消息。 3.3 ISR 副本集合 Kafka 为了维护分区副本的同步,引入 ISR(In-Sync Replicas)副本集合的概念,ISR 是分区中正在与 leader 副本进行同步的 replica 列表,且必定包含 leader 副本。 ISR 列表是持久化在 Zookeeper 中的,任何在 ISR 列表中的副本都有资格参与 leader 选举。 ISR 列表是动态变化的,并不是所有的分区副本都在 ISR 列表中,哪些副本会被包含在 ISR 列表中呢?副本被包含在 ISR 列表中的条件是由参数 replica.lag.time.max.ms 控制的,参数含义是副本同步落后于 leader 的最大时间间隔,默认10s,意思就是说如果某一 follower 副本中的消息比 leader 延时超过10s,就会被从 ISR 中排除。Kafka 之所以这样设计,主要是为了减少消息丢失,只有与 leader 副本进行实时同步的 follower 副本才有资格参与 leader 选举,这里指相对实时。 3.4 Unclean leader 选举 既然 ISR 是动态变化的,所以 ISR 列表就有为空的时候,ISR 为空说明 leader 副本也“挂掉”了,此时 Kafka 就要重新选举出新的 leader。但 ISR 为空,怎么进行 leader 选举呢? Kafka 把不在 ISR 列表中的存活副本称为“非同步副本”,这些副本中的消息远远落后于 leader,如果选举这种副本作为 leader 的话就可能造成数据丢失。Kafka broker 端提供了一个参数 unclean.leader.election.enable,用于控制是否允许非同步副本参与 leader 选举;如果开启,则当 ISR 为空时就会从这些副本中选举新的 leader,这个过程称为 Unclean leader 选举。 前面也提及了,如果开启 Unclean leader 选举,可能会造成数据丢失,但保证了始终有一个 leader 副本对外提供服务;如果禁用 Unclean leader 选举,就会避免数据丢失,但这时分区就会不可用。这就是典型的 CAP 理论,即一个系统不可能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)中的两个。所以在这个问题上,Kafka 赋予了我们选择 C 或 A 的权利。 我们可以根据实际的业务场景选择是否开启 Unclean leader选举,这里建议关闭 Unclean leader 选举,因为通常数据的一致性要比可用性重要的多。 4. Kafka 控制器 控制器(Controller)是 Kafka 的核心组件,它的主要作用是在 Zookeeper 的帮助下管理和协调整个 Kafka 集群。集群中任意一个 broker 都能充当控制器的角色,但在运行过程中,只能有一个 broker 成为控制器。 这里先介绍下 Zookeeper,因为控制器的产生依赖于 Zookeeper 的 ZNode 模型和 Watcher 机制。Zookeeper 的数据模型是类似 Unix 操作系统的 ZNode Tree 即 ZNode 树,ZNode 是 Zookeeper 中的数据节点,是 Zookeeper 存储数据的最小单元,每个 ZNode 可以保存数据,也可以挂载子节点,根节点是 /。基本的拓扑图如下: Zookeeper 有两类 ZNode 节点,分别是持久性节点和临时节点。持久性节点是指客户端与 Zookeeper 断开会话后,该节点依旧存在,直到执行删除操作才会清除节点。临时节点的生命周期是和客户端的会话绑定在一起,客户端与 Zookeeper 断开会话后,临时节点就会被自动删除。 Watcher 机制是 Zookeeper 非常重要的特性,它可以在 ZNode 节点上绑定监听事件,比如可以监听节点数据变更、节点删除、子节点状态变更等事件,通过这个事件机制,可以基于 ZooKeeper 实现分布式锁、集群管理等功能。 4.1 控制器选举 当集群中的任意 broker 启动时,都会尝试去 Zookeeper 中创建 /controller 节点,第一个成功创建 /controller 节点的 broker 则会被指定为控制器,其他 broker 则会监听该节点的变化。当运行中的控制器突然宕机或意外终止时,其他 broker 能够快速地感知到,然后再次尝试创建 /controller 节点,创建成功的 broker 会成为新的控制器。 4.2 控制器功能 前面我们也说了,控制器主要作用是管理和协调 Kafka 集群,那么 Kafka 控制器都做了哪些事情呢,具体如下: 主题管理:创建、删除 topic,以及增加 topic 分区等操作都是由控制器执行。 分区重分配:执行 Kafka 的 reassign 脚本对 topic 分区重分配的操作,也是由控制器实现。 Preferred leader 选举:这里有一个概念叫 Preferred replica 即优先副本,表示的是分配副本中的第一个副本。Preferred leader 选举就是指 Kafka 在某些情况下出现 leader 负载不均衡时,会选择 preferred 副本作为新 leader 的一种方案。这也是控制器的职责范围。 集群成员管理:控制器能够监控新 broker 的增加,broker 的主动关闭与被动宕机,进而做其他工作。这里也是利用前面所说的 Zookeeper 的 ZNode 模型和 Watcher 机制,控制器会监听 Zookeeper 中 /brokers/ids 下临时节点的变化。 数据服务:控制器上保存了最全的集群元数据信息,其他所有 broker 会定期接收控制器发来的元数据更新请求,从而更新其内存中的缓存数据。 从上面内容我们大概知道,控制器可以说是 Kafka 的心脏,管理和协调着整个 Kafka 集群,因此控制器自身的性能和稳定性就变得至关重要。 社区在这方面做了大量工作,特别是在 0.11 版本中对控制器进行了重构,其中最大的改进把控制器内部多线程的设计改成了单线程加事件队列的方案,消除了多线程的资源消耗和线程安全问题,另外一个改进是把之前同步操作 Zookeeper 改为了异步操作,消除了 Zookeeper 端的性能瓶颈,大大提升了控制器的稳定性。 5. Kafka 消费端 Rebalance 机制 前面介绍消费者术语时,提到了消费组的概念,一个 topic 可以让若干个消费者进行消费,若干个消费者组成一个 Consumer Group 即消费组 ,一条消息只能被消费组中的一个消费者进行消费。我们用下图表示Kafka的消费模型。 5.1 Rebalance 概念 就 Kafka 消费端而言,有一个难以避免的问题就是消费者的重平衡即 Rebalance。Rebalance 是让一个消费组的所有消费者就如何消费订阅 topic 的所有分区达成共识的过程,在 Rebalance 过程中,所有 Consumer 实例都会停止消费,等待 Rebalance 的完成。因为要停止消费等待重平衡完成,因此 Rebalance 会严重影响消费端的 TPS,是应当尽量避免的。 5.2 Rebalance 发生条件 关于何时会发生 Rebalance,总结起来有三种情况: 消费组的消费者成员数量发生变化 消费主题的数量发生变化 消费主题的分区数量发生变化 其中后两种情况一般是计划内的,比如为了提高消息吞吐量增加 topic 分区数,这些情况一般是不可避免的,后面我们会重点讨论如何避免因为组内消费者成员数发生变化导致的 Rebalance。 5.3 Kafka 协调器 在介绍如何避免 Rebalance 问题之前,先来认识下 Kafka 的协调器 Coordinator,和之前 Kafka 控制器类似,Coordinator 也是 Kafka 的核心组件。 主要有两类 Kafka 协调器: 组协调器(Group Coordinator) 消费者协调器(Consumer Coordinator) Kafka 为了更好的实现消费组成员管理、位移管理,以及 Rebalance 等,broker 服务端引入了组协调器(Group Coordinator),消费端引入了消费者协调器(Consumer Coordinator)。每个 broker 启动的时候,都会创建一个 GroupCoordinator 实例,负责消费组注册、消费者成员记录、offset 等元数据操作,这里也可以看出每个 broker 都有自己的 Coordinator 组件。另外,每个 Consumer 实例化时,同时会创建一个 ConsumerCoordinator 实例,负责消费组下各个消费者和服务端组协调器之前的通信。可以用下图表示协调器原理: 客户端的消费者协调器 Consumer Coordinator 和服务端的组协调器 Group Coordinator 会通过心跳不断保持通信。 5.4 如何避免消费组 Rebalance 接下来我们讨论下如何避免组内消费者成员发生变化导致的 Rebalance。组内成员发生变化无非就两种情况,一种是有新的消费者加入,通常是我们为了提高消费速度增加了消费者数量,比如增加了消费线程或者多部署了一份消费程序,这种情况可以认为是正常的;另一种是有消费者退出,这种情况多是和我们消费端代码有关,是我们要重点避免的。 正常情况下,每个消费者都会定期向组协调器 Group Coordinator 发送心跳,表明自己还在存活,如果消费者不能及时的发送心跳,组协调器会认为该消费者已经“死”了,就会导致消费者离组引发 Rebalance 问题。这里涉及两个消费端参数:session.timeout.ms 和 heartbeat.interval.ms,含义分别是组协调器认为消费组存活的期限,和消费者发送心跳的时间间隔,其中 heartbeat.interval.ms 默认值是3s,session.timeout.ms 在 0.10.1 版本之前默认 30s,之后默认 10s。另外,0.10.1 版本还有两个值得注意的地方: 从该版本开始,Kafka 维护了单独的心跳线程,之前版本中 Kafka 是使用业务主线程发送的心跳。 增加了一个重要的参数 max.poll.interval.ms,表示 Consumer 两次调用 poll 方法拉取数据的最大时间间隔,默认值 5min,对于那些忙于业务逻辑处理导致超过 max.poll.interval.ms 时间的消费者将会离开消费组,此时将发生一次 Rebalance。 此外,如果 Consumer 端频繁 FullGC 也可能会导致消费端长时间停顿,从而引发 Rebalance。因此,我们总结如何避免消费组 Rebalance 问题,主要从以下几方面入手: 合理配置 session.timeout.ms 和 heartbeat.interval.ms,建议 0.10.1 之前适当调大 session 超时时间尽量规避 Rebalance。 根据实际业务调整 max.poll.interval.ms,通常建议调大避免 Rebalance,但注意 0.10.1 版本之前没有该参数。 监控消费端的 GC 情况,避免由于频繁 FullGC 导致线程长时间停顿引发 Rebalance。 合理调整以上参数,可以减少生产环境中 Rebalance 发生的几率,提升 Consumer 端的 TPS 和稳定性。 6.总结 本文总结了 Kafka 体系架构、Kafka 消息发送机制、副本机制,Kafka 控制器、消费端 Rebalance 机制等各方面核心原理,通过本文的介绍,相信你已经对 Kafka 的内核知识有了一定的掌握,更多的 Kafka 原理实践后面有时间再介绍。
剑曼红尘 2020-04-16 18:15:45 0 浏览量 回答数 0

问题

网站打开慢——你想知道原因吗?!

——“再好的网站,慢的像狗一样,用户也不鸟你。” 网站页面的响应时间往往很少受到 SEOer 们的关注,但这却是网站用户流失的直接原因之一。 在相当一部分的用户眼中,如果你的网...
doudou1 2019-12-01 21:48:22 9098 浏览量 回答数 1

问题

史上有哪些程序员实用工具网站?

目录 1、搜索引擎 2、PPT 3、图片操作 4、文件共享 5、应届生招聘 6、程序员面试题库 7、办公、开发软件 8、高清图片、视频素材网站  9、项目开源 10、算法 11、在线工具宝典大全 程序员开发需要具备良...
问问小秘 2020-03-14 23:11:50 4148 浏览量 回答数 2

问题

厉华:写一个开源容器引擎会是什么样的体验? 热:报错

2013年,Docker.Inc 开源了一款应用容器引擎 Docker。开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到相同内核的任何 Linux 机器上部署运行。这种集装箱式的应用开发和部署方...
kun坤 2020-06-10 10:01:12 3 浏览量 回答数 1

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:14 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:18 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:16 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:17 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:16 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:16 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:16 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:18 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:15 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 Q: ossfs适合什么样的程序? ossfs能把oss bucket挂载到本地,如果您使用的软件没有支持OSS,但您又想让数据能自动同步到OSS,那么ossfs是很好的选择。 Q: ossfs有什么局限性? 由于数据需要经过网络同步到云端,ossfs在性能和功能上可能与本地文件系统有差距。如果您想让数据库等对io要求很高的应用跑在ossfs挂载的盘上,请慎重考虑。和本地文件系统具体差异: 随机或者追加写文件会导致整个文件的重写。 元数据操作,例如list directory,性能较差,因为需要远程访问OSS服务器。 文件/文件夹的rename操作不是原子的。 多个客户端挂载同一个oss bucket时,依赖用户自行协调各个客户端的行为。例如避免多个客户端写同一个文件等等。 不支持hard link。 Q: ossfs一定要阿里云的机器才能用么? ossfs不限制一定要阿里云的内网才可以使用,外网机器依然可以使用。 Q: ossfs能不能同时挂载多个OSS bucket? 可以的,在passwd-ossfs文件中写入多个OSS配置信息即可。支持不同帐号的OSS。 Q: 我在yum/apt-get安装ossfs,遇到conflicts with file from package fuse-devel的错误,请问是怎么回事? 您的系统中存在老版本的fuse,请先使用相关的包管理器卸载,再重新安装ossfs。 Q: ossfs工作不正常,如何debug? 您可以使用在挂载时,加上-d -o f2参数,ossfs会把日志写入到系统日志中。在centos系统中,在/var/log/messages中。 您也可以在挂载时使用-f -d -o f2参数,ossfs会把日志输出到屏幕上。 Q: 为什么我在mount时遇到 ossfs: unable to access MOUNTPOINT /tmp/ossfs: Transport endpoint is not connected这样的错误? 请先umount对应的目录。 请检查您在使用ossfs挂载时,填入的url参数是否正确,是否和bucket/access key id/access key secret匹配。 特别注意:url中不包含bucket的名字。例如:您在oss控制台中看到bucket的域名是这样的:ossfs-test-1.oss-cn-hangzhou.aliyuncs.com。那么填入的url则是:http://oss-cn-hangzhou.aliyuncs.com。 Q: ossfs提示ossfs: unable to access MOUNTPOINT /tmp/odat: No such file or directory 这是您未创建该目录导致的,在挂载前需要创建对应目录。 Q: 我把bucket挂载到本地后,ls目录,却收到operation not permitted错误,这是为什么? 请检查您的bucket中,是否包含目录名含有不可见字符的OSS object。文件系统对文件/目录名有更严格的限制,因此会收到上述错误。使用其他工具对这些object重命名后,ls就能正确显示目录内容了。 Q: 我的一个目录下有非常多的文件,为什么ls该目录很慢? 假设一个目录下有n个文件,那么ls该目录至少需要n次OSS http requests。在文件非常多的时候,这可能造成严重的性能问题。 您可以采用下面两个办法优化: 通过-omax_stat_cache_size=xxx参数增大stat cache的size,这样第一次ls会较慢,但是后续的ls就快了,因为文件的元数据都在本地cache中。默认这个值是1000,大约消耗4MB内存,请根据您机器内存大小调整为合适的值。 使用ls -f命令,这个命令会消除与OSS的n次http请求。 具体参见issue 13。 Q: ossfs挂载时如何设置权限? 如果要允许其他用户访问挂载文件夹,可以在运行ossfs的时候指定allow_other参数: ossfs your_bucket your_mount_point -ourl=your_endpoint -o allow_other 为什么使用allow_other参数,仍然不能访问文件? 注意:allow_other是赋予挂载目录其他用户访问的权限,不是里面的文件!如果您要更改文件夹中的文件,请用chmod命令。 allow_other默认赋予挂载目录777权限,我想让挂载目录的权限为770,该怎么办? 可以通过umask来设置,参见这里。 Q: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user: 方法一: 如果要使挂载的文件夹(/tmp/ossfs)属于某个user,则需要以user的身份创建挂载文件夹和使用ossfs: sudo -u user mkdir /tmp/ossfs sudo -u user ossfs bucket-name /tmp/ossfs 方法二: 首先通过id命令获得指定用户的uid/gid信息。例如获取www用户的uid/gid信息:id www;然后挂载时指定uid/gid参数: ossfs your_bucket your_mountpoint -ourl=your_url -ouid=your_uid -ogid=your_gid 注意:uid/gid都是数字。 Q: 我不是root用户,如何umount ossfs挂载的目录 fusermount -u your_mountpoint Q: 如何开机自动挂载ossfs? Step 1 首先请参考使用说明,把bucket name,access key id/secret等信息写入/etc/passwd-ossfs,并将该文件权限修改为640。 echo your_bucket_name:your_access_key_id:your_access_key_secret > /etc/passwd-ossfs chmod 640 /etc/passwd-ossfs Step 2 接下来针对不同的系统版本,设置方式有所不同 Step 2A 通过fstab的方式自动mount(适用于ubuntu14.04, centos6.5) 在/etc/fstab中加入下面的命令 ossfs#your_bucket_name your_mount_point fuse _netdev,url=your_url,allow_other 0 0 其中上述命令中的your_xxx信息需要根据您的bucket name等信息填入。 保存/etc/fstab文件。执行mount -a命令,如果没有报错,则说明设置正常。 到这一步,ubuntu14.04就能自动挂载了。centos6.5还需要执行下面的命令: chkconfig netfs on Step 2B 通过开机自启动脚本mount(适用于centos7.0及以上的系统) 在/etc/init.d/目录下建立文件ossfs,把模板文件中的内容拷贝到这个新文件中。并将其中的your_xxx内容改成您自己的信息。 执行命令:chmod a+x /etc/init.d/ossfs 上述命令是把新建立的ossfs脚本赋予可执行权限。您可以执行该脚本,如果脚本文件内容无误,那么此时oss中的bucket已经挂载到您指定的目录下了。 执行命令:chkconfig ossfs on 上述命令是把ossfs启动脚本作为其他服务,开机自动启动。 好了,现在ossfs就可以开机自动挂载了。总结起来,如果您是ubuntu14.04和centos6.5,您需要执行Step 1 + Step 2A;如果您是centos7.0系统,您需要执行Step 1 + Step 2B。 Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令 Q: 我需要以www用户挂载ossfs,此时如何设置开机自动挂载? 参照上面的问题的解答,Step 1照做,对Step 2B稍加修改,修改/etc/init.d/ossfs中的命令为: sudo -u www ossfs your_bucket your_mountpoint -ourl=your_url 设置自启动脚本中允许使用sudo,编辑/etc/sudoers,将其中的Defaults requiretty这行改为#Defaults requiretty(注释掉) Q: 遇到fusermount: failed to open current directory: Permission denied错误如何解决? 这是fuse的一个bug,它要求当前用户对当前目录(非挂载目录)有读权限。解决的办法就是cd到一个有读权限的目录再运行ossfs命令。 Q: 使用ECS挂载ossfs,如何避免因后台程序扫描文件而产生费用? 程序扫描ossfs挂载的目录,会转换成向OSS的请求,如果请求次数很多,会产生费用(1分钱/1万次)。如果是updatedb,可以通过修改/etc/updatedb.conf让它跳过。具体做法是: 在PRUNEFS =后面加上fuse.ossfs 在PRUNEPATHS =后面加上挂载的目录 如何确定是哪个进程扫了我的目录? 首先安装auditd: sudo apt-get install auditd 启动auditd: sudo service auditd start 设置监视挂载目录: auditctl -w /mnt/ossfs 在auditlog中可以查看是哪些进程访问了这个目录:ausearch -i | grep /mnt/ossfs Q: 使用ossfs上传到OSS的文件Content-Type全是”application/octet-stream”是怎么回事? ossfs通过查询/etc/mime.types中的内容来确定文件的Content-Type,请检查这个文件是否存在,如果不存在,则需要添加: 对于ubuntu可以通过sudo apt-get install mime-support来添加 对于centos可以通过sudo yum install mailcap来添加 也可以手动添加,每种格式一行,每行格式为:application/javascript js Q: 如何使用supervisor启动ossfs? 安装supervisor,在ubuntu中执行sudo apt-get install supervisor 建立一个目录,编辑ossfs的启动脚本:mkdir /root/ossfs_scripts vi /root/ossfs_scripts/start_ossfs.sh写入如下数据:# 卸载 fusermount -u /mnt/ossfs # 重新挂载,必须要增加-f参数运行ossfs,让ossfs在前台运行 exec ossfs my-bucket my-mount-point -ourl=my-oss-endpoint -f 编辑/etc/supervisor/supervisord.conf,在最后加入下面一段:[program:ossfs] command=bash /root/ossfs_scripts/start_ossfs.sh logfile=/var/log/ossfs.log log_stdout=true log_stderr=true logfile_maxbytes=1MB logfile_backups=10 运行supervisor:supervisordsupervisord 确认一切正常:ps aux | grep supervisor # 应该能看到supervisor进程 ps aux | grep ossfs # 应该能看到ossfs进程 kill -9 ossfs # 杀掉ossfs进程,supervisor应该会重启它, 不要使用killall, 因为killall发送SIGTERM,进程正常退出,supervisor不再去重新运行ossfs ps aux | grep ossfs # 应该能看到ossfs进程如果出错,请检查/var/log/supervisor/supervisord.log和/var/log/ossfs.log。 Q: 遇到”fuse: warning: library too old, some operations may not work”怎么办? 出现的原因是:ossfs编译时所使用的libfuse版本 比运行时链接到的libfuse版本高。这往往是用户自行安装了libfuse导致的。使用我们提供的rpm包安装ossfs,无需再安装libfuse。 在CentOS-5.x和CentOS-6.x上我们提供的rpm包里包含了libfuse-2.8.4,如果在运行的时候环境中有libfuse-2.8.3,并且ossfs被链接到了旧版本的fuse上,就会出现上述warning。 如何确认ossfs运行时链接的fuse版本? 运行ldd $(which ossfs) | grep fuse 例如结果是”/lib64/libfuse.so.2”,那么通过ls -l /lib64/libfuse*可以看到fuse的版本 如何让ossfs链接到正确的版本? 首先通过rpm -ql ossfs | grep fuse找到libfuse的目录 例如结果是”/usr/lib/libfuse.so.2”,则通过LD_LIBRARY_PATH=/usr/lib ossfs …运行ossfs 我能忽略这个WARNING吗? 最好不要,见这个bug Q: 为什么用ossfs看到的文件信息(例如大小)与其他工具看到的不一致? 因为ossfs默认会缓存文件的元信息(包括大小/权限等),这样就不需要每次ls的时候向OSS发送请求,加快速度。 如果用户通过其他程序(例如SDK/官网控制台/osscmd等)对文件进行了修改,那么有可能在ossfs中看到的文件信息 没有及时更新。 如果想禁止ossfs的缓存,那么可以在挂载的时候加上如下参数:-omax_stat_cache_size=0
2019-12-01 23:15:17 0 浏览量 回答数 0
阿里云企业服务平台 陈四清的老板信息查询 上海奇点人才服务相关的云产品 爱迪商标注册信息 安徽华轩堂药业的公司信息查询 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 天籁阁商标注册信息 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 北京芙蓉天下的公司信息查询