• 关于

    允许中断不可用

    的搜索结果

回答

您描述的工作流程更好地匹配作业模型而不是普通(长期运行)Pod。您需要为指向其各自数据的每个任务创建单独的作业规范,如果您的群集正在执行其他工作,则需要注意您的批量数据处理窗格不会占用可用的计算资源。您是否实际拥有不同的NFS volume(服务器名称/导出的目录),或者只有一个NFS volume中的许多文件树?如果是后者,另一个可以很好地工作的路径是设置像RabbitMQ这样的排队系统,并将所有路径加载到队列中。然后,您将编写一个长时间运行的进程,该进程从队列中连续读取单个项目,对其执行任何所需的工作,写入其结果,提交工作项目并重复(在单个线程中)。然后,您可以使用部署扩展到所需的并行处理量。在任何情况下,您的输出表明您直接使用裸pod,并尝试通过在单个pod中包含许多并行工作容器来扩展工作者。最好使用其中一个更高级别的控制器(最常见的是部署)并使用其replicas:控件启动所描述的pod的多个副本。除此之外,这将允许您跨多个节点分散负载,并允许您进行滚动更新,其中pod被逐步重新启动,如果您更改底层映像或pod的其他详细信息,则可以避免中断。

k8s小能手 2019-12-02 01:52:50 0 浏览量 回答数 0

回答

OSS提供合规保留策略、同城冗余存储及版本控制等特性来保障OSS的数据安全性。 合规保留策略 OSS现已全面支持WORM(一次写入,多次读取)特性,允许用户以“不可删除、不可篡改”方式保存和使用数据。 OSS提供强合规策略,用户可针对存储空间(Bucket)设置基于时间的合规保留策略。当策略锁定后,用户可以在Bucket中上传和读取文件(Object),但是在Object的保留时间到期之前,任何用户都无法删除Object和策略。Object的保留时间到期后,才可以删除Object。OSS支持的WORM特性,适用于金融、保险、医疗、证券等行业。您可以基于OSS搭建“云上数据合规存储空间”。 有关合规保留策略的更多信息,请参考合规保留策略。 同城冗余存储 OSS采用多可用区(AZ)机制,将用户的数据分散存放在同一地域(Region)的3个可用区。当某个可用区不可用时,仍然能够保障数据的正常访问。OSS同城冗余存储(多可用区)是基于99.9999999999%(12个9)的数据可靠性设计,并且能够提供99.995%的数据设计可用性 。 OSS的同城冗余存储能够提供机房级容灾能力。当断网、断电或者发生灾难事件导致某个机房不可用时,仍然能够确保继续提供强一致性的服务能力,整个故障切换过程用户无感知,业务不中断、数据不丢失,可以满足关键业务系统对于“恢复时间目标(RTO)”以及“恢复点目标(RPO)”等于0的强需求。 有关同城冗余存储的更多信息,请参考同城冗余存储。 版本控制 开启存储空间(Bucket)版本控制特性后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。通过文件(Object)的版本管理,用户在错误覆盖或者删除Object后,能够将Bucket中存储的Object恢复至任意时刻的历史版本。 版本控制应用于Bucket内的所有Object。当第一次针对Bucket开启版本控制后,该Bucket中所有的Object将在之后一直受到版本控制,并且每个版本都具有唯一的版本ID。 Bucket开启版本控制后,针对文件的每次覆盖都会生成一个历史版本,并且针对每个版本进行收费。您可以通过生命周期规则自动删除过期版本。

剑曼红尘 2020-03-26 17:54:08 0 浏览量 回答数 0

回答

您可以根据业务需要,在您账号下的不同DDH之间迁移ECS实例,灵活部署业务。 前提条件 待迁移的ECS实例必须处于已停止状态。停止实例的具体操作,请参见停止实例。 注意 停止实例会中断您的业务,请谨慎操作。 目标DDH必须满足以下条件: 与待迁移ECS实例必须属于同一账号、同一地域和可用区。 可用资源足够分配给待迁移的ECS实例。查看DDH可用资源,请参见查看DDH资源。 支持待迁移的ECS实例规格。不同类型DDH支持的实例规格,请参见宿主机规格。 创建DDH,请参见创建DDH。 说明 本地型ECS实例不能迁移到本地SSD型DDH上。 与待迁移ECS实例的计费方式匹配。 包年包月DDH上能运行包年包月ECS实例或者按量付费ECS实例。如果待迁移ECS实例是包年包月实例,则实例的计费周期终点不得晚于目标DDH的计费周期终点。 操作步骤 登录ECS管理控制台。 在左侧导航栏,单击实例与镜像 > 实例。 在顶部状态栏左上角处,选择地域。 可选: 在实例列表页面,显示宿主机列。 在实例列表页面的右上角,单击配置图标。 在自定义列表项对话框中,选中宿主机,并单击确定。 您可以在实例列表页面看到宿主机列,方便您确认ECS实例是否属于某台DDH。 选中待迁移的ECS实例,在操作列,单击更多 > 实例设置 > 调整宿主机部署。 在调整宿主机部署页面,参见下表,完成配置。 参数 是否必填 说明 目标宿主机 是 选择ECS实例要迁入的DDH。 说明 若您账号下的DDH均不满足前提条件,则目标宿主机列表为空。DDH需满足的条件,请参见前提条件。 关联宿主机 否 选择ECS实例是否固定在要迁入的DDH上。 关联宿主机功能详情,请参见关联宿主机功能介绍。 是:ECS实例固定在要迁入的DDH上。实例停机并释放资源后,再次启动时,依然部署在该DDH上。若该DDH可用资源不足,则实例启动失败。 否:ECS实例不固定在要迁入的DDH上。实例停机并释放资源后,再次启动时,优先部署在该DDH上。若该DDH可用资源不足,则系统从允许自动部署的DDH中,自动选择DDH部署实例。 单击确定。 执行结果 刷新实例列表页面,迁移后ECS实例所对应的宿主机已更新为您指定的DDH,并且实例自动启动,最终进入运行中状态。

1934890530796658 2020-03-30 13:25:30 0 浏览量 回答数 0

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

参考:https://www.iteblog.com/archives/2530.html分布式和去中心化(Distributed and Decentralized)Cassandra 是分布式的,这意味着它可以运行在多台机器上,并呈现给用户一个一致的整体。事实上,在一个节点上运行 Cassandra 是没啥用的,虽然我们可以这么做,并且这可以帮助我们了解它的工作机制,但是你很快就会意识到,需要多个节点才能真正了解 Cassandra 的强大之处。它的很多设计和实现让系统不仅可以在多个节点上运行,更为多机架部署进行了优化,甚至一个 Cassandra 集群可以运行在分散于世界各地的数据中心上。你可以放心地将数据写到集群的任意一台机器上,Cassandra 都会收到数据。对于很多存储系统(比如 MySQL, Bigtable),一旦你开始扩展它,就需要把某些节点设为主节点,其他则作为从节点。但 Cassandra 是无中心的,也就是说每个节点都是一样的。与主从结构相反,Cassandra 的协议是 P2P 的,并使用 gossip 来维护存活或死亡节点的列表。关于 gossip 可以参见《分布式原理:一文了解 Gossip 协议》。去中心化这一事实意味着 Cassandra 不会存在单点失效。Cassandra 集群中的所有节点的功能都完全一样, 所以不存在一个特殊的主机作为主节点来承担协调任务。有时这被叫做服务器对称(server symmetry)。综上所述,Cassandra 是分布式、无中心的,它不会有单点失效,所以支持高可用性。弹性可扩展(Elastic Scalability)可扩展性是指系统架构可以让系统提供更多的服务而不降低使用性能的特性。仅仅通过给现有的机器增加硬件的容量、内存进行垂直扩展,是最简单的达到可扩展性的手段。而水平扩展则需要增加更多机器,每台机器提供全部或部分数据,这样所有主机都不必负担全部业务请求。但软件自己需要有内部机制来保证集群中节点间的数据同步。弹性可扩展是指水平扩展的特性,意即你的集群可以不间断的情况下,方便扩展或缩减服务的规模。这样,你就不需要重新启动进程,不必修改应用的查询,也无需自己手工重新均衡数据分布。在 Cassandra 里,你只要加入新的计算机,Cassandra 就会自动地发现它并让它开始工作。高可用和容错(High Availability and Fault Tolerance)从一般架构的角度来看,系统的可用性是由满足请求的能力来量度的。但计算机可能会有各种各样的故障,从硬件器件故障到网络中断都有可能。如何计算机都可能发生这些情况,所以它们一般都有硬件冗余,并在发生故障事件的情况下会自动响应并进行热切换。对一个需要高可用的系统,它必须由多台联网的计算机构成,并且运行于其上的软件也必须能够在集群条件下工作,有设备能够识别节点故障,并将发生故障的中端的功能在剩余系统上进行恢复。Cassandra 就是高可用的。你可以在不中断系统的情况下替换故障节点,还可以把数据分布到多个数据中心里,从而提供更好的本地访问性能,并且在某一数据中心发生火灾、洪水等不可抗灾难的时候防止系统彻底瘫痪。可调节的一致性(Tuneable Consistency)2000年,加州大学伯克利分校的 Eric Brewer 在 ACM 分布式计算原理会议提出了著名的 CAP 定律。CAP 定律表明,对于任意给定的系统,只能在一致性(Consistency)、可用性(Availability)以及分区容错性(Partition Tolerance)之间选择两个。关于 CAP 定律的详细介绍可参见《分布式系统一致性问题、CAP定律以及 BASE 理论》以及《一篇文章搞清楚什么是分布式系统 CAP 定理》。所以 Cassandra 在设计的时候也不得不考虑这些问题,因为分区容错性这个是每个分布式系统必须考虑的,所以只能在一致性和可用性之间做选择,而 Cassandra 的应用场景更多的是为了满足可用性,所以我们只能牺牲一致性了。但是根据 BASE 理论,我们其实可以通过牺牲强一致性获得可用性。Cassandra 提供了可调节的一致性,允许我们选定需要的一致性水平与可用性水平,在二者间找到平衡点。因为客户端可以控制在更新到达多少个副本之前,必须阻塞系统。这是通过设置副本因子(replication factor)来调节与之相对的一致性级别。通过副本因子(replication factor),你可以决定准备牺牲多少性能来换取一致性。 副本因子是你要求更新在集群中传播到的节点数(注意,更新包括所有增加、删除和更新操作)。客户端每次操作还必须设置一个一致性级别(consistency level)参数,这个参数决定了多少个副本写入成功才可以认定写操作是成功的,或者读取过程中读到多少个副本正确就可以认定是读成功的。这里 Cassandra 把决定一致性程度的权利留给了客户自己。所以,如果需要的话,你可以设定一致性级别和副本因子相等,从而达到一个较高的一致性水平,不过这样就必须付出同步阻塞操作的代价,只有所有节点都被更新完成才能成功返回一次更新。而实际上,Cassandra 一般都不会这么来用,原因显而易见(这样就丧失了可用性目标,影响性能,而且这不是你选择 Cassandra 的初衷)。而如果一个客户端设置一致性级别低于副本因子的话,即使有节点宕机了,仍然可以写成功。总体来说,Cassandra 更倾向于 CP,虽然它也可以通过调节一致性水平达到 AP;但是不推荐你这么设置。面向行(Row-Oriented)Cassandra 经常被看做是一种面向列(Column-Oriented)的数据库,这也并不算错。它的数据结构不是关系型的,而是一个多维稀疏哈希表。稀疏(Sparse)意味着任何一行都可能会有一列或者几列,但每行都不一定(像关系模型那样)和其他行有一样的列。每行都有一个唯一的键值,用于进行数据访问。所以,更确切地说,应该把 Cassandra 看做是一个有索引的、面向行的存储系统。Cassandra 的数据存储结构基本可以看做是一个多维哈希表。这意味着你不必事先精确地决定你的具体数据结构或是你的记录应该包含哪些具体字段。这特别适合处于草创阶段,还在不断增加或修改服务特性的应用。而且也特别适合应用在敏捷开发项目中,不必进行长达数月的预先分析。对于使用 Cassandra 的应用,如果业务发生变化了,只需要在运行中增加或删除某些字段就行了,不会造成服务中断。当然, 这不是说你不需要考虑数据。相反,Cassandra 需要你换个角度看数据。在 RDBMS 里, 你得首先设计一个完整的数据模型, 然后考虑查询方式, 而在 Cassandra 里,你可以首先思考如何查询数据,然后提供这些数据就可以了。灵活的模式(Flexible Schema)Cassandra 的早期版本支持无模式(schema-free)数据模型,可以动态定义新的列。 无模式数据库(如 Bigtable 和 MongoDB)在访问大量数据时具有高度可扩展性和高性能的优势。 无模式数据库的主要缺点是难以确定数据的含义和格式,这限制了执行复杂查询的能力。为了解决这些问题,Cassandra 引入了 Cassandra Query Language(CQL),它提供了一种通过类似于结构化查询语言(SQL)的语法来定义模式。 最初,CQL 是作为 Cassandra 的另一个接口,并且基于 Apache Thrift 项目提供无模式的接口。 在这个过渡阶段,术语“模式可选”(Schema-optional)用于描述数据模型,我们可以使用 CQL 的模式来定义。并且可以通过 Thrift API 实现动态扩展以此添加新的列。 在此期间,基础数据存储模型是基于 Bigtable 的。从 3.0 版本开始,不推荐使用基于 Thrift API 的动态列创建的 API,并且 Cassandra 底层存储已经重新实现了,以更紧密地与 CQL 保持一致。 Cassandra 并没有完全限制动态扩展架构的能力,但它的工作方式却截然不同。 CQL 集合(比如 list、set、尤其是 map)提供了在无结构化的格式里面添加内容的能力,从而能扩展现有的模式。CQL 还提供了改变列的类型的能力,以支持 JSON 格式的文本的存储。因此,描述 Cassandra 当前状态的最佳方式可能是它支持灵活的模式。高性能(High Performance)Cassandra 在设计之初就特别考虑了要充分利用多处理器和多核计算机的性能,并考虑在分布于多个数据中心的大量这类服务器上运行。它可以一致而且无缝地扩展到数百台机器,存储数 TB 的数据。Cassandra 已经显示出了高负载下的良好表现,在一个非常普通的工作站上,Cassandra 也可以提供非常高的写吞吐量。而如果你增加更多的服务器,你还可以继续保持 Cassandra 所有的特性而无需牺牲性能。

封神 2019-12-02 02:00:50 0 浏览量 回答数 0

回答

您可以根据业务需要,将共享宿主机上的ECS实例迁移到指定DDH上,灵活部署业务。 前提条件 待迁移的ECS实例必须处于已停止状态。停止实例的具体操作,请参见停止实例。 注意 停止实例会中断您的业务,请谨慎操作。 您至少拥有1台DDH,并且该DDH必须满足以下条件: 与待迁移ECS实例必须属于同一账号、同一地域和可用区。 可用资源足够分配给待迁移的ECS实例。查看DDH可用资源,请参见查看DDH资源。 支持待迁移的ECS实例规格。不同类型DDH支持的实例规格,请参见宿主机规格。 创建DDH,请参见创建DDH。 说明 本地型ECS实例不能迁移到本地SSD型DDH上。 背景信息 迁移ECS实例之前,请阅读以下注意事项: 将ECS实例从共享宿主机迁移至专有宿主机时,实例的计费方式只能是按量付费,不支持抢占式实例。包年包月实例需先转成按量付费实例,详情请参见包年包月转按量付费。 按量付费ECS实例可以迁移到包年包月专有宿主机上。 操作步骤 登录ECS管理控制台。 在左侧导航栏,单击实例与镜像 > 实例。 在顶部状态栏左上角处,选择地域。 可选: 在实例列表中,显示宿主机列。 在实例列表页面的右上角,单击自定义配置项图标。 在自定义列表项对话框中,选中宿主机,并单击确定。 您可以在实例列表页面看到宿主机列,方便您确认ECS实例是否属于某台DDH。 选中待迁移的ECS实例,在操作列,单击更多 > 实例设置 > 调整宿主机部署。 在调整宿主机部署页面,参见下表,完成配置。 参数 是否必填 说明 目标宿主机 是 选择ECS实例要迁入的DDH。 说明 若您账号下的DDH均不满足前提条件,则目标宿主机列表为空。DDH需满足的条件,请参见前提条件。 关联宿主机 否 选择ECS实例是否固定在要迁入的DDH上。 更多详情,请参见关联宿主机功能介绍。 是:ECS实例固定在要迁入的DDH上。实例停机并释放资源后,再次启动时,依然部署在该DDH上。若该DDH可用资源不足,则实例启动失败。 否:ECS实例不固定在要迁入的DDH上。实例停机并释放资源后,再次启动时,优先部署在该DDH上。若该DDH可用资源不足,则系统从允许自动部署的DDH中,自动选择DDH部署实例。 若该参数值为空,则默认取值为否。 单击确定。 执行结果 刷新实例列表页面,ECS实例迁移后所对应的宿主机已更新为您指定的DDH,并且实例自动启动,最终进入运行中状态。

1934890530796658 2020-03-30 13:25:59 0 浏览量 回答数 0

问题

怎样实现数据存储的管理维护

elinks 2019-12-01 21:14:17 9098 浏览量 回答数 0

回答

一.Lock接口(java.util.concurrent.locks): void lock():获取锁,阻塞方式;如果资源已被其他线程锁定,那么lock将会阻塞直到获取锁,锁阻塞期间不受线程的Interrupt的影响,在获取锁成功后,才会检测线程的interrupt状态,如果interrupt=true,则抛出异常。 unlock():释放锁 tryLock():尝试获取锁,并发环境中"闯入"行为,如果有锁可用,直接获取锁并返回true,否则范围false. lockInterruptibly():尝试获取锁,并支持"中断"请求。与lock的区别时,此方法的开始、结束和执行过程中,都会不断检测线程的interrupt状态,如果线程被中断,则立即抛出异常;而不像lock方法那样只会在获取锁之后才检测。 二.Lock接口实现类 Lock直接实现,只有3个类:ReentrantLock和WriteLock/ReadLock;这三种锁;Lock和java的synchronized(内置锁)的功能一致,均为排他锁. ReentrantLock为重入排他锁,对于同一线程,如果它已经持有了锁,那么将不会再次获取锁,而直接可以使用. ReentrantReadWriteLock并没有继承ReentrantLock,而是一个基于Lock接口的单独实现.它实现了 ReadWriteLock,即读写分离锁,是一种采用锁分离技巧的API. 尽管在API级别ReentrantReadWriteLock和ReentrantLock没有直接继承关系,但是ReentrantReadWriteLock中的ReadLock和WriteLock都具有ReentrantLock的全部语义(简单说,就是把ReentrantLock的代码copy了一下.),即锁的可重入性.WriteLock支持Condition(条件),ReadLock不支持. Lock的实现类中,都包含了2中锁等待策略:公平和非公平;其实他们的实现也非常简单,底层都是使用了queue来维持锁请求顺序.[参考:http://shift-alt-ctrl.iteye.com/blog/1839142] 公平锁,就是任何锁请求,首先将请求加入队列,然后再有队列机制来决定,是阻塞还是分配锁. 非公平,就是允许"闯入",当然公平锁,也无法干扰"闯入",对于任何锁请求,首先检测锁状态是否可用,如果可用直接获取,否则加入队列.. ReentrantLock本质上和synchronized修饰词是同一语义,如果一个线程lock()之后,其他线程进行lock时必须阻塞,直到当前线程的前续线程unlock.[执行lock操作时,将会被队列化(假如在公平模式下),获取lock的线程都将具有前续/后继线程,前续线程就是当前线程之前执行lock操作而阻塞的线程,后继线程就是当前线程之后执行lock操作的线程;那么对于unlock操作就是"解锁"信号的传递,如果当前线程unlock,那么将会触发后继线程被"唤醒",即它因为lock操作阻塞状态被解除.];这是ReentrantLock的基本原理,但是当ReentrantLock在Conditon情况下,事情就变得更加复杂.[参加下述] 三.Condition:锁条件 Condition与Lock形成happen-before关系。Condition将Object的监视器方法(wait,notify,notifyAll)分解成截然不同的对象,以便通过这些对象与任意Lock实现组合。使Lock具有等待“集合”的特性,或者“类型”;Lock替代了synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。(synchronized + object.wait对应Lock + Condition.await) Condition又称条件队列,为线程提供了一个含义,以便在某种状态条件现在可能为true的其他线程通知它之前,一直挂起该线程。即多个线程,其中一个线程因为某个条件而阻塞,其他线程当“条件”满足时,则“通知”哪些阻塞的线程。这,几乎和object中wait和notify的机制一样。 Condition和wait一样,阻塞时也将原子性的释放锁(间接执行了release()方法)。并挂起线程。Condition必须与Lock形成关系,只有获取lock权限的,才能进行Condition操作。Condition底层基于AQS实现,条件阻塞,将以队列的方式,LockSupport支持。其实现类有ConditionObject,这也是Lock.newCondition()的返回实际类型,在等待 Condition 时,允许发生“虚假唤醒”,这通常作为对基础平台语义的让步。对于大多数应用程序,这带来的实际影响很小,因为 Condition 应该总是在一个循环中被等待,并测试正被等待的状态声明。某个实现可以随意移除可能的虚假唤醒,但建议应用程序程序员总是假定这些虚假唤醒可能发生,因此总是在一个循环中等待。 void await() throws InterruptedException:当前线程阻塞,并原子性释放对象锁。如下条件将触发线程唤醒: 当线程被中断(支持中断响应), 其他线程通过condition.signal()方法,且碰巧选中当前线程唤醒 其他线程通过condition.signalAll()方法 发生虚假唤醒 底层实现,await()方法将当前线程信息添加到Conditon内部维护的"await"线程队列的尾部(此队列的目的就是为singal方法保持亟待唤醒的线程的顺序),然后释放锁(执行tryRelease()方法,注意此处释放锁,仅仅是释放了锁信号,并不是unlock,此时其他线程仍不能获取锁--lock方法阻塞),然后使用LockSupport.park(this)来强制剥夺当前线程执行权限。await方法会校验线程的中断标记。 由此可见,await()方法执行之后,因为已经"归还"了锁信号,那么其他线程此时执行lock方法,将不再阻塞.. void awaitUninterruptibly():阻塞,直到被唤醒。此方法不响应线程中断请求。即当线程被中断时,它将继续等待,直到接收到signal信号(你应该能想到"陷阱"),当最终从此方法返回时,仍然将设置其中断状态。 void signal()/signalAll():唤醒一个/全部await的线程。 对于signal()方法而言,底层实现为,遍历await"线程队列,找出此condition上最先阻塞的线程,并将此阻塞线程unpark.至此为止,我们似乎发现"锁信号"丢失了,因为在线程await时通过tryRelease时释放了一次信号.那么被signal成功的线程,首先执行一次acquire(增加锁信号),然后校验自己是否被interrupted,如果锁信号获取成功且线程状态正常,此时才正常的从await()方法退出.经过这么复杂的分析,终于明白了ReentrantLock + Condition情况下,锁状态变更和线程控制的来龙去脉... Java代码 收藏代码 //////例子: private Lock lock = new ReentrantLock(); private Condition full = lock.newCondition(); private Condition empty = lock.newCondition(); public Object take(){ lock.lock(); try{ while(isEmpty()){ empty.await() } Object o = get() full.signalAll(); return o; }finally{ lock.unlock(); } } public void put(Object o){ lock.lock(); try{ while(isFull()){ full.await(); } put(o); empty.signalAll(); }finally{ lock.unlock(); } } 四.机制 Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Condition 对象。注意,Lock 实例只是普通的对象,其本身可以在 synchronized 语句中作为目标使用。获取 Lock 实例的监视器锁与调用该实例的任何 lock() 方法没有特别的关系。为了避免混淆,建议除了在其自身的实现中之外,决不要以这种方式使用 Lock 实例。 Lock接口具有的方法: void lock():获取锁,阻塞直到获取。 void lockInterruptibly() throws InterrutedException:获取锁,阻塞直到获取成功,支持中断响应。 boolean tryLock():尝试获取锁,返回是否获取的结果。如果碰巧获取成功,则返回true,此时已经持有锁。 boolean tryLock(long time,TimeUnit) throws InterruptedException:尝试获取锁,获取成功返回true,超时时且没有获取锁则返回false。 void unlock():释放锁。约定只有持有锁者才能释放锁,否则抛出异常。 void newCondition():返回绑定到lock的条件。 五.ReadWriteLock ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer(写锁),读取锁可以由多个 reader 线程同时保持(共享锁)。写入锁是独占的。所有 ReadWriteLock 实现都必须保证 writeLock 操作的内存同步效果也要保持与相关 readLock 的联系。也就是说,成功获取读锁的线程会看到写入锁之前版本所做的所有更新。 与互斥锁相比,读-写锁允许对共享数据进行更高级别的并发访问。虽然一次只有一个线程(writer 线程)可以修改共享数据,但在许多情况下,任何数量的线程可以同时读取共享数据(reader 线程),读-写锁利用了这一点。从理论上讲,与互斥锁相比,使用读-写锁所允许的并发性增强将带来更大的性能提高。在实践中,只有在多处理器上并且只在访问模式适用于共享数据时,才能完全实现并发性增强。 Lock readLock():返回读锁。 Lock writeLock():返回写锁。 六.ReentrantLock ReentrantLock,重入排它锁,它和synchronized具有相同的语义以及在监视器上具有相同的行为,但是功能更加强大。 ReetrantLock将由最近成功获得锁且还没有释放锁的线程标记为“锁占有者”;当锁没有被线程持有时,调用lock方法将会成功获取锁并返回,如果当前线程为锁持有者,再次调用lock将立即返回。可以使用 isHeldByCurrentThread() 和 getHoldCount() 方法来检查此情况是否发生。 ReentrantLock的构造方法,允许接收一个“公平策略”参数,“公平策略”下,多个线程竞争获取锁时,将会以队列化锁请求者,并将锁授予队列的head。在“非公平策略”下,则不完全保证锁获取的顺序,允许闯入行为(tryLock)。 ReentrantLock基于AQS机制,锁信号量为1,如果信号量为1且当前锁持有者不为自己,则不能获取锁。释放锁时,如果当前锁持有者不是自己,也将抛出“IllegalMonitorStateException”。由此可见,对于ReentrantLock,lock和release方法是需要组合出现。 七.ReentrantReadWriteLock:可重入读写分离锁 重入性 :当前线程可以重新获取相应的“读锁”或者“写锁”,在写入线程保持的所有写入锁都已经释放后,才允许重入reader(读取线程)使用它们。writer线程可以获取读锁,但是reader线程却不能直接获取写锁。 锁降级:重入还允许写入锁降级为读锁,其实现方式为:先获取写入锁,然后获取读取锁,最后释放写入锁。但是读取锁不能升级为写入锁。 Conditon的支持:只有写入锁支持conditon,对于读取锁,newConditon方法直接抛出UnsupportedOperationException。 ReentrantReadWriteLock目前在java api中无直接使用。ReentrantReadWriteLock并没有继承自 ReentrantLock,而是单独重新实现。其内部仍然支持“公平性”“非公平性”策略。 ReentrantReadWriteLock基于AQS,但是AQS只有一个state来表示锁的状态,所以如果一个state表示2种类型的锁状态,它做了一个很简单的策略,“位运算”,将一个int类型的state拆分为2个16位段,左端表示readlock锁引用计数,右端16位表示write锁。在readLock、writeLock进行获取锁或者释放锁时,均是通过有效的位运算和位控制,来达到预期的效果。 八.ReadLock void lock():获取读取锁,伪代码如下: Java代码 收藏代码 //如果当前已经有“写锁”,且持有写锁者不是当前线程(如果是当前线程,则支持写锁,降级为读锁),则获取锁失败 //即任何读锁的获取,必须等待队列中的写锁释放 //c为实际锁引用量(exclusiveCount方法实现为:c & ((1<<16) -1) if (exclusiveCount(c) != 0 &&getExclusiveOwnerThread() != current) return -1; //CAS操作,操作state的左端16位。 if(CAS(c,c + (1<<16))){ return 1; } void unlock():释放read锁,即共享锁,伪代码如下: Java代码 收藏代码 //CAS锁引用 for (;;) { int c = getState(); int nextc = c - (1<<16);//位操作,释放一个锁。 if (compareAndSetState(c, nextc)) return nextc == 0; } 九.WriteLock void lock():获取写入锁,伪代码如下: Java代码 收藏代码 //当前线程 Thread current = Thread.currentThread(); //实际的锁引用state int c = getState(); //右端16位,通过位运算获取“写入锁”的state int w = exclusiveCount(c); //如果有锁引用 if (c != 0) { //且所引用不是自己 if (w == 0 || current != getExclusiveOwnerThread()){ return false; } } //如果写入锁state为0,且CAS成功,则设置state和独占线程信息 if ((w == 0 && writerShouldBlock(current)) ||!compareAndSetState(c, c + acquires)){ return false; } setExclusiveOwnerThread(current); return true; void unlock():释放写入锁,伪代码如下: Java代码 收藏代码 //计算释放锁的信号量 int nextc = getState() - releases; //对于写入锁,则校验当前线程是否为锁持有者,否则不可以释放(死锁) if (Thread.currentThread() != getExclusiveOwnerThread()) throw new IllegalMonitorStateException(); //释放锁,且重置独占线程信息 if (exclusiveCount(nextc) == 0) { setExclusiveOwnerThread(null); setState(nextc); return true; } else { setState(nextc); return false; } 十.LockSupport:用来创建锁和其他同步类的基本线程阻塞原语。 底层基于hotspot的实现unsafe。park 和 unpark 方法提供了阻塞和解除阻塞线程的有效方法。三种形式的 park(即park,parkNanos(Object blocker,long nanos),parkUntil(Object blocker,long timestamp)) 还各自支持一个 blocker 对象参数。此对象在线程受阻塞时被记录,以允许监视工具和诊断工具确定线程受阻塞的原因。(这样的工具可以使用方法 getBlocker(java.lang.Thread) 访问 blocker。)建议最好使用这些形式,而不是不带此参数的原始形式。 在锁实现中提供的作为 blocker 的普通参数是 this。 static void park(Object blocker):阻塞当前线程,直到如下情况发生: 其他线程,调用unpark方法,并将此线程作为目标而唤醒 其他线程中断当前线程此方法不报告,此线程是何种原因被放回,需要调用者重新检测,而且此方法也经常在while循环中执行 Java代码 收藏代码 while(//condition,such as:queue.isEmpty){ LockSupport.park(queue);//此时queue对象作为“阻塞”点传入,以便其他监控工具查看,queue的状态 //检测当前线程是否已经中断。 if(Thread.interrupted()){ break; } } void getBlocker(Thread t):返回提供最近一次尚未解除阻塞的park的阻塞点。可以返回null。 void unpark(Thread t):解除指定线程阻塞,使其可用。参数null则无效果。 LockSupport实例(不过不建议在实际代码中直接使用LockSupport,很多时候,你可以使用锁来控制): Java代码 收藏代码 /////////////Demo public class LockSupportTestMain { /** * @param args */ public static void main(String[] args) throws Exception{ System.out.println("Hear!"); BlockerObject blocker = new BlockerObject(); LThread tp = new LThread(blocker, false); LThread tt = new LThread(blocker, true); tp.start(); tt.start(); Thread.sleep(1000); } static class LThread extends Thread{ private BlockerObject blocker; boolean take; LThread(BlockerObject blocker,boolean take){ this.blocker = blocker; this.take = take; } @Override public void run(){ if(take){ while(true){ Object o = blocker.take(); if(o != null){ System.out.println(o.toString()); } } }else{ Object o = new Object(); System.out.println("put,,," + o.toString()); blocker.put(o); } } } static class BlockerObject{ Queue<Object> inner = new LinkedList<Object>(); Queue<Thread> twaiters = new LinkedList<Thread>(); Queue<Thread> pwaiters = new LinkedList<Thread>(); public void put(Object o){ inner.offer(o); pwaiters.offer(Thread.currentThread()); Thread t = twaiters.poll(); if(t != null){ LockSupport.unpark(t); } System.out.println("park"); LockSupport.park(Thread.currentThread()); System.out.println("park is over"); } public Object take(){ Thread t = pwaiters.poll(); if(t != null){ System.out.println("unpark"); LockSupport.unpark(t); System.out.println("unpark is OK"); } //twaiters.offer(Thread.currentThread()); return inner.poll(); } } } 备注:有时候会疑惑wait()/notify() 和Unsafe.park()/unpark()有什么区别?区别是wait和notify是Object类的方法,它们首选需要获得“对象锁”,并在synchronized同步快中执行。park和unpark怎不需要这么做。wait和park都是有当前线程发起,notify和unpark都是其他线程发起。wait针对的是对象锁,park针对的线程本身,但是最终的效果都是导致当前线程阻塞。Unsafe不建议开发者直接使用。

景凌凯 2020-04-24 16:41:16 0 浏览量 回答数 0

问题

破除自动化灾难恢复的4个谎言

elinks 2019-12-01 21:15:22 7289 浏览量 回答数 0

回答

错误(error )是指人们在使用软、硬件的时候,软、硬件不能正常操作的一种现象。由于错误的类型很多,为了对错误进行区分,系统设定了错误代码(error code),软、硬件在运行中如果发生错误,将通过它内部的原有的设定判断、识别而通过错误代码的显示方式给操作者,操作者通过错误代码识别,快速找到软、硬件不能正常操作的具体原因。windows错误代码列举1100 已经到达磁带的物理尽头。1101 磁带访问到文件标记。1102 到达磁带或分区首部。1103 磁带访问到文件组的末尾。1104 磁带上没有其他数据。1105 磁带无法分区。1106 访问多重卷分区的新磁带时,当前的区块大小不正确。1107 加载磁带时,找不到磁带分区信息。1108 无法锁定媒体退出功能。1109 无法卸载媒体。1110 驱动器中的媒体已经更改。1111 已经复位I/O 总线。1112 驱动器中没有媒体。1113 在目标多字节代码页中不存在对单码字符的映射。1114 动态链接库 (DLL) 初始化例程失败。1115 正在关闭系统。1116 无法终止系统关机,因为没有进行中的关机操作。1117 由于 I/O 设备出现错误,无法运行该请求。1118 串行设备初始化失败。将卸载串行驱动程序。1119 无法打开正与其他设备共享中断请求 (IRQ) 的设备。至少有一个使用该 IRQ 的设备已经打开。1120 由于再次写入串行口,串行 I/O 操作已结束。(IOCTL_SERIAL_XOFF_COUNTER 为零。)1121 由于超时,串行 I/O 操作已结束。 (IOCTL_SERIAL_XOFF_COUNTER 未达到零。)1122 在软盘上找不到标识符地址标记。1123 软盘扇区标识符字段与软盘控制器磁道地址不匹配。1124 软盘控制器报告软盘驱动程序不能识别的错误。1125 软盘控制器返回的结果和注册的不一致。1126 访问硬盘时,再校准操作失败,再试一次后也无法操作。1127 访问硬盘时,磁盘操作失败,再试一次后仍没有作用。1128 访问硬盘时,需要重启动磁盘控制器,但仍未成功。1129 磁带已卷到尽头。1130 可用的服务器存储区不足,无法执行该命令。1131 检测到潜在的死锁情况。1132 指定的基址或文件偏移量没有正确对齐。1140 试图更改系统电源状态的操作被另一应用程序或驱动程序禁止。1141 系统 BIOS 无法更改系统电源状态。1142 试图在一文件上创建超过系统允许数额的链接。1150 指定的程序需要新的 Windows 版本。1151 指定的程序不是 Windows 或 MS-DOS 程序。1152 无法启动指定程序的多个实例。1153 指定的程序是为 Windows 的早期版本编写的。1154 运行此应用程序所需的某个库文件已损。1155 没有应用程序与该操作中所指定的文件关联。1156 将命令发送到应用程序时出现错误。1157 找不到运行此应用程序所需的某个库文件。1158 当前进程已使用了 Window 管理器对象的系统允许的所有句柄。1159 消息只能与同步操作一起使用。1160 指出的源元素没有媒体。1161 指出的目标元素已包含媒体。1162 指出的元素不存在。1163 指出的元素是未显示的存储资源的一部分。1164 指出的设备需要重新初始化,因为硬件有错误。1165 设备显示在尝试进一步操作之前需要清除。1166 设备显示它的门仍是打开状态。1167 设备没有连接。1168 找不到元素。1169 索引中没有同指定项相匹配的项。1170 在对象上不存在指定的属性集。1171 传递到 GetMouseMovePoints 的点不在缓冲区中。1172 跟踪(工作站)服务没运行。1173 找不到卷 ID。1175 无法删除要被替换的文件。1176 无法将替换文件移到要被替换的文件。要被替换的文件保持原来的名称。1177 无法将替换文件移到要被替换的文件。要被替换的文件已被重新命名为备份名称。1178 卷更改记录被删除。1179 卷更改记录服务不处于活动中。1180 找到一份文件,但是可能不是正确的文件。1181 日志项已从日志中删除。1200 指定的设备名无效。1201 设备当前虽然未连接,但它是记忆连接。1202 试图记起已经记住的设备。1203 网络供应商不接受给定的网络路径。1204 指定的网络供应商名无效。1205 无法打开网络连接配置文件。1206 网络连接配置文件已损坏。1207 无法列举非包容类。1208 出现扩展错误。1209 指定组名的格式无效。1210 指定计算机名的格式无效。1211 指定事件名的格式无效。1212 指定域名的格式无效。1213 指定服务名的格式无效。1214 指定网络名的格式无效。1215 指定共享名的格式无效。1216 指定密码的格式无效。1217 指定的邮件名无效。1218 指定邮件目的地的格式无效。1219 所提供的凭据与现有凭据设置冲突。1220 试图与网络服务器建立会话,但与该服务器建立的会话太多。1221 网络上的其他计算机已经使用该工作组或域名。1222 网络不存在或者没有启动。1223 用户已经取消该操作。1224 所要求的操作无法在已经打开用户映射区域的文件中运行。1225 远程系统拒绝网络连接。1226 已经关闭网络连接。1227 网络传输的终点已经有一个地址与其关联。1228 网络终点尚未与地址关联。1229 试图在不存在的网络连接中操作。1230 试图在活动的网络连接上进行无效操作。1231-1233不能访问网络位置。有关网络疑难解答的信息,请参阅 Windows 帮助。1234 远程系统的目标网络端点没有运行任何服务。1235 该请求已经终止。1236 本地系统已经终止网络连接。1237 无法完成操作。请再试一次。1238 无法创建到该服务器的连接,因为已经到达了该帐户同时连接的最大数目。1239 试图在该帐户未授权的时间内登录。1240 尚未授权此帐户从该站登录网络。1241 网络地址无法用于要求的操作。1242 服务已经注册。1243 指定的服务不存在。1244 由于尚未验证用户身份,无法执行要求的操作。1245 由于用户尚未登录网络,无法运行要求的操作。指定的服务不存在。1246 继续工作。1247 完成初始化操作后,试图再次运行初始化操作。1248 没有其他本地设备。1249 指定的站点不存在。1250 具有指定名称的域控制器已经存在。1251 只有连接到服务器上时,才支持该操作。1252 即使没有改动,组策略框架也应该调用扩展。1253 指定的用户没有一个有效的配置文件。1254 Microsoft Small Business Server 不支持此操作。1300 不是对所有的调用方分配引用特权。1301 帐户名与安全标识符之间的映射未完成。1302 没有为该帐户明确地设置系统配额限制。1303 没有可用的密钥。返回已知的密钥。1304 密码太复杂,无法转换成 LAN Manager 密码。返回的 LAN Manager 密码是空字符串。1305 修订级别未知。1306 表示两个修订级别不兼容。1307 无法将此安全标识符指定为该对象的拥有者。1308 无法将此安全标识符指定为主要的对象组。1309 当前并未模拟客户的线程试图操作模拟令牌。1310 不可以禁用该组。1311 没有可用的登录服务器处理登录请求。1312 指定的登录会话不存在。该会话可能已终止。1313 指定的权限不存在。1314 客户不保留请求的权限。1315 提供的名称不是正确的帐户名称格式。1316 指定的用户已经存在。1317 指定的用户不存在。1318 指定的组已经存在。1319 指定的组不存在。1320 或者指定的用户帐户已经是某个特定组的成员,或者也可能指定的组非空而不能被删除。1321 指定的用户帐户不是所指定组帐户的成员。1322 上次保留的管理帐户无法关闭或删除。1323 无法更新密码。所输入的密码不正确。1324 无法更新密码。所提供的新密码包含不可用于密码的值。1325 无法更新密码。为新密码提供的值不符合字符域的长度、复杂性或历史要求。1326 登录失败: 用户名未知或密码错误。1327 登录失败: 用户帐户限制。1328 登录失败: 违反帐户登录时间限制。1329 登录失败: 禁止用户登录到该计算机上。1330 登录失败: 指定的帐户密码已过期。1331 登录失败: 当前禁用帐户。1332 未完成帐户名与安全性标识符之间的映射。1333 一次请求的本地用户标识符(LUID)太多。1334 没有其他可用的本地用户标识符(LUID)。1335 对这个特定使用来说,安全标识符的子部分是无效的。1336 访问控制清单(ACL)结构无效。1337 安全标识符结构无效。1338 安全描述符结构无效。1340 无法创建继承的访问控制列表(ACL)或访问控制项目(ACE)。1341 当前已禁用服务器。1342 当前已启用服务器。1343 所提供的值是无效的标识符授权值。1344 没有更多的内存用于更新安全信息。1345 指定的属性无效,或指定的属性与整个组的属性不兼容。1346 或者没有提供所申请的模仿级别,或者提供的模仿级别无效。1347 无法打开匿名级安全性符号。1348 所请求的验证信息类别无效。1349 该类符号不能以所尝试的方式使用。1350 无法在没有相关安全性的对象上运行安全操作。1351 未能从域控制器读取配置信息,或者是因为机器不可使用,或者是访问被拒绝。 错误(error )是指人们在使用软、硬件的时候,软、硬件不能正常操作的一种现象。由于错误的类型很多,为了对错误进行区分,系统设定了错误代码(error code),软、硬件在运行中如果发生错误,将通过它内部的原有的设定判断、识别而通过错误代码的显示方式给操作者,操作者通过错误代码识别,快速找到软、硬件不能正常操作的具体原因。windows错误代码列举1100 已经到达磁带的物理尽头。1101 磁带访问到文件标记。1102 到达磁带或分区首部。1103 磁带访问到文件组的末尾。1104 磁带上没有其他数据。1105 磁带无法分区。1106 访问多重卷分区的新磁带时,当前的区块大小不正确。1107 加载磁带时,找不到磁带分区信息。1108 无法锁定媒体退出功能。1109 无法卸载媒体。1110 驱动器中的媒体已经更改。1111 已经复位I/O 总线。1112 驱动器中没有媒体。1113 在目标多字节代码页中不存在对单码字符的映射。1114 动态链接库 (DLL) 初始化例程失败。1115 正在关闭系统。1116 无法终止系统关机,因为没有进行中的关机操作。1117 由于 I/O 设备出现错误,无法运行该请求。1118 串行设备初始化失败。将卸载串行驱动程序。1119 无法打开正与其他设备共享中断请求 (IRQ) 的设备。至少有一个使用该 IRQ 的设备已经打开。1120 由于再次写入串行口,串行 I/O 操作已结束。(IOCTL_SERIAL_XOFF_COUNTER 为零。)1121 由于超时,串行 I/O 操作已结束。 (IOCTL_SERIAL_XOFF_COUNTER 未达到零。)1122 在软盘上找不到标识符地址标记。1123 软盘扇区标识符字段与软盘控制器磁道地址不匹配。1124 软盘控制器报告软盘驱动程序不能识别的错误。1125 软盘控制器返回的结果和注册的不一致。1126 访问硬盘时,再校准操作失败,再试一次后也无法操作。1127 访问硬盘时,磁盘操作失败,再试一次后仍没有作用。1128 访问硬盘时,需要重启动磁盘控制器,但仍未成功。1129 磁带已卷到尽头。1130 可用的服务器存储区不足,无法执行该命令。1131 检测到潜在的死锁情况。1132 指定的基址或文件偏移量没有正确对齐。1140 试图更改系统电源状态的操作被另一应用程序或驱动程序禁止。1141 系统 BIOS 无法更改系统电源状态。1142 试图在一文件上创建超过系统允许数额的链接。1150 指定的程序需要新的 Windows 版本。1151 指定的程序不是 Windows 或 MS-DOS 程序。1152 无法启动指定程序的多个实例。1153 指定的程序是为 Windows 的早期版本编写的。1154 运行此应用程序所需的某个库文件已损。1155 没有应用程序与该操作中所指定的文件关联。1156 将命令发送到应用程序时出现错误。1157 找不到运行此应用程序所需的某个库文件。1158 当前进程已使用了 Window 管理器对象的系统允许的所有句柄。1159 消息只能与同步操作一起使用。1160 指出的源元素没有媒体。1161 指出的目标元素已包含媒体。1162 指出的元素不存在。1163 指出的元素是未显示的存储资源的一部分。1164 指出的设备需要重新初始化,因为硬件有错误。1165 设备显示在尝试进一步操作之前需要清除。1166 设备显示它的门仍是打开状态。1167 设备没有连接。1168 找不到元素。1169 索引中没有同指定项相匹配的项。1170 在对象上不存在指定的属性集。1171 传递到 GetMouseMovePoints 的点不在缓冲区中。1172 跟踪(工作站)服务没运行。1173 找不到卷 ID。1175 无法删除要被替换的文件。1176 无法将替换文件移到要被替换的文件。要被替换的文件保持原来的名称。1177 无法将替换文件移到要被替换的文件。要被替换的文件已被重新命名为备份名称。1178 卷更改记录被删除。1179 卷更改记录服务不处于活动中。1180 找到一份文件,但是可能不是正确的文件。1181 日志项已从日志中删除。1200 指定的设备名无效。1201 设备当前虽然未连接,但它是记忆连接。1202 试图记起已经记住的设备。1203 网络供应商不接受给定的网络路径。1204 指定的网络供应商名无效。1205 无法打开网络连接配置文件。1206 网络连接配置文件已损坏。1207 无法列举非包容类。1208 出现扩展错误。1209 指定组名的格式无效。1210 指定计算机名的格式无效。1211 指定事件名的格式无效。1212 指定域名的格式无效。1213 指定服务名的格式无效。1214 指定网络名的格式无效。1215 指定共享名的格式无效。1216 指定密码的格式无效。1217 指定的邮件名无效。1218 指定邮件目的地的格式无效。1219 所提供的凭据与现有凭据设置冲突。1220 试图与网络服务器建立会话,但与该服务器建立的会话太多。1221 网络上的其他计算机已经使用该工作组或域名。1222 网络不存在或者没有启动。1223 用户已经取消该操作。1224 所要求的操作无法在已经打开用户映射区域的文件中运行。1225 远程系统拒绝网络连接。1226 已经关闭网络连接。1227 网络传输的终点已经有一个地址与其关联。1228 网络终点尚未与地址关联。1229 试图在不存在的网络连接中操作。1230 试图在活动的网络连接上进行无效操作。1231-1233不能访问网络位置。有关网络疑难解答的信息,请参阅 Windows 帮助。1234 远程系统的目标网络端点没有运行任何服务。1235 该请求已经终止。1236 本地系统已经终止网络连接。1237 无法完成操作。请再试一次。1238 无法创建到该服务器的连接,因为已经到达了该帐户同时连接的最大数目。1239 试图在该帐户未授权的时间内登录。1240 尚未授权此帐户从该站登录网络。1241 网络地址无法用于要求的操作。1242 服务已经注册。1243 指定的服务不存在。1244 由于尚未验证用户身份,无法执行要求的操作。1245 由于用户尚未登录网络,无法运行要求的操作。指定的服务不存在。1246 继续工作。1247 完成初始化操作后,试图再次运行初始化操作。1248 没有其他本地设备。1249 指定的站点不存在。1250 具有指定名称的域控制器已经存在。1251 只有连接到服务器上时,才支持该操作。1252 即使没有改动,组策略框架也应该调用扩展。1253 指定的用户没有一个有效的配置文件。1254 Microsoft Small Business Server 不支持此操作。1300 不是对所有的调用方分配引用特权。1301 帐户名与安全标识符之间的映射未完成。1302 没有为该帐户明确地设置系统配额限制。1303 没有可用的密钥。返回已知的密钥。1304 密码太复杂,无法转换成 LAN Manager 密码。返回的 LAN Manager 密码是空字符串。1305 修订级别未知。1306 表示两个修订级别不兼容。1307 无法将此安全标识符指定为该对象的拥有者。1308 无法将此安全标识符指定为主要的对象组。1309 当前并未模拟客户的线程试图操作模拟令牌。1310 不可以禁用该组。1311 没有可用的登录服务器处理登录请求。1312 指定的登录会话不存在。该会话可能已终止。1313 指定的权限不存在。1314 客户不保留请求的权限。1315 提供的名称不是正确的帐户名称格式。1316 指定的用户已经存在。1317 指定的用户不存在。1318 指定的组已经存在。1319 指定的组不存在。1320 或者指定的用户帐户已经是某个特定组的成员,或者也可能指定的组非空而不能被删除。1321 指定的用户帐户不是所指定组帐户的成员。1322 上次保留的管理帐户无法关闭或删除。1323 无法更新密码。所输入的密码不正确。1324 无法更新密码。所提供的新密码包含不可用于密码的值。1325 无法更新密码。为新密码提供的值不符合字符域的长度、复杂性或历史要求。1326 登录失败: 用户名未知或密码错误。1327 登录失败: 用户帐户限制。1328 登录失败: 违反帐户登录时间限制。1329 登录失败: 禁止用户登录到该计算机上。1330 登录失败: 指定的帐户密码已过期。1331 登录失败: 当前禁用帐户。1332 未完成帐户名与安全性标识符之间的映射。1333 一次请求的本地用户标识符(LUID)太多。1334 没有其他可用的本地用户标识符(LUID)。1335 对这个特定使用来说,安全标识符的子部分是无效的。1336 访问控制清单(ACL)结构无效。1337 安全标识符结构无效。1338 安全描述符结构无效。1340 无法创建继承的访问控制列表(ACL)或访问控制项目(ACE)。1341 当前已禁用服务器。1342 当前已启用服务器。1343 所提供的值是无效的标识符授权值。1344 没有更多的内存用于更新安全信息。1345 指定的属性无效,或指定的属性与整个组的属性不兼容。1346 或者没有提供所申请的模仿级别,或者提供的模仿级别无效。1347 无法打开匿名级安全性符号。1348 所请求的验证信息类别无效。1349 该类符号不能以所尝试的方式使用。1350 无法在没有相关安全性的对象上运行安全操作。1351 未能从域控制器读取配置信息,或者是因为机器不可使用,或者是访问被拒绝。

1652919821114713 2019-12-02 00:43:41 0 浏览量 回答数 0

问题

创建主备服务器组

行者武松 2019-12-01 21:35:59 1087 浏览量 回答数 0

回答

本文档介绍如何快速创建文件系统,并将其挂载至云服务器ECS(Linux系统)上。 前提条件 已注册阿里云账号,并完成实名认证,详情请参见阿里云账号注册流程。 说明 如果您要使用RAM账户实现细粒度的权限管理,详情请参见创建自定义权限策略。 已开通NAS服务。 首次登录NAS控制台时,根据页面提示开通NAS服务。 已完成云资源访问授权。 首次使用极速型NAS时,在概览页面的常见入口区域,单击授权管理。 单击极速型和CPFS默认服务授权右侧的前往授权。 单击同意授权,完成AliyunNASMangeENIRole授权。云资源访问授权 在需要创建文件系统的地域,已有可用的专有网络VPC,详情请参见创建专有网络和交换机。 在需要创建文件系统的地域,已有可用的云服务器ECS,并将此云服务器ECS归属到已创建的专有网络VPC下,详情请参见创建ECS实例。 步骤一:创建文件系统 登录NAS控制台。 选择文件系统 > 文件系统列表,单击创建文件系统。 在极速型区域,单击按量付费。 此处以按量付费类型为例进行说明。如果您要包年包月,请单击包年包月。包年包月是在按量付费的基础上推出的更加优惠的计费方式。 在购买页面,配置相关参数。 参数 说明 地域 选择要创建文件系统的地域。 说明 不同地域的文件系统与云服务器ECS不互通。 可用区 可用区是指在同一地域内,电力和网络互相独立的物理区域。 同一地域不同可用区之间的文件系统与云服务器ECS互通。 单击下拉框选择可用区,建议和云服务器ECS在同一可用区,避免跨可用区产生的时延。 协议 选择NFS。 说明 极速型NAS只支持NFS v3。 类型 包括标准型和高级型。 容量 选择合适的容量。 吞吐 选择合适的吞吐。 数据加密 使用KMS服务托管密钥,对文件系统落盘数据进行加密存储。在读写加密数据时,无需解密,详情请参见数据加密。 如果启用了数据加密功能,则在创建快照时,也会自动加密数据。 单击立即购买,根据页面提示,完成购买。 说明 创建文件系统成功后会绑定默认的权限组。如果您要修改权限组,请参见修改挂载点的权限组。 步骤二:添加挂载点 在文件存储NAS中,需要通过挂载点将文件系统挂载至云服务器ECS。极速型NAS只支持专有网络类型的挂载点,具体操作如下所示。 说明 每个文件系统最多可添加1个挂载点。 登录NAS控制台。 选择文件系统 > 文件系统列表。 找到目标文件系统,单击更多 > 添加挂载点。 在添加挂载点页面,配置相关参数。 参数 说明 VPC网络 选择已创建的VPC网络。如果还未创建 ,请前往VPC控制台创建。 说明 必须与云服务器ECS选择一样的VPC网络和交换机。如果是不同的VPC,则需要先通过云企业网打通网络,才能挂载文件系统,详情请参见跨VPC挂载文件系统。 交换机 选择VPC网络下创建的交换机。 权限组 根据需求选择权限组。 初始情况下,每个账号都会自动生成一个VPC默认权限组,允许同一VPC环境下的任何IP地址通过该挂载点访问文件系统。如果您要创建权限组,请参见管理权限组。 单击确定,创建挂载点。 步骤二:安装NFS客户端 在Linux系统中将NFS文件系统挂载至云服务器ECS,您需要先安装NFS客户端。 登录云服务器ECS。 运行以下命令,安装NFS客户端。 如果您使用CentOS、Redhat、Aliyun Linux操作系统,运行以下命令。 sudo yum install nfs-utils 如果您使用Ubuntu或Debian操作系统,运行以下命令。 sudo apt-get update sudo apt-get install nfs-common 将同时发起的NFS请求数量修改为128, 详情请参见如何修改同时发起的NFS请求数量。 步骤四:挂载文件系统 登录云服务器ECS。 挂载NFS文件系统。 sudo mount -t nfs -o vers=3,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.region.extreme.nas.aliyuncs.com:/share /mnt 挂载命令中的参数说明如下表所示: 参数 描述 file-system-id.region.extreme.nas.aliyuncs.com:/share /mnt 表示<挂载点地址>:<NAS文件系统目录> <当前服务器上待挂载的本地路径>,请根据实际情况替换。 挂载点地址:file-system-id.region.extreme.nas.aliyuncs.com,您可以在文件存储NAS控制台上,找到目标文件系统,单击管理,进入详情页面获取挂载点地址。 NAS文件系统目录:极速型NAS的共享目录必须以/share开头,例如:/share、/share/subdir。 当前服务器上待挂载的本地路径:服务器(如ECS linux)的根目录(/)或任意子目录(如/mnt),如果是子目录,请确保子目录已存在。 vers 文件系统版本,目前只支持nfs v3。 挂载选项 挂载文件系统时,可选择多种挂载选项,详情情参见下表。 注意 配置参数时,应注意以下内容: 如果您必须更改IO大小参数 (rsize和wsize),建议您尽可能使用最大值 (1048576),以避免性能下降。 如果您必须更改超时参数 (timeo),建议您使用150或更大的值。该timeo参数的单位为0.1 秒,因此150表示的时间为15秒。 不建议使用soft选项,有数据一致性风险。如果您要使用soft选项,相关风险需由您自行承担。 避免设置不同于默认值的任何其他挂载选项。如果更改读或写缓冲区大小或禁用属性缓存,会导致性能下降。 挂载选项使用逗号分隔列表的形式,具体选项与说明如下表所示。 选项 说明 rsize 定义数据块的大小,用于在您的客户端与云中的文件系统之间读取数据。建议值:1048576。 wsize 定义数据块的大小,用于在您的客户端与云中的文件系统之间写入数据。建议值:1048576。 hard 指定在NAS暂时不可用的情况下,使用文件系统上某个文件的本地应用程序时应停止并等待该文件系统恢复在线状态。建议启用该参数。 timeo 指定时长(单位为 0.1 秒),即NFS客户端在重试向云中的文件系统发送请求之前等待响应的时间。建议值:600(60秒)。 retrans 指定NFS客户端应重试请求的次数。建议值:2。 noresvport 指定在网络重连时使用新的TCP端口,保障在网络发生故障恢复的时候不会中断连接。建议启用该参数。 执行mount -l命令,查看挂载结果。 如果回显包含如下类似信息,说明挂载成功。 查看挂载结果 挂载成功后,您可以在ECS上访问NAS文件系统,执行读取或写入操作。 您可以把NAS文件系统当作一个普通的目录来访问和使用,例子如下所示。 读写操作 常见错误排查 如果挂载失败,请参见挂载失败的排查与处理方法进行排查。

1934890530796658 2020-03-31 03:19:15 0 浏览量 回答数 0

回答

本文档介绍如何快速创建文件系统,并将其挂载至云服务器ECS(Linux系统)上。 前提条件 已注册阿里云账号,并完成实名认证,详情请参见阿里云账号注册流程。 说明 如果您要使用RAM账户实现细粒度的权限管理,详情请参见创建自定义权限策略。 已开通NAS服务。 首次登录NAS控制台时,根据页面提示开通NAS服务。 已完成云资源访问授权。 首次使用极速型NAS时,在概览页面的常见入口区域,单击授权管理。 单击极速型和CPFS默认服务授权右侧的前往授权。 单击同意授权,完成AliyunNASMangeENIRole授权。云资源访问授权 在需要创建文件系统的地域,已有可用的专有网络VPC,详情请参见创建专有网络和交换机。 在需要创建文件系统的地域,已有可用的云服务器ECS,并将此云服务器ECS归属到已创建的专有网络VPC下,详情请参见创建ECS实例。 步骤一:创建文件系统 登录NAS控制台。 选择文件系统 > 文件系统列表,单击创建文件系统。 在极速型区域,单击按量付费。 此处以按量付费类型为例进行说明。如果您要包年包月,请单击包年包月。包年包月是在按量付费的基础上推出的更加优惠的计费方式。 在购买页面,配置相关参数。 参数 说明 地域 选择要创建文件系统的地域。 说明 不同地域的文件系统与云服务器ECS不互通。 可用区 可用区是指在同一地域内,电力和网络互相独立的物理区域。 同一地域不同可用区之间的文件系统与云服务器ECS互通。 单击下拉框选择可用区,建议和云服务器ECS在同一可用区,避免跨可用区产生的时延。 协议 选择NFS。 说明 极速型NAS只支持NFS v3。 类型 包括标准型和高级型。 容量 选择合适的容量。 吞吐 选择合适的吞吐。 数据加密 使用KMS服务托管密钥,对文件系统落盘数据进行加密存储。在读写加密数据时,无需解密,详情请参见数据加密。 如果启用了数据加密功能,则在创建快照时,也会自动加密数据。 单击立即购买,根据页面提示,完成购买。 说明 创建文件系统成功后会绑定默认的权限组。如果您要修改权限组,请参见修改挂载点的权限组。 步骤二:添加挂载点 在文件存储NAS中,需要通过挂载点将文件系统挂载至云服务器ECS。极速型NAS只支持专有网络类型的挂载点,具体操作如下所示。 说明 每个文件系统最多可添加1个挂载点。 登录NAS控制台。 选择文件系统 > 文件系统列表。 找到目标文件系统,单击更多 > 添加挂载点。 在添加挂载点页面,配置相关参数。 参数 说明 VPC网络 选择已创建的VPC网络。如果还未创建 ,请前往VPC控制台创建。 说明 必须与云服务器ECS选择一样的VPC网络和交换机。如果是不同的VPC,则需要先通过云企业网打通网络,才能挂载文件系统,详情请参见跨VPC挂载文件系统。 交换机 选择VPC网络下创建的交换机。 权限组 根据需求选择权限组。 初始情况下,每个账号都会自动生成一个VPC默认权限组,允许同一VPC环境下的任何IP地址通过该挂载点访问文件系统。如果您要创建权限组,请参见管理权限组。 单击确定,创建挂载点。 步骤二:安装NFS客户端 在Linux系统中将NFS文件系统挂载至云服务器ECS,您需要先安装NFS客户端。 登录云服务器ECS。 运行以下命令,安装NFS客户端。 如果您使用CentOS、Redhat、Aliyun Linux操作系统,运行以下命令。 sudo yum install nfs-utils 如果您使用Ubuntu或Debian操作系统,运行以下命令。 sudo apt-get update sudo apt-get install nfs-common 将同时发起的NFS请求数量修改为128, 详情请参见如何修改同时发起的NFS请求数量。 步骤四:挂载文件系统 登录云服务器ECS。 挂载NFS文件系统。 sudo mount -t nfs -o vers=3,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file-system-id.region.extreme.nas.aliyuncs.com:/share /mnt 挂载命令中的参数说明如下表所示: 参数 描述 file-system-id.region.extreme.nas.aliyuncs.com:/share /mnt 表示<挂载点地址>:<NAS文件系统目录> <当前服务器上待挂载的本地路径>,请根据实际情况替换。 挂载点地址:file-system-id.region.extreme.nas.aliyuncs.com,您可以在文件存储NAS控制台上,找到目标文件系统,单击管理,进入详情页面获取挂载点地址。 NAS文件系统目录:极速型NAS的共享目录必须以/share开头,例如:/share、/share/subdir。 当前服务器上待挂载的本地路径:服务器(如ECS linux)的根目录(/)或任意子目录(如/mnt),如果是子目录,请确保子目录已存在。 vers 文件系统版本,目前只支持nfs v3。 挂载选项 挂载文件系统时,可选择多种挂载选项,详情情参见下表。 注意 配置参数时,应注意以下内容: 如果您必须更改IO大小参数 (rsize和wsize),建议您尽可能使用最大值 (1048576),以避免性能下降。 如果您必须更改超时参数 (timeo),建议您使用150或更大的值。该timeo参数的单位为0.1 秒,因此150表示的时间为15秒。 不建议使用soft选项,有数据一致性风险。如果您要使用soft选项,相关风险需由您自行承担。 避免设置不同于默认值的任何其他挂载选项。如果更改读或写缓冲区大小或禁用属性缓存,会导致性能下降。 挂载选项使用逗号分隔列表的形式,具体选项与说明如下表所示。 选项 说明 rsize 定义数据块的大小,用于在您的客户端与云中的文件系统之间读取数据。建议值:1048576。 wsize 定义数据块的大小,用于在您的客户端与云中的文件系统之间写入数据。建议值:1048576。 hard 指定在NAS暂时不可用的情况下,使用文件系统上某个文件的本地应用程序时应停止并等待该文件系统恢复在线状态。建议启用该参数。 timeo 指定时长(单位为 0.1 秒),即NFS客户端在重试向云中的文件系统发送请求之前等待响应的时间。建议值:600(60秒)。 retrans 指定NFS客户端应重试请求的次数。建议值:2。 noresvport 指定在网络重连时使用新的TCP端口,保障在网络发生故障恢复的时候不会中断连接。建议启用该参数。 执行mount -l命令,查看挂载结果。 如果回显包含如下类似信息,说明挂载成功。 查看挂载结果 挂载成功后,您可以在ECS上访问NAS文件系统,执行读取或写入操作。 您可以把NAS文件系统当作一个普通的目录来访问和使用,例子如下所示。 读写操作 常见错误排查 如果挂载失败,请参见挂载失败的排查与处理方法进行排查。

1934890530796658 2020-03-31 03:19:51 0 浏览量 回答数 0

回答

Lease 机制是最重要的分布式协议,广泛应用于各种实际的分布式系统中。 基于lease 的分布式cache 系统 基本的问题背景如下:在一个分布式系统中,有一个中心服务器节点,中心服务器存储、维护 着一些数据,这些数据是系统的元数据。系统中其他的节点通过访问中心服务器节点读取、修改其 上的元数据。由于系统中各种操作都依赖于元数据,如果每次读取元数据的操作都访问中心服务器 节点,那么中心服务器节点的性能成为系统的瓶颈。为此,设计一种元数据cache,在各个节点上 cache 元数据信息,从而减少对中心服务器节点的访问,提高性能。另一方面,系统的正确运行严 格依赖于元数据的正确,这就要求各个节点上cache 的数据始终与中心服务器上的数据一致,cache 中的数据不能是旧的脏数据。最后,设计的cache 系统要能最大可能的处理节点宕机、网络中断等 异常,最大程度的提高系统的可用性。 为此,利用lease 机制设计一套cache 系统,其基本原理为如下。中心服务器在向各节点发送数 据时同时向节点颁发一个lease。每个lease 具有一个有效期,和信用卡上的有效期类似,lease 上的 有效期通常是一个明确的时间点,例如12:00:10,一旦真实时间超过这个时间点,则lease 过期失效。 这样lease 的有效期与节点收到lease 的时间无关,节点可能收到lease 时该lease 就已经过期失效。 这里首先假设中心服务器与各节点的时钟是同步的,下节中讨论时钟不同步对lease 的影响。中心服 务器发出的lease 的含义为:在lease 的有效期内,中心服务器保证不会修改对应数据的值。因此, 节点收到数据和lease 后,将数据加入本地Cache,一旦对应的lease 超时,节点将对应的本地cache 数据删除。中心服务器在修改数据时,首先阻塞所有新的读请求,并等待之前为该数据发出的所有 lease 超时过期,然后修改数据的值。 基于lease 的cache,客户端节点读取元数据 判断元数据是否已经处于本地cache 且lease 处于有效期内 1.1 是:直接返回cache 中的元数据 1.2 否:向中心服务器节点请求读取元数据信息 1.2.1 服务器收到读取请求后,返回元数据及一个对应的lease 1.2.2 客户端是否成功收到服务器返回的数据 1.2.2.1 失败或超时:退出流程,读取失败,可重试 1.2.2.2 成功:将元数据与该元数据的lease 记录到内存中,返回元数据 基于lease 的cache,客户端节点修改元数据流程 2.1 节点向服务器发起修改元数据请求。 2.2 服务器收到修改请求后,阻塞所有新的读数据请求,即接收读请求,但不返回数据。 2.3 服务器等待所有与该元数据相关的lease 超时。 2.4 服务器修改元数据并向客户端节点返回修改成功。 上述机制可以保证各个节点上的cache 与中心服务器上的中心始终一致。这是因为中心服务器 节点在发送数据的同时授予了节点对应的lease,在lease 有效期内,服务器不会修改数据,从而客 户端节点可以放心的在lease 有效期内cache 数据。上述lease 机制可以容错的关键是:服务器一旦 发出数据及lease,无论客户端是否收到,也无论后续客户端是否宕机,也无论后续网络是否正常, 服务器只要等待lease 超时,就可以保证对应的客户端节点不会再继续cache 数据,从而可以放心的 修改数据而不会破坏cache 的一致性。 上述基础流程有一些性能和可用性上的问题,但可以很容易就优化改性。优化点一:服务器在 修改元数据时首先要阻塞所有新的读请求,造成没有读服务。这是为了防止发出新的lease 从而引起 不断有新客户端节点持有lease 并缓存着数据,形成“活锁”。优化的方法很简单,服务器在进入修 改数据流程后,一旦收到读请求则只返回数据但不颁发lease。从而造成在修改流程执行的过程中, 客户端可以读到元数据,只是不能缓存元数据。进一步的优化是,当进入修改流程,服务器颁发的 lease 有效期限选择为已发出的lease 的最大有效期限。这样做,客户端可以继续在服务器进入修改 流程后继续缓存元数据,但服务器的等待所有lease 过期的时间也不会因为颁发新的lease 而不断延 长。 最后,=cache 机制与多副本机制的区别。Cache 机制与多副本机制的相似之处都 是将一份数据保存在多个节点上。但Cache 机制却要简单许多,对于cache 的数据,可以随时删除 丢弃,并命中cache 的后果仅仅是需要访问数据源读取数据;然而副本机制却不一样,副本是不能 随意丢弃的,每失去一个副本,服务质量都在下降,一旦副本数下降到一定程度,则往往服务将不 再可用。 lease 机制的分析 lease 的定义:Lease 是由颁发者授予的在某一有效期内的承诺。颁发者一旦发 出lease,则无论接受方是否收到,也无论后续接收方处于何种状态,只要lease 不过期,颁发者一 定严守承诺;另一方面,接收方在lease 的有效期内可以使用颁发者的承诺,但一旦lease 过期,接 收方一定不能继续使用颁发者的承诺。 Lease 机制具有很高的容错能力。首先,通过引入有效期,Lease 机制能否非常好的容错网络异 常。Lease 颁发过程只依赖于网络可以单向通信,即使接收方无法向颁发者发送消息,也不影响lease 的颁发。由于lease 的有效期是一个确定的时间点,lease 的语义与发送lease 的具体时间无关,所以 同一个lease 可以被颁发者不断重复向接受方发送。即使颁发者偶尔发送lease 失败,颁发者也可以 简单的通过重发的办法解决。一旦lease 被接收方成功接受,后续lease 机制不再依赖于网络通信, 即使网络完全中断lease 机制也不受影响。再者,Lease 机制能较好的容错节点宕机。如果颁发者宕 机,则宕机的颁发者通常无法改变之前的承诺,不会影响lease 的正确性。在颁发者机恢复后,如果 颁发者恢复出了之前的lease 信息,颁发者可以继续遵守lease 的承诺。如果颁发者无法恢复lease 信息,则只需等待一个最大的lease 超时时间就可以使得所有的lease 都失效,从而不破坏lease 机制。 例如上节中的cache 系统的例子中,一旦服务器宕机,肯定不会修改元数据,重新恢复后,只需等 待一个最大的lease 超时时间,所有节点上的缓存信息都将被清空。对于接受方宕机的情况,颁发者 不需要做更多的容错处理,只需等待lease 过期失效,就可以收回承诺,实践中也就是收回之前赋予 的权限、身份等。最后,lease 机制不依赖于存储。颁发者可以持久化颁发过的lease 信息,从而在 宕机恢复后可以使得在有效期的lease 继续有效。但这对于lease 机制只是一个优化,如之前的分析, 即使颁发者没有持久化lease 信息,也可以通过等待一个最大的lease 时间的方式使得之前所有颁发 的lease 失效,从而保证机制继续有效。 Lease 机制依赖于有效期,这就要求颁发者和接收者的时钟是同步的。一方面,如果颁发者的 时钟比接收者的时钟慢,则当接收者认为lease 已经过期的时候,颁发者依旧认为lease 有效。接收 者可以用在lease 到期前申请新的lease 的方式解决这个问题。另一方面,如果颁发者的时钟比接收 者的时钟快,则当颁发者认为lease 已经过期的时候,接收者依旧认为lease 有效,颁发者可能将lease 颁发给其他节点,造成承诺失效,影响系统的正确性。对于这种时钟不同步,实践中的通常做法是 将颁发者的有效期设置得比接收者的略大,只需大过时钟误差就可以避免对lease 的有效性的影响。 基于lease 机制确定节点状态 分布式协议依赖于对节点状态认知的全局一致性,即一旦节点Q 认为某个节点 A 异常,则节点A 也必须认为自己异常,从而节点A 停止作为primary,避免“双主”问题的出现。 解决这种问题有两种思路,第一、设计的分布式协议可以容忍“双主”错误,即不依赖于对节点状 态的全局一致性认识,或者全局一致性状态是全体协商后的结果;第二、利用lease 机制。对于第一 种思路即放弃使用中心化的设计,而改用去中心化设计,超过本节的讨论范畴。下面着重讨论利用 lease 机制确定节点状态。 由中心节点向其他节点发送lease,若某个节点持有有效的lease,则认为该节点正常可以提供服 务。用于例2.3.1 中,节点A、B、C 依然周期性的发送heart beat 报告自身状态,节点Q 收到heart beat 后发送一个lease,表示节点Q 确认了节点A、B、C 的状态,并允许节点在lease 有效期内正常工 作。节点Q 可以给primary 节点一个特殊的lease,表示节点可以作为primary 工作。一旦节点Q 希 望切换新的primary,则只需等前一个primary 的lease 过期,则就可以安全的颁发新的lease 给新的 primary 节点,而不会出现“双主”问题。 在实际系统中,若用一个中心节点发送lease 也有很大的风险,一旦该中心节点宕机或网络异常, 则所有的节点没有lease,从而造成系统高度不可用。为此,实际系统总是使用多个中心节点互为副 本,成为一个小的集群,该小集群具有高可用性,对外提供颁发lease 的功能。chubby 和zookeeper 都是基于这样的设计。 lease 的有效期时间选择 工程中,常选择的lease 时长是10 秒级别,这是一个经 过验证的经验值,实践中可以作为参考并综合选择合适的时长。

kun坤 2020-04-24 15:31:41 0 浏览量 回答数 0

回答

我们先从整体上看一下Kubernetes的一些理念和基本架构,然后从网络、资源管理、存储、服务发现、负载均衡、高可用、rollingupgrade、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性。  当然也会包括一些需要注意的问题。主要目的是帮助大家快速理解Kubernetes的主要功能,今后在研究和使用这个具的时候有所参考和帮助。  1.Kubernetes的一些理念:  用户不需要关心需要多少台机器,只需要关心软件(服务)运行所需的环境。以服务为中心,你需要关心的是api,如何把大服务拆分成小服务,如何使用api去整合它们。  保证系统总是按照用户指定的状态去运行。  不仅仅提给你供容器服务,同样提供一种软件系统升级的方式;在保持HA的前提下去升级系统是很多用户最想要的功能,也是最难实现的。  那些需要担心和不需要担心的事情。  更好的支持微服务理念,划分、细分服务之间的边界,比如lablel、pod等概念的引入。  对于Kubernetes的架构,可以参考官方文档。  大致由一些主要组件构成,包括Master节点上的kube-apiserver、kube-scheduler、kube-controller-manager、控制组件kubectl、状态存储etcd、Slave节点上的kubelet、kube-proxy,以及底层的网络支持(可以用Flannel、OpenVSwitch、Weave等)。  看上去也是微服务的架构设计,不过目前还不能很好支持单个服务的横向伸缩,但这个会在Kubernetes的未来版本中解决。  2.Kubernetes的主要特性  会从网络、服务发现、负载均衡、资源管理、高可用、存储、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性->由于时间有限,只能简单一些了。  另外,对于服务发现、高可用和监控的一些更详细的介绍,感兴趣的朋友可以通过这篇文章了解。  1)网络  Kubernetes的网络方式主要解决以下几个问题:  a.紧耦合的容器之间通信,通过Pod和localhost访问解决。  b.Pod之间通信,建立通信子网,比如隧道、路由,Flannel、OpenvSwitch、Weave。  c.Pod和Service,以及外部系统和Service的通信,引入Service解决。  Kubernetes的网络会给每个Pod分配一个IP地址,不需要在Pod之间建立链接,也基本不需要去处理容器和主机之间的端口映射。  注意:Pod重建后,IP会被重新分配,所以内网通信不要依赖PodIP;通过Service环境变量或者DNS解决。  2)服务发现及负载均衡  kube-proxy和DNS,在v1之前,Service含有字段portalip和publicIPs,分别指定了服务的虚拟ip和服务的出口机ip,publicIPs可任意指定成集群中任意包含kube-proxy的节点,可多个。portalIp通过NAT的方式跳转到container的内网地址。在v1版本中,publicIPS被约定废除,标记为deprecatedPublicIPs,仅用作向后兼容,portalIp也改为ClusterIp,而在serviceport定义列表里,增加了nodePort项,即对应node上映射的服务端口。  DNS服务以addon的方式,需要安装skydns和kube2dns。kube2dns会通过读取KubernetesAPI获取服务的clusterIP和port信息,同时以watch的方式检查service的变动,及时收集变动信息,并将对于的ip信息提交给etcd存档,而skydns通过etcd内的DNS记录信息,开启53端口对外提供服务。大概的DNS的域名记录是servicename.namespace.tenx.domain,“tenx.domain”是提前设置的主域名。  注意:kube-proxy在集群规模较大以后,可能会有访问的性能问题,可以考虑用其他方式替换,比如HAProxy,直接导流到Service的endpints或者Pods上。Kubernetes官方也在修复这个问题。  3)资源管理  有3个层次的资源限制方式,分别在Container、Pod、Namespace层次。Container层次主要利用容器本身的支持,比如Docker对CPU、内存、磁盘、网络等的支持;Pod方面可以限制系统内创建Pod的资源范围,比如最大或者最小的CPU、memory需求;Namespace层次就是对用户级别的资源限额了,包括CPU、内存,还可以限定Pod、rc、service的数量。  资源管理模型-》简单、通用、准确,并可扩展  目前的资源分配计算也相对简单,没有什么资源抢占之类的强大功能,通过每个节点上的资源总量、以及已经使用的各种资源加权和,来计算某个Pod优先非配到哪些节点,还没有加入对节点实际可用资源的评估,需要自己的schedulerplugin来支持。其实kubelet已经可以拿到节点的资源,只要进行收集计算即可,相信Kubernetes的后续版本会有支持。  4)高可用  主要是指Master节点的HA方式官方推荐利用etcd实现master选举,从多个Master中得到一个kube-apiserver保证至少有一个master可用,实现highavailability。对外以loadbalancer的方式提供入口。这种方式可以用作ha,但仍未成熟,据了解,未来会更新升级ha的功能。  一张图帮助大家理解:  也就是在etcd集群背景下,存在多个kube-apiserver,并用pod-master保证仅是主master可用。同时kube-sheduller和kube-controller-manager也存在多个,而且伴随着kube-apiserver同一时间只能有一套运行。  5)rollingupgrade  RC在开始的设计就是让rollingupgrade变的更容易,通过一个一个替换Pod来更新service,实现服务中断时间的最小化。基本思路是创建一个复本为1的新的rc,并逐步减少老的rc的复本、增加新的rc的复本,在老的rc数量为0时将其删除。  通过kubectl提供,可以指定更新的镜像、替换pod的时间间隔,也可以rollback当前正在执行的upgrade操作。  同样,Kuberntes也支持多版本同时部署,并通过lable来进行区分,在service不变的情况下,调整支撑服务的Pod,测试、监控新Pod的工作情况。  6)存储  大家都知道容器本身一般不会对数据进行持久化处理,在Kubernetes中,容器异常退出,kubelet也只是简单的基于原有镜像重启一个新的容器。另外,如果我们在同一个Pod中运行多个容器,经常会需要在这些容器之间进行共享一些数据。Kuberenetes的Volume就是主要来解决上面两个基础问题的。  Docker也有Volume的概念,但是相对简单,而且目前的支持很有限,Kubernetes对Volume则有着清晰定义和广泛的支持。其中最核心的理念:Volume只是一个目录,并可以被在同一个Pod中的所有容器访问。而这个目录会是什么样,后端用什么介质和里面的内容则由使用的特定Volume类型决定。  创建一个带Volume的Pod:  spec.volumes指定这个Pod需要的volume信息spec.containers.volumeMounts指定哪些container需要用到这个VolumeKubernetes对Volume的支持非常广泛,有很多贡献者为其添加不同的存储支持,也反映出Kubernetes社区的活跃程度。  emptyDir随Pod删除,适用于临时存储、灾难恢复、共享运行时数据,支持RAM-backedfilesystemhostPath类似于Docker的本地Volume用于访问一些本地资源(比如本地Docker)。  gcePersistentDiskGCEdisk-只有在GoogleCloudEngine平台上可用。  awsElasticBlockStore类似于GCEdisk节点必须是AWSEC2的实例nfs-支持网络文件系统。  rbd-RadosBlockDevice-Ceph  secret用来通过KubernetesAPI向Pod传递敏感信息,使用tmpfs(aRAM-backedfilesystem)  persistentVolumeClaim-从抽象的PV中申请资源,而无需关心存储的提供方  glusterfs  iscsi  gitRepo  根据自己的需求选择合适的存储类型,反正支持的够多,总用一款适合的:)  7)安全  一些主要原则:  基础设施模块应该通过APIserver交换数据、修改系统状态,而且只有APIserver可以访问后端存储(etcd)。  把用户分为不同的角色:Developers/ProjectAdmins/Administrators。  允许Developers定义secrets对象,并在pod启动时关联到相关容器。  以secret为例,如果kubelet要去pull私有镜像,那么Kubernetes支持以下方式:  通过dockerlogin生成.dockercfg文件,进行全局授权。  通过在每个namespace上创建用户的secret对象,在创建Pod时指定imagePullSecrets属性(也可以统一设置在serviceAcouunt上),进行授权。  认证(Authentication)  APIserver支持证书、token、和基本信息三种认证方式。  授权(Authorization)  通过apiserver的安全端口,authorization会应用到所有http的请求上  AlwaysDeny、AlwaysAllow、ABAC三种模式,其他需求可以自己实现Authorizer接口。  8)监控  比较老的版本Kubernetes需要外接cadvisor主要功能是将node主机的containermetrics抓取出来。在较新的版本里,cadvior功能被集成到了kubelet组件中,kubelet在与docker交互的同时,对外提供监控服务。  Kubernetes集群范围内的监控主要由kubelet、heapster和storagebackend(如influxdb)构建。Heapster可以在集群范围获取metrics和事件数据。它可以以pod的方式运行在k8s平台里,也可以单独运行以standalone的方式。  注意:heapster目前未到1.0版本,对于小规模的集群监控比较方便。但对于较大规模的集群,heapster目前的cache方式会吃掉大量内存。因为要定时获取整个集群的容器信息,信息在内存的临时存储成为问题,再加上heaspter要支持api获取临时metrics,如果将heapster以pod方式运行,很容易出现OOM。所以目前建议关掉cache并以standalone的方式独立出k8s平台。 答案来源网络,供您参考

问问小秘 2019-12-02 02:13:31 0 浏览量 回答数 0

回答

我们先从整体上看一下Kubernetes的一些理念和基本架构,然后从网络、资源管理、存储、服务发现、负载均衡、高可用、rollingupgrade、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性。  当然也会包括一些需要注意的问题。主要目的是帮助大家快速理解Kubernetes的主要功能,今后在研究和使用这个具的时候有所参考和帮助。  1.Kubernetes的一些理念:  用户不需要关心需要多少台机器,只需要关心软件(服务)运行所需的环境。以服务为中心,你需要关心的是api,如何把大服务拆分成小服务,如何使用api去整合它们。  保证系统总是按照用户指定的状态去运行。  不仅仅提给你供容器服务,同样提供一种软件系统升级的方式;在保持HA的前提下去升级系统是很多用户最想要的功能,也是最难实现的。  那些需要担心和不需要担心的事情。  更好的支持微服务理念,划分、细分服务之间的边界,比如lablel、pod等概念的引入。  对于Kubernetes的架构,可以参考官方文档。  大致由一些主要组件构成,包括Master节点上的kube-apiserver、kube-scheduler、kube-controller-manager、控制组件kubectl、状态存储etcd、Slave节点上的kubelet、kube-proxy,以及底层的网络支持(可以用Flannel、OpenVSwitch、Weave等)。  看上去也是微服务的架构设计,不过目前还不能很好支持单个服务的横向伸缩,但这个会在Kubernetes的未来版本中解决。  2.Kubernetes的主要特性  会从网络、服务发现、负载均衡、资源管理、高可用、存储、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性->由于时间有限,只能简单一些了。  另外,对于服务发现、高可用和监控的一些更详细的介绍,感兴趣的朋友可以通过这篇文章了解。  1)网络  Kubernetes的网络方式主要解决以下几个问题:  a.紧耦合的容器之间通信,通过Pod和localhost访问解决。  b.Pod之间通信,建立通信子网,比如隧道、路由,Flannel、OpenvSwitch、Weave。  c.Pod和Service,以及外部系统和Service的通信,引入Service解决。  Kubernetes的网络会给每个Pod分配一个IP地址,不需要在Pod之间建立链接,也基本不需要去处理容器和主机之间的端口映射。  注意:Pod重建后,IP会被重新分配,所以内网通信不要依赖PodIP;通过Service环境变量或者DNS解决。  2)服务发现及负载均衡  kube-proxy和DNS,在v1之前,Service含有字段portalip和publicIPs,分别指定了服务的虚拟ip和服务的出口机ip,publicIPs可任意指定成集群中任意包含kube-proxy的节点,可多个。portalIp通过NAT的方式跳转到container的内网地址。在v1版本中,publicIPS被约定废除,标记为deprecatedPublicIPs,仅用作向后兼容,portalIp也改为ClusterIp,而在serviceport定义列表里,增加了nodePort项,即对应node上映射的服务端口。  DNS服务以addon的方式,需要安装skydns和kube2dns。kube2dns会通过读取KubernetesAPI获取服务的clusterIP和port信息,同时以watch的方式检查service的变动,及时收集变动信息,并将对于的ip信息提交给etcd存档,而skydns通过etcd内的DNS记录信息,开启53端口对外提供服务。大概的DNS的域名记录是servicename.namespace.tenx.domain,“tenx.domain”是提前设置的主域名。  注意:kube-proxy在集群规模较大以后,可能会有访问的性能问题,可以考虑用其他方式替换,比如HAProxy,直接导流到Service的endpints或者Pods上。Kubernetes官方也在修复这个问题。  3)资源管理  有3个层次的资源限制方式,分别在Container、Pod、Namespace层次。Container层次主要利用容器本身的支持,比如Docker对CPU、内存、磁盘、网络等的支持;Pod方面可以限制系统内创建Pod的资源范围,比如最大或者最小的CPU、memory需求;Namespace层次就是对用户级别的资源限额了,包括CPU、内存,还可以限定Pod、rc、service的数量。  资源管理模型-》简单、通用、准确,并可扩展  目前的资源分配计算也相对简单,没有什么资源抢占之类的强大功能,通过每个节点上的资源总量、以及已经使用的各种资源加权和,来计算某个Pod优先非配到哪些节点,还没有加入对节点实际可用资源的评估,需要自己的schedulerplugin来支持。其实kubelet已经可以拿到节点的资源,只要进行收集计算即可,相信Kubernetes的后续版本会有支持。  4)高可用  主要是指Master节点的HA方式官方推荐利用etcd实现master选举,从多个Master中得到一个kube-apiserver保证至少有一个master可用,实现highavailability。对外以loadbalancer的方式提供入口。这种方式可以用作ha,但仍未成熟,据了解,未来会更新升级ha的功能。  一张图帮助大家理解:  也就是在etcd集群背景下,存在多个kube-apiserver,并用pod-master保证仅是主master可用。同时kube-sheduller和kube-controller-manager也存在多个,而且伴随着kube-apiserver同一时间只能有一套运行。  5)rollingupgrade  RC在开始的设计就是让rollingupgrade变的更容易,通过一个一个替换Pod来更新service,实现服务中断时间的最小化。基本思路是创建一个复本为1的新的rc,并逐步减少老的rc的复本、增加新的rc的复本,在老的rc数量为0时将其删除。  通过kubectl提供,可以指定更新的镜像、替换pod的时间间隔,也可以rollback当前正在执行的upgrade操作。  同样,Kuberntes也支持多版本同时部署,并通过lable来进行区分,在service不变的情况下,调整支撑服务的Pod,测试、监控新Pod的工作情况。  6)存储  大家都知道容器本身一般不会对数据进行持久化处理,在Kubernetes中,容器异常退出,kubelet也只是简单的基于原有镜像重启一个新的容器。另外,如果我们在同一个Pod中运行多个容器,经常会需要在这些容器之间进行共享一些数据。Kuberenetes的Volume就是主要来解决上面两个基础问题的。  Docker也有Volume的概念,但是相对简单,而且目前的支持很有限,Kubernetes对Volume则有着清晰定义和广泛的支持。其中最核心的理念:Volume只是一个目录,并可以被在同一个Pod中的所有容器访问。而这个目录会是什么样,后端用什么介质和里面的内容则由使用的特定Volume类型决定。  创建一个带Volume的Pod:  spec.volumes指定这个Pod需要的volume信息spec.containers.volumeMounts指定哪些container需要用到这个VolumeKubernetes对Volume的支持非常广泛,有很多贡献者为其添加不同的存储支持,也反映出Kubernetes社区的活跃程度。  emptyDir随Pod删除,适用于临时存储、灾难恢复、共享运行时数据,支持RAM-backedfilesystemhostPath类似于Docker的本地Volume用于访问一些本地资源(比如本地Docker)。  gcePersistentDiskGCEdisk-只有在GoogleCloudEngine平台上可用。  awsElasticBlockStore类似于GCEdisk节点必须是AWSEC2的实例nfs-支持网络文件系统。  rbd-RadosBlockDevice-Ceph  secret用来通过KubernetesAPI向Pod传递敏感信息,使用tmpfs(aRAM-backedfilesystem)  persistentVolumeClaim-从抽象的PV中申请资源,而无需关心存储的提供方  glusterfs  iscsi  gitRepo  根据自己的需求选择合适的存储类型,反正支持的够多,总用一款适合的:)  7)安全  一些主要原则:  基础设施模块应该通过APIserver交换数据、修改系统状态,而且只有APIserver可以访问后端存储(etcd)。  把用户分为不同的角色:Developers/ProjectAdmins/Administrators。  允许Developers定义secrets对象,并在pod启动时关联到相关容器。  以secret为例,如果kubelet要去pull私有镜像,那么Kubernetes支持以下方式:  通过dockerlogin生成.dockercfg文件,进行全局授权。  通过在每个namespace上创建用户的secret对象,在创建Pod时指定imagePullSecrets属性(也可以统一设置在serviceAcouunt上),进行授权。  认证(Authentication)  APIserver支持证书、token、和基本信息三种认证方式。  授权(Authorization)  通过apiserver的安全端口,authorization会应用到所有http的请求上  AlwaysDeny、AlwaysAllow、ABAC三种模式,其他需求可以自己实现Authorizer接口。  8)监控  比较老的版本Kubernetes需要外接cadvisor主要功能是将node主机的containermetrics抓取出来。在较新的版本里,cadvior功能被集成到了kubelet组件中,kubelet在与docker交互的同时,对外提供监控服务。  Kubernetes集群范围内的监控主要由kubelet、heapster和storagebackend(如influxdb)构建。Heapster可以在集群范围获取metrics和事件数据。它可以以pod的方式运行在k8s平台里,也可以单独运行以standalone的方式。  注意:heapster目前未到1.0版本,对于小规模的集群监控比较方便。但对于较大规模的集群,heapster目前的cache方式会吃掉大量内存。因为要定时获取整个集群的容器信息,信息在内存的临时存储成为问题,再加上heaspter要支持api获取临时metrics,如果将heapster以pod方式运行,很容易出现OOM。所以目前建议关掉cache并以standalone的方式独立出k8s平台。 “答案来源于网络,供您参考” 希望以上信息可以帮到您!

牧明 2019-12-02 02:16:53 0 浏览量 回答数 0

回答

我们先从整体上看一下Kubernetes的一些理念和基本架构, 然后从网络、 资源管理、存储、服务发现、负载均衡、高可用、rolling upgrade、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性。 当然也会包括一些需要注意的问题。主要目的是帮助大家快速理解 Kubernetes的主要功能,今后在研究和使用这个具的时候有所参考和帮助。 1.Kubernetes的一些理念: 用户不需要关心需要多少台机器,只需要关心软件(服务)运行所需的环境。以服务为中心,你需要关心的是api,如何把大服务拆分成小服务,如何使用api去整合它们。 保证系统总是按照用户指定的状态去运行。 不仅仅提给你供容器服务,同样提供一种软件系统升级的方式;在保持HA的前提下去升级系统是很多用户最想要的功能,也是最难实现的。 那些需要担心和不需要担心的事情。 更好的支持微服务理念,划分、细分服务之间的边界,比如lablel、pod等概念的引入。 对于Kubernetes的架构,可以参考官方文档。 大致由一些主要组件构成,包括Master节点上的kube-apiserver、kube-scheduler、kube-controller-manager、控制组件kubectl、状态存储etcd、Slave节点上的kubelet、kube-proxy,以及底层的网络支持(可以用Flannel、OpenVSwitch、Weave等)。 看上去也是微服务的架构设计,不过目前还不能很好支持单个服务的横向伸缩,但这个会在 Kubernetes 的未来版本中解决。 2.Kubernetes的主要特性 会从网络、服务发现、负载均衡、资源管理、高可用、存储、安全、监控等方面向大家简单介绍Kubernetes的这些主要特性 -> 由于时间有限,只能简单一些了。 另外,对于服务发现、高可用和监控的一些更详细的介绍,感兴趣的朋友可以通过这篇文章了解。 1)网络 Kubernetes的网络方式主要解决以下几个问题: a. 紧耦合的容器之间通信,通过 Pod 和 localhost 访问解决。 b. Pod之间通信,建立通信子网,比如隧道、路由,Flannel、Open vSwitch、Weave。 c. Pod和Service,以及外部系统和Service的通信,引入Service解决。 Kubernetes的网络会给每个Pod分配一个IP地址,不需要在Pod之间建立链接,也基本不需要去处理容器和主机之间的端口映射。 注意:Pod重建后,IP会被重新分配,所以内网通信不要依赖Pod IP;通过Service环境变量或者DNS解决。 2) 服务发现及负载均衡 kube-proxy和DNS, 在v1之前,Service含有字段portalip 和publicIPs, 分别指定了服务的虚拟ip和服务的出口机ip,publicIPs可任意指定成集群中任意包含kube-proxy的节点,可多个。portalIp 通过NAT的方式跳转到container的内网地址。在v1版本中,publicIPS被约定废除,标记为deprecatedPublicIPs,仅用作向后兼容,portalIp也改为ClusterIp, 而在service port 定义列表里,增加了nodePort项,即对应node上映射的服务端口。 DNS服务以addon的方式,需要安装skydns和kube2dns。kube2dns会通过读取Kubernetes API获取服务的clusterIP和port信息,同时以watch的方式检查service的变动,及时收集变动信息,并将对于的ip信息提交给etcd存档,而skydns通过etcd内的DNS记录信息,开启53端口对外提供服务。大概的DNS的域名记录是servicename.namespace.tenx.domain, "tenx.domain"是提前设置的主域名。 注意:kube-proxy 在集群规模较大以后,可能会有访问的性能问题,可以考虑用其他方式替换,比如HAProxy,直接导流到Service 的endpints 或者 Pods上。Kubernetes官方也在修复这个问题。 3)资源管理 有3 个层次的资源限制方式,分别在Container、Pod、Namespace 层次。Container层次主要利用容器本身的支持,比如Docker 对CPU、内存、磁盘、网络等的支持;Pod方面可以限制系统内创建Pod的资源范围,比如最大或者最小的CPU、memory需求;Namespace层次就是对用户级别的资源限额了,包括CPU、内存,还可以限定Pod、rc、service的数量。 资源管理模型 -》 简单、通用、准确,并可扩展 目前的资源分配计算也相对简单,没有什么资源抢占之类的强大功能,通过每个节点上的资源总量、以及已经使用的各种资源加权和,来计算某个Pod优先非配到哪些节点,还没有加入对节点实际可用资源的评估,需要自己的scheduler plugin来支持。其实kubelet已经可以拿到节点的资源,只要进行收集计算即可,相信Kubernetes的后续版本会有支持。 4)高可用 主要是指Master节点的 HA方式 官方推荐 利用etcd实现master 选举,从多个Master中得到一个kube-apiserver 保证至少有一个master可用,实现high availability。对外以loadbalancer的方式提供入口。这种方式可以用作ha,但仍未成熟,据了解,未来会更新升级ha的功能。 一张图帮助大家理解: 也就是在etcd集群背景下,存在多个kube-apiserver,并用pod-master保证仅是主master可用。同时kube-sheduller和kube-controller-manager也存在多个,而且伴随着kube-apiserver 同一时间只能有一套运行。 5) rolling upgrade RC 在开始的设计就是让rolling upgrade变的更容易,通过一个一个替换Pod来更新service,实现服务中断时间的最小化。基本思路是创建一个复本为1的新的rc,并逐步减少老的rc的复本、增加新的rc的复本,在老的rc数量为0时将其删除。 通过kubectl提供,可以指定更新的镜像、替换pod的时间间隔,也可以rollback 当前正在执行的upgrade操作。 同样, Kuberntes也支持多版本同时部署,并通过lable来进行区分,在service不变的情况下,调整支撑服务的Pod,测试、监控新Pod的工作情况。 6)存储 大家都知道容器本身一般不会对数据进行持久化处理,在Kubernetes中,容器异常退出,kubelet也只是简单的基于原有镜像重启一个新的容器。另外,如果我们在同一个Pod中运行多个容器,经常会需要在这些容器之间进行共享一些数据。Kuberenetes 的 Volume就是主要来解决上面两个基础问题的。 Docker 也有Volume的概念,但是相对简单,而且目前的支持很有限,Kubernetes对Volume则有着清晰定义和广泛的支持。其中最核心的理念:Volume只是一个目录,并可以被在同一个Pod中的所有容器访问。而这个目录会是什么样,后端用什么介质和里面的内容则由使用的特定Volume类型决定。 创建一个带Volume的Pod: spec.volumes 指定这个Pod需要的volume信息 spec.containers.volumeMounts 指定哪些container需要用到这个Volume Kubernetes对Volume的支持非常广泛,有很多贡献者为其添加不同的存储支持,也反映出Kubernetes社区的活跃程度。 emptyDir 随Pod删除,适用于临时存储、灾难恢复、共享运行时数据,支持 RAM-backed filesystemhostPath 类似于Docker的本地Volume 用于访问一些本地资源(比如本地Docker)。 gcePersistentDisk GCE disk - 只有在 Google Cloud Engine 平台上可用。 awsElasticBlockStore 类似于GCE disk 节点必须是 AWS EC2的实例 nfs - 支持网络文件系统。 rbd - Rados Block Device - Ceph secret 用来通过Kubernetes API 向Pod 传递敏感信息,使用 tmpfs (a RAM-backed filesystem) persistentVolumeClaim - 从抽象的PV中申请资源,而无需关心存储的提供方 glusterfs iscsi gitRepo 根据自己的需求选择合适的存储类型,反正支持的够多,总用一款适合的 :) 7)安全 一些主要原则: 基础设施模块应该通过API server交换数据、修改系统状态,而且只有API server可以访问后端存储(etcd)。 把用户分为不同的角色:Developers/Project Admins/Administrators。 允许Developers定义secrets 对象,并在pod启动时关联到相关容器。 以secret 为例,如果kubelet要去pull 私有镜像,那么Kubernetes支持以下方式: 通过docker login 生成 .dockercfg 文件,进行全局授权。 通过在每个namespace上创建用户的secret对象,在创建Pod时指定 imagePullSecrets 属性(也可以统一设置在serviceAcouunt 上),进行授权。 认证 (Authentication) API server 支持证书、token、和基本信息三种认证方式。 授权 (Authorization) 通过apiserver的安全端口,authorization会应用到所有http的请求上 AlwaysDeny、AlwaysAllow、ABAC三种模式,其他需求可以自己实现Authorizer接口。 8)监控 比较老的版本Kubernetes需要外接cadvisor主要功能是将node主机的container metrics抓取出来。在较新的版本里,cadvior功能被集成到了kubelet组件中,kubelet在与docker交互的同时,对外提供监控服务。 Kubernetes集群范围内的监控主要由kubelet、heapster和storage backend(如influxdb)构建。Heapster可以在集群范围获取metrics和事件数据。它可以以pod的方式运行在k8s平台里,也可以单独运行以standalone的方式。 注意: heapster目前未到1.0版本,对于小规模的集群监控比较方便。但对于较大规模的集群,heapster目前的cache方式会吃掉大量内存。因为要定时获取整个集群的容器信息,信息在内存的临时存储成为问题,再加上heaspter要支持api获取临时metrics,如果将heapster以pod方式运行,很容易出现OOM。所以目前建议关掉cache并以standalone的方式独立出k8s平台。 此答案来源于网络,希望对你有所帮助。

养狐狸的猫 2019-12-02 02:13:33 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 随着业务的增长,您的数据盘容量可能无法满足数据存储的需要,这时您可以使用 磁盘扩容 功能扩容数据盘。 说明 建议在扩容数据盘之前手动创建快照,以备份数据。 无论数据盘的状态是 待挂载 还是 使用中,都可以执行磁盘扩容操作。 如果数据盘正在创建快照,则不允许执行扩容数据盘的操作。 包年包月实例如果做过 续费降配 操作,当前计费周期的剩余时间内,实例上的包年包月云盘不支持扩容磁盘操作。 扩容磁盘只是扩大数据盘容量,而不是扩容文件系统。 磁盘扩容只能扩容数据盘,不能扩容系统盘或本地盘(本地 SSD 盘等)。 挂载在实例上的数据盘,只有当实例处于 运行中 (Running) 或 已停止(Stopped) 状态时才可以扩容。扩容这种数据盘需要在控制台上重启实例后才能使扩容后的容量生效,而重启实例会使您的实例停止工作,从而中断您的业务,所以请您谨慎操作。 本文以一个高效云盘的数据盘和一个运行Windows Server 2008 R2企业版64位中文版的ECS实例为例,说明如何扩容数据盘并使扩容后的容量可用。示例中最初的磁盘大小为24 GiB,我们将其扩容到26 GiB。 您可以按以下步骤完成扩容操作: 步骤 1. 在控制台上扩容数据盘 步骤 2. 登录实例完成扩容 步骤 1. 在控制台上扩容数据盘 按以下步骤在控制台上扩容数据盘: 登录 ECS管理控制台。 在左侧导航栏里,选择 存储 > 云盘。 说明 如果您需要扩容的数据盘已经挂载在某个实例上,您可以单击 实例,找到相应实例后,进入实例详情页,并单击 本实例磁盘。 选择地域。 找到需要扩容的磁盘,并在 操作 列中,选择 更多 > 磁盘扩容。 在 磁盘扩容 页面上,设置 扩容后容量。在本示例中为26 GiB。扩容后容量只能比当前容量大。 待页面上显示费用信息后,单击 确定扩容。 说明 扩容成功后,磁盘列表里即显示扩容后的容量。但是,如果您的数据盘已经挂载到实例上,您需要在控制台上 重启实例 后,登录实例才能看到扩容后的数据盘容量。 在控制台上完成扩容后, 如果数据盘已经挂载到实例,可以直接执行 步骤 2. 登录实例完成扩容。 如果数据盘未挂载到实例上,您应先挂载数据盘(详见 挂载云盘),再根据数据盘的实际情况执行不同的操作: 如果这是一个全新的数据盘,您可以直接格式化数据盘。详见 Windows 格式化数据盘。 如果这个数据盘之前已经格式化并分区,您需要执行 步骤 2. 登录实例完成扩容。 步骤 2. 登录实例完成扩容 按以下步骤在实例内部完成数据盘扩容: 使用软件连接Windows实例。 在Windows Server桌面,单击服务器管理器图标 。 在 服务器管理器 的左侧导航窗格里,选择 存储 > 磁盘管理。在磁盘管理区域,可以看到新增的数据盘空间与旧的数据盘空间之间的关系。本例中,磁盘 2 是扩容的数据盘。 右键单击 磁盘 2,选择 转换到动态磁盘,并按页面提示将基本磁盘转换为动态磁盘。 说明 基本磁盘转换成动态磁盘,操作的过程中会将磁盘从系统中卸载下来。如果数据盘内安装了应用程序,转换过程中这些应用程序暂时无法使用。转换过程中不会造成数据丢失。 完成转换后,磁盘 2 在磁盘管理器中显示如下。 右键单击磁盘 2的简单卷的任一空白处,并选择 扩展卷。 根据 扩展卷向导 的指示完成扩展卷操作。完成后,新增的数据盘空间会自动合入原来的卷中,磁盘 2 在磁盘管理器中显示如下。 说明 如果是Windows Server 2003,完成后新增的数据盘空间会自动增加到数据盘中,但是在磁盘管理器中,新增的数据盘空间会以一个独立卷的形式存在。Windows Server 2003中,扩容多少次就会有创建多少个独立的卷,不会将所有的卷都合并到之前的卷里面,但并不会影响实际使用。以下是一个Windows Server 2003系统里扩容后数据盘的显示信息。 至此,您已经完成了扩容数据盘。

2019-12-01 22:56:53 0 浏览量 回答数 0

回答

有很多下载文件的方法,接下来我将贴出最常用的一些方法;究竟哪一种对你的应用来说最实用取决于你。使用AsyncTask,在一个对话框中显示下载进度这个方法可以让你进行后台处理的同时更新UI(在这种情况下,我们将更新一个进度条) 这是实例代码: // 声明对话框是你activity的成员字段 ProgressDialog mProgressDialog; // 举例说明在onCreate中的方法 mProgressDialog = new ProgressDialog(YourActivity.this); mProgressDialog.setMessage("A message"); mProgressDialog.setIndeterminate(false); mProgressDialog.setMax(100); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); DownloadFile downloadFile = new DownloadFile(); downloadFile.execute("the url to the file you want to download"); AsyncTask像这样: // 通常,AsyncTask子类在activity类中进行声明 // 这样,你可以很容易在这里修改UI线程 private class DownloadFile extends AsyncTask<String, Integer, String> { @Override protected String doInBackground(String... sUrl) { try { URL url = new URL(sUrl[0]); URLConnection connection = url.openConnection(); connection.connect(); //这将是有用的,这样你可以显示一个典型的0-100%的进度条 int fileLength = connection.getContentLength(); // 下载文件 InputStream input = new BufferedInputStream(url.openStream()); OutputStream output = new FileOutputStream("/sdcard/file_name.extension"); byte data[] = new byte[1024]; long total = 0; int count; while ((count = input.read(data)) != -1) { total += count; publishProgress((int) (total * 100 / fileLength)); output.write(data, 0, count); } output.flush(); output.close(); input.close(); } catch (Exception e) { } return null; } 上边的方法(doInBackground)一直在一个后台线程中进行。你不需要做任何UI的任务。另一方面,onProgressUpdate和onPreExecute在UI线程上运行,因此你可以改变进度条 @Override protected void onPreExecute() { super.onPreExecute(); mProgressDialog.show(); } @Override protected void onProgressUpdate(Integer... progress) { super.onProgressUpdate(progress); mProgressDialog.setProgress(progress[0]); } } 一旦文件已经下载完,如果你想要执行一些代码(例如mProgressDialog.dismiss()),你也可能想要重写onPostExecute方法。 2.从服务器下载 这个大的问题是:我如何从服务器上更新我的activity?在下个示例中,我们将使用两个你可能没有太注意过的类:ResultReceiver和IntentService. ResultReceiver允许我们从服务器上更新我们的线程的类,IntentService 是Service的一个子类,从那,它可以产生一个线程来处理后台任务(你应该知道,你的应用的Service在同样的进程运行;当你继承Service时,你必须手动生成新的线程来运行CPU的阻塞操作) 可以像这样: public class DownloadService extends IntentService { public static final int UPDATE_PROGRESS= 8344;‘ public DownloadService() { super("DownloadService"); } @Override protected void onHandleIntent(Intent intent) { String urlToDownload= intent.getStringExtra("url"); ResultReceiver receiver= (ResultReceiver) intent.getParcelableExtra("receiver"); try { URL url= new URL(urlToDownload); URLConnection connection= url.openConnection(); connection.connect(); // 这将是有用的,这样你可以显示一个典型的0-100%的进度条 int fileLength= connection.getContentLength(); // 下载文件 InputStream input= new BufferedInputStream(url.openStream()); OutputStream output= new FileOutputStream("/sdcard/BarcodeScanner-debug.apk"); byte data[] = new byte[1024]; long total= 0; int count; while ((count= input.read(data)) != -1) { total+= count; Bundle resultData= new Bundle(); resultData.putInt("progress" ,(int) (total* 100 / fileLength)); receiver.send(UPDATE_PROGRESS, resultData); output.write(data, 0, count); } output.flush(); output.close(); input.close(); }catch (IOException e) { e.printStackTrace(); } Bundle resultData= new Bundle(); resultData.putInt("progress" ,100); receiver.send(UPDATE_PROGRESS, resultData); } } 向你的manifest中加serviceActivity将像这样// 像第一个例子那样初始化进度条//这是你怎么启动下载器mProgressDialog.show();Intent intent = new Intent(this, DownloadService.class);intent.putExtra("url", "url of the file to download");intent.putExtra("receiver", new DownloadReceiver(new Handler()));startService(intent);这是ResultReceiver开始起作用 private class DownloadReceiver extends ResultReceiver{ public DownloadReceiver(Handler handler) { super(handler); } @Override protected void onReceiveResult(int resultCode, Bundle resultData) { super.onReceiveResult(resultCode, resultData); if (resultCode == DownloadService.UPDATE_PROGRESS) { int progress = resultData.getInt("progress"); mProgressDialog.setProgress(progress); if (progress == 100) { mProgressDialog.dismiss(); } } } } 3.使用DownloadManager 类(GingerBread ,而且仅仅是最新的) 这个方法是可怕的,你不用担心手动下载文件,处理线程,数据流,等等。GingerBread有一个新的特点,DownloadManager可以让你很容易的下载文件,然后将辛苦的工作给系统做。 /** * @ param上下文用来检查设备的版本和DownloadManager信息 * @如果下载管理器可以用,则返回true */ public static boolean isDownloadManagerAvailable(Context context) { try { if (Build.VERSION.SDK_INT< Build.VERSION_CODES.GINGERBREAD) { return false; } Intent intent= new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setClassName("com.android.providers.downloads.ui", "com.android.providers.downloads.ui.DownloadList"); List<ResolveInfo> list= context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); return list.size() > 0; } catch (Exception e) { return false; } } 方法的名字直接就解释了。一旦你确定DownloadManager是可用的,你可以做下边这些: String url= "url you want to download"; DownloadManager.Request request= new DownloadManager.Request(Uri.parse(url)); request.setDescription("Some descrition");request.setTitle("Some title"); // 如果为了让它运行,你必须用android3.2编译你的应用程序 if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.HONEYCOMB) { request.allowScanningByMediaScanner(); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "name-of-the-file.ext"); // 获得下载服务和队列文件 DownloadManager manager= (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); manager.enqueue(request); 下载进度条将在通知栏显示第一个和第二个方法仅仅是冰山一角。如果你想要你的app是健壮的,这有很多事情需要你记住。这是一个简短的列表:你必须检查用户是否有可用的网络链接。确定你有权限((INTERNET and WRITE_EXTERNAL_STORAGE);如果你想要检查网络是否可用也可以用ACCESS_NETWORK_STATE确保你要下载的文件的目录存在,有读写权限如果下载包太大,之前的下载失败了,你可能需要实现一种方法来恢复下载如果你允许用户中断下载,他们会很感激你。除非你已经完全控制了下载过程,否则我强烈建议你使用DownloadManager ,它已经实现了上边列出的大部分功能。

蛮大人123 2019-12-02 01:47:37 0 浏览量 回答数 0

问题

用户指南-数据迁移- SQL Server备份数据上云-增量备份 数据上云SQL Server 2012

李沃晟 2019-12-01 21:39:45 720 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 注意:无法打开网站时,应该先搜索排查报错提示的含义,本文列举了一些常见的报错情况。 无法访问 ECS 实例上的网站时的分析思路: 根据报错情况分析网络通信问题 ECS Linux 实例网络通信问题排查ECS Windows 实例网络通信问题排查 端口通信问题 ECS Linux 实例端口通信问题ECS Windows 实例端口通信问题 防火墙配置异常 ECS Windows 实例远程无法连接,关闭防火墙后连接恢复正常ECS Linux 实例 SSH 无法连接,关闭 Iptables 后连接恢复正常 重新配置安全组公网规则 网络通信问题 ECS Linux 实例网络通信问题排查 执行 ifconfig 和 ip addr 网络检测命令查看 IP 地址。 执行命令 route -n 通过实例路由表查看网关。 ECS Windows 实例网络通信问题排查 打开 CMD,执行 ipconfig 网络检测命令查看 IP 地址。 执行命令 route print 通过实例路由表查看网关。 注意: 若网卡驱动未开启或网卡配置有问题,请检查网卡驱动,并重新安装。 关于网络相关问题的测试工具,详见 ping 丢包或不通时链路测试说明。 端口通信问题 ECS Linux 实例端口通信问题 执行命令 netstat –antpu | grep sshd 检测 sshd 服务的运行状态,确认端口是否有正常监听。 执行下列命令查看服务运行状态: CentOS6:service sshd statusCentOS7:systemctl status sshd 如果 sshd 服务没有正常运行,执行下列命令手动启动 sshd 服务: CentOS6:service sshd restartCentOS7:systemctl restart sshd 查看 sshd 程序日志 如果无法正常启动 sshd 服务,CentOS 6 系统一般会直接输出错误信息,而CentOS 7 启动时没有输出信息,需要通过 secure 日志进行查看。sshd 日志:/var/log/secure。 通过 secure 日志的报错信息,一般是可以定位绝大部分 sshd 启动异常的问题。 ECS Windows 实例端口通信问题 执行远程端口检测命令: Tasklist /svc | findstr “Ter”netstat –ano | findstr “$PID” 防火墙配置异常 ECS Windows 实例远程无法连接,关闭防火墙后连接恢复正常 前提条件:您只有在已授权可关闭防火墙的情况下,才能做该项排查。 调整防火墙配置策略,详见:ECS Windows 远程连接之防火墙设置。 调整后,重新进行远程连接。 ECS Linux 实例 SSH 无法连接,关闭 Iptables 后连接恢复正常 前提条件:您只有在已授权可关闭 Iptables 的情况下,才能做调整 Iptables 配置策略排查。 执行命令 iptables -nvL –line-number 查看防火墙规则: n 不对 IP 地址进行反查,加上这个参数显示速度会快很多。 v 输出详细信息,包含通过该规则的数据包数量、总字节数及相应的网络接口。 L 查看当前表的所有规则,默认查看的是 filter 表,如果要查看 NAT 表,可以加上 -t NAT 参数。 修改规则。(若您之前已设置过规则策略,执行命令 cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.bak 保存一份原有的 Iptables 文件,避免丢失已设置过策略。) 执行命令 iptables -F 清空实例上所有的规则。 执行命令 iptables -P INPUT DROP 拒绝 INPUT 方向所有的请求都。 注意:线上业务请勿直接操作,会导致业务直接中断。 执行下列命令放行端口 22: iptables -A INPUT -p tcp --dport 22 -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -j ACCEPT执行下列命令指定 IP 访问端口 22: iptables -I INPUT -s 192.168.1.1 -p tcp --dport 22 -j ACCEPT 说明: 192.168.1.1 为请求端 IP 地址。 执行命令 iptables -L 查看添加的规则是否生效。 执行命令 iptables-save > /etc/sysconfig/iptables 保存添加的规则。 执行命令 service iptables restart 或 /etc/init.d/iptables restart 重启 Iptables。 执行命令 systemctl reboot 重启实例验证配置。 重新进行 SSH 连接。 重新配置安全组公网规则 原因分析:安全组默认没有放行网站使用的端口(如 80 端口)。您需要自行放行该接口。 解决方法: 登录 ECS 控制台,找到该实例。单击实例 ID,进入详情页,再单击本实例安全组 > 配置规则 >添加安全组规则。根据网站使用的端口配置新的安全组规则,放行网站使用的端口,最后单击确定。 可参考文档添加安全组规则。 根据报错情况分析 报错情况比较复杂,此处列出比较常见的几种报错内容: 403 报错:403 报错是一个大类,403 的报错基本上是权限问题,出现 403 报错时您需要检测权限配置问题。 403.1 错误是由于“执行”访问被禁止而造成的。若试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序时便会出现此种错误。403.2 错误是由于”读取”访问被禁止而造成的。导致此错误是由于没有可用的默认网页并且没有对目录启用目录浏览,或者要显示的 HTML 网页所驻留的目录仅标记为“可执行”或“脚本”权限。403.3 错误是由于“写入”访问被禁止而造成的。当试图将文件上载到目录或在目录中修改文件,但该目录不允许“写”访问时就会出现此种错误。403.4 错误是由于要求 SSL 而造成的。您必须在要查看的网页的地址中使用 HTTPS。403.5 错误是由于要求使用 128 位加密算法的 Web 浏览器而造成的。如果您的浏览器不支持 128 位加密算法就会出现这个错误,您可以连接微软网站进行浏览器升级。403.6 错误是由于 IP 地址被拒绝而造成的。如果服务器中有不能访问该站点的IP地址列表,并且您使用的 IP 地址在该列表中时您就会返回这条错误信息。403.7 错误是因为要求客户证书。当需要访问的资源要求浏览器拥有服务器能够识别的安全套接字层(SSL)客户证书时会返回此种错误。403.8 错误是由于禁止站点访问而造成的。若服务器中有不能访问该站点的 DNS 名称列表,而您使用的 DNS 名称在列表中时就会返回此种信息。请注意区别 403.6 与 403.8 错误。403.9 错误是由于连接的用户过多而造成的,由于 Web 服务器很忙,因通讯量过多而无法处理请求时便会返回这条错误。403.10 错误是由于无效配置而导致的错误。当您试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序时便会返回这条错误。403.11 错误是由于密码更改而导致无权查看页面。403.12 错误是由于映射器拒绝访问而造成的。若要查看的网页要求使用有效的客户证书,而您的客户证书映射没有权限访问该 Web 站点时就会返回映射器拒绝访问的错误。403.13 错误是由于需要查看的网页要求使用有效的客户证书而使用的客户证书已经被吊销,或者无法确定证书是否已吊销造成的。403.14 错误 Web 服务器被配置为不列出此目录的内容,拒绝目录列表。403.15 错误是由于客户访问许可过多而造成的。当服务器超出其客户访问许可限制时会返回此条错误。403.16 错误是由于客户证书不可信或者无效而造成的。403.17 错误是由于客户证书已经到期或者尚未生效而造成的。 404 报错:404 报错主要是页面显示问题或者页面的链接有问题,意味着链接指向的网页不存在,即原始网页的 URL 失效。当 Web 服务器接到类似请求时,会返回一个 404 状态码,告诉浏览器已请求的资源并不存在。导致这个错误的原因一般有以下几种情况: 无法在所请求的端口上访问 Web 站点。Web 服务扩展锁定策略阻止本请求。MIME 映射策略阻止本请求。网站更新改版,但某些局部板块沿用原来的模块,而原有的模块调用的文件已经被删除或转移了路径。跟踪访问的各类脚码或 CSS 文件无效但调用代码依然存在。某个目录直接删除(导致一段时间该目录的文件在被爬行时全部报 404 Not Found 错误)网页 URL 生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的 URL 地址无法访问 502 报错:当测试访问报错为 502 Bad Gateway,这是 Web 程序配置异常导致的。建议结合 Web 访问日志,检测一下 Web 程序配置的参数设置是否有异常。详情请参见 502 bad gateway问题的解决方法。503 报错:503 报错是一种 HTTP 状态码,与 404 同属一种网页状态出错码。两者的区别是:前者是服务器出错的一种返回状态,后者是网页程序没有相关结果后返回的一种状态。503 报错产生的原因有可能是以下几种情况: 网络管理员可能关闭应用程序池以执行维护。当请求到达时应用程序池队列已满。应用程序池标识没有使用预定义账户:网络服务。而自己配置了标识,但是配置的这个用户不属于 IIS_WPG 组。应用程序池启用了 CPU 监视,并且设置了 CPU 利用率超过一定百分比关闭应用程序池,而开发人员写的服务端页面 (.asp、.aspx) 执行效率不高,会引起 CPU 的长时间占用,最终达到设置的百分比,从而引起应用程序池关闭。应用程序池的性能选项卡的请求队列限制所填的数值太小,默认为 1000。某个目录直接删除(导致一段时间该目录的文件在被爬行时全部报 404 Not Found 错误)。网页 URL 生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的 URL 地址无法访问。该站点正在被攻击。对于最新型的攻击,其实是 DDoS 的一种派生,原理在于找数千个IP,同时向服务器的 Apache 发出请求,然后 立即断开,让 Apache 处于等待状态,致使 Apache 线程全部被填满,致使服务器死机。因此,为了保证大多数客户的利益,我们给每个空间,作出了每 19 秒 64 个 php 请求的限制。注意,是 php 请求,一般的图片请求和 html 请求不包括在内。该程序占用的 php 线程过多,有的程序没有进行好优化处理,一个点击即可产生数个,甚至数十个 php 线程。这样的话,几个点击就可以把该时段的64个 php 线程全部填满了。因此出现 503 错误。建议优化一下程序,尽量少用 require (请求)等语句。 如问题还未解决,请您记录排查结果、相关日志信息或截图,提交工单联系阿里云。

2019-12-01 23:11:56 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 注意:无法打开网站时,应该先搜索排查报错提示的含义,本文列举了一些常见的报错情况。 无法访问 ECS 实例上的网站时的分析思路: 根据报错情况分析网络通信问题 ECS Linux 实例网络通信问题排查ECS Windows 实例网络通信问题排查 端口通信问题 ECS Linux 实例端口通信问题ECS Windows 实例端口通信问题 防火墙配置异常 ECS Windows 实例远程无法连接,关闭防火墙后连接恢复正常ECS Linux 实例 SSH 无法连接,关闭 Iptables 后连接恢复正常 重新配置安全组公网规则 网络通信问题 ECS Linux 实例网络通信问题排查 执行 ifconfig 和 ip addr 网络检测命令查看 IP 地址。 执行命令 route -n 通过实例路由表查看网关。 ECS Windows 实例网络通信问题排查 打开 CMD,执行 ipconfig 网络检测命令查看 IP 地址。 执行命令 route print 通过实例路由表查看网关。 注意: 若网卡驱动未开启或网卡配置有问题,请检查网卡驱动,并重新安装。 关于网络相关问题的测试工具,详见 ping 丢包或不通时链路测试说明。 端口通信问题 ECS Linux 实例端口通信问题 执行命令 netstat –antpu | grep sshd 检测 sshd 服务的运行状态,确认端口是否有正常监听。 执行下列命令查看服务运行状态: CentOS6:service sshd statusCentOS7:systemctl status sshd 如果 sshd 服务没有正常运行,执行下列命令手动启动 sshd 服务: CentOS6:service sshd restartCentOS7:systemctl restart sshd 查看 sshd 程序日志 如果无法正常启动 sshd 服务,CentOS 6 系统一般会直接输出错误信息,而CentOS 7 启动时没有输出信息,需要通过 secure 日志进行查看。sshd 日志:/var/log/secure。 通过 secure 日志的报错信息,一般是可以定位绝大部分 sshd 启动异常的问题。 ECS Windows 实例端口通信问题 执行远程端口检测命令: Tasklist /svc | findstr “Ter”netstat –ano | findstr “$PID” 防火墙配置异常 ECS Windows 实例远程无法连接,关闭防火墙后连接恢复正常 前提条件:您只有在已授权可关闭防火墙的情况下,才能做该项排查。 调整防火墙配置策略,详见:ECS Windows 远程连接之防火墙设置。 调整后,重新进行远程连接。 ECS Linux 实例 SSH 无法连接,关闭 Iptables 后连接恢复正常 前提条件:您只有在已授权可关闭 Iptables 的情况下,才能做调整 Iptables 配置策略排查。 执行命令 iptables -nvL –line-number 查看防火墙规则: n 不对 IP 地址进行反查,加上这个参数显示速度会快很多。 v 输出详细信息,包含通过该规则的数据包数量、总字节数及相应的网络接口。 L 查看当前表的所有规则,默认查看的是 filter 表,如果要查看 NAT 表,可以加上 -t NAT 参数。 修改规则。(若您之前已设置过规则策略,执行命令 cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.bak 保存一份原有的 Iptables 文件,避免丢失已设置过策略。) 执行命令 iptables -F 清空实例上所有的规则。 执行命令 iptables -P INPUT DROP 拒绝 INPUT 方向所有的请求都。 注意:线上业务请勿直接操作,会导致业务直接中断。 执行下列命令放行端口 22: iptables -A INPUT -p tcp --dport 22 -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -j ACCEPT执行下列命令指定 IP 访问端口 22: iptables -I INPUT -s 192.168.1.1 -p tcp --dport 22 -j ACCEPT 说明: 192.168.1.1 为请求端 IP 地址。 执行命令 iptables -L 查看添加的规则是否生效。 执行命令 iptables-save > /etc/sysconfig/iptables 保存添加的规则。 执行命令 service iptables restart 或 /etc/init.d/iptables restart 重启 Iptables。 执行命令 systemctl reboot 重启实例验证配置。 重新进行 SSH 连接。 重新配置安全组公网规则 原因分析:安全组默认没有放行网站使用的端口(如 80 端口)。您需要自行放行该接口。 解决方法: 登录 ECS 控制台,找到该实例。单击实例 ID,进入详情页,再单击本实例安全组 > 配置规则 >添加安全组规则。根据网站使用的端口配置新的安全组规则,放行网站使用的端口,最后单击确定。 可参考文档添加安全组规则。 根据报错情况分析 报错情况比较复杂,此处列出比较常见的几种报错内容: 403 报错:403 报错是一个大类,403 的报错基本上是权限问题,出现 403 报错时您需要检测权限配置问题。 403.1 错误是由于“执行”访问被禁止而造成的。若试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序时便会出现此种错误。403.2 错误是由于”读取”访问被禁止而造成的。导致此错误是由于没有可用的默认网页并且没有对目录启用目录浏览,或者要显示的 HTML 网页所驻留的目录仅标记为“可执行”或“脚本”权限。403.3 错误是由于“写入”访问被禁止而造成的。当试图将文件上载到目录或在目录中修改文件,但该目录不允许“写”访问时就会出现此种错误。403.4 错误是由于要求 SSL 而造成的。您必须在要查看的网页的地址中使用 HTTPS。403.5 错误是由于要求使用 128 位加密算法的 Web 浏览器而造成的。如果您的浏览器不支持 128 位加密算法就会出现这个错误,您可以连接微软网站进行浏览器升级。403.6 错误是由于 IP 地址被拒绝而造成的。如果服务器中有不能访问该站点的IP地址列表,并且您使用的 IP 地址在该列表中时您就会返回这条错误信息。403.7 错误是因为要求客户证书。当需要访问的资源要求浏览器拥有服务器能够识别的安全套接字层(SSL)客户证书时会返回此种错误。403.8 错误是由于禁止站点访问而造成的。若服务器中有不能访问该站点的 DNS 名称列表,而您使用的 DNS 名称在列表中时就会返回此种信息。请注意区别 403.6 与 403.8 错误。403.9 错误是由于连接的用户过多而造成的,由于 Web 服务器很忙,因通讯量过多而无法处理请求时便会返回这条错误。403.10 错误是由于无效配置而导致的错误。当您试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序时便会返回这条错误。403.11 错误是由于密码更改而导致无权查看页面。403.12 错误是由于映射器拒绝访问而造成的。若要查看的网页要求使用有效的客户证书,而您的客户证书映射没有权限访问该 Web 站点时就会返回映射器拒绝访问的错误。403.13 错误是由于需要查看的网页要求使用有效的客户证书而使用的客户证书已经被吊销,或者无法确定证书是否已吊销造成的。403.14 错误 Web 服务器被配置为不列出此目录的内容,拒绝目录列表。403.15 错误是由于客户访问许可过多而造成的。当服务器超出其客户访问许可限制时会返回此条错误。403.16 错误是由于客户证书不可信或者无效而造成的。403.17 错误是由于客户证书已经到期或者尚未生效而造成的。 404 报错:404 报错主要是页面显示问题或者页面的链接有问题,意味着链接指向的网页不存在,即原始网页的 URL 失效。当 Web 服务器接到类似请求时,会返回一个 404 状态码,告诉浏览器已请求的资源并不存在。导致这个错误的原因一般有以下几种情况: 无法在所请求的端口上访问 Web 站点。Web 服务扩展锁定策略阻止本请求。MIME 映射策略阻止本请求。网站更新改版,但某些局部板块沿用原来的模块,而原有的模块调用的文件已经被删除或转移了路径。跟踪访问的各类脚码或 CSS 文件无效但调用代码依然存在。某个目录直接删除(导致一段时间该目录的文件在被爬行时全部报 404 Not Found 错误)网页 URL 生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的 URL 地址无法访问 502 报错:当测试访问报错为 502 Bad Gateway,这是 Web 程序配置异常导致的。建议结合 Web 访问日志,检测一下 Web 程序配置的参数设置是否有异常。详情请参见 502 bad gateway问题的解决方法。503 报错:503 报错是一种 HTTP 状态码,与 404 同属一种网页状态出错码。两者的区别是:前者是服务器出错的一种返回状态,后者是网页程序没有相关结果后返回的一种状态。503 报错产生的原因有可能是以下几种情况: 网络管理员可能关闭应用程序池以执行维护。当请求到达时应用程序池队列已满。应用程序池标识没有使用预定义账户:网络服务。而自己配置了标识,但是配置的这个用户不属于 IIS_WPG 组。应用程序池启用了 CPU 监视,并且设置了 CPU 利用率超过一定百分比关闭应用程序池,而开发人员写的服务端页面 (.asp、.aspx) 执行效率不高,会引起 CPU 的长时间占用,最终达到设置的百分比,从而引起应用程序池关闭。应用程序池的性能选项卡的请求队列限制所填的数值太小,默认为 1000。某个目录直接删除(导致一段时间该目录的文件在被爬行时全部报 404 Not Found 错误)。网页 URL 生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的 URL 地址无法访问。该站点正在被攻击。对于最新型的攻击,其实是 DDoS 的一种派生,原理在于找数千个IP,同时向服务器的 Apache 发出请求,然后 立即断开,让 Apache 处于等待状态,致使 Apache 线程全部被填满,致使服务器死机。因此,为了保证大多数客户的利益,我们给每个空间,作出了每 19 秒 64 个 php 请求的限制。注意,是 php 请求,一般的图片请求和 html 请求不包括在内。该程序占用的 php 线程过多,有的程序没有进行好优化处理,一个点击即可产生数个,甚至数十个 php 线程。这样的话,几个点击就可以把该时段的64个 php 线程全部填满了。因此出现 503 错误。建议优化一下程序,尽量少用 require (请求)等语句。 如问题还未解决,请您记录排查结果、相关日志信息或截图,提交工单联系阿里云。

2019-12-01 23:11:57 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 注意:无法打开网站时,应该先搜索排查报错提示的含义,本文列举了一些常见的报错情况。 无法访问 ECS 实例上的网站时的分析思路: 根据报错情况分析网络通信问题 ECS Linux 实例网络通信问题排查ECS Windows 实例网络通信问题排查 端口通信问题 ECS Linux 实例端口通信问题ECS Windows 实例端口通信问题 防火墙配置异常 ECS Windows 实例远程无法连接,关闭防火墙后连接恢复正常ECS Linux 实例 SSH 无法连接,关闭 Iptables 后连接恢复正常 重新配置安全组公网规则 网络通信问题 ECS Linux 实例网络通信问题排查 执行 ifconfig 和 ip addr 网络检测命令查看 IP 地址。 执行命令 route -n 通过实例路由表查看网关。 ECS Windows 实例网络通信问题排查 打开 CMD,执行 ipconfig 网络检测命令查看 IP 地址。 执行命令 route print 通过实例路由表查看网关。 注意: 若网卡驱动未开启或网卡配置有问题,请检查网卡驱动,并重新安装。 关于网络相关问题的测试工具,详见 ping 丢包或不通时链路测试说明。 端口通信问题 ECS Linux 实例端口通信问题 执行命令 netstat –antpu | grep sshd 检测 sshd 服务的运行状态,确认端口是否有正常监听。 执行下列命令查看服务运行状态: CentOS6:service sshd statusCentOS7:systemctl status sshd 如果 sshd 服务没有正常运行,执行下列命令手动启动 sshd 服务: CentOS6:service sshd restartCentOS7:systemctl restart sshd 查看 sshd 程序日志 如果无法正常启动 sshd 服务,CentOS 6 系统一般会直接输出错误信息,而CentOS 7 启动时没有输出信息,需要通过 secure 日志进行查看。sshd 日志:/var/log/secure。 通过 secure 日志的报错信息,一般是可以定位绝大部分 sshd 启动异常的问题。 ECS Windows 实例端口通信问题 执行远程端口检测命令: Tasklist /svc | findstr “Ter”netstat –ano | findstr “$PID” 防火墙配置异常 ECS Windows 实例远程无法连接,关闭防火墙后连接恢复正常 前提条件:您只有在已授权可关闭防火墙的情况下,才能做该项排查。 调整防火墙配置策略,详见:ECS Windows 远程连接之防火墙设置。 调整后,重新进行远程连接。 ECS Linux 实例 SSH 无法连接,关闭 Iptables 后连接恢复正常 前提条件:您只有在已授权可关闭 Iptables 的情况下,才能做调整 Iptables 配置策略排查。 执行命令 iptables -nvL –line-number 查看防火墙规则: n 不对 IP 地址进行反查,加上这个参数显示速度会快很多。 v 输出详细信息,包含通过该规则的数据包数量、总字节数及相应的网络接口。 L 查看当前表的所有规则,默认查看的是 filter 表,如果要查看 NAT 表,可以加上 -t NAT 参数。 修改规则。(若您之前已设置过规则策略,执行命令 cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.bak 保存一份原有的 Iptables 文件,避免丢失已设置过策略。) 执行命令 iptables -F 清空实例上所有的规则。 执行命令 iptables -P INPUT DROP 拒绝 INPUT 方向所有的请求都。 注意:线上业务请勿直接操作,会导致业务直接中断。 执行下列命令放行端口 22: iptables -A INPUT -p tcp --dport 22 -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -j ACCEPT执行下列命令指定 IP 访问端口 22: iptables -I INPUT -s 192.168.1.1 -p tcp --dport 22 -j ACCEPT 说明: 192.168.1.1 为请求端 IP 地址。 执行命令 iptables -L 查看添加的规则是否生效。 执行命令 iptables-save > /etc/sysconfig/iptables 保存添加的规则。 执行命令 service iptables restart 或 /etc/init.d/iptables restart 重启 Iptables。 执行命令 systemctl reboot 重启实例验证配置。 重新进行 SSH 连接。 重新配置安全组公网规则 原因分析:安全组默认没有放行网站使用的端口(如 80 端口)。您需要自行放行该接口。 解决方法: 登录 ECS 控制台,找到该实例。单击实例 ID,进入详情页,再单击本实例安全组 > 配置规则 >添加安全组规则。根据网站使用的端口配置新的安全组规则,放行网站使用的端口,最后单击确定。 可参考文档添加安全组规则。 根据报错情况分析 报错情况比较复杂,此处列出比较常见的几种报错内容: 403 报错:403 报错是一个大类,403 的报错基本上是权限问题,出现 403 报错时您需要检测权限配置问题。 403.1 错误是由于“执行”访问被禁止而造成的。若试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序时便会出现此种错误。403.2 错误是由于”读取”访问被禁止而造成的。导致此错误是由于没有可用的默认网页并且没有对目录启用目录浏览,或者要显示的 HTML 网页所驻留的目录仅标记为“可执行”或“脚本”权限。403.3 错误是由于“写入”访问被禁止而造成的。当试图将文件上载到目录或在目录中修改文件,但该目录不允许“写”访问时就会出现此种错误。403.4 错误是由于要求 SSL 而造成的。您必须在要查看的网页的地址中使用 HTTPS。403.5 错误是由于要求使用 128 位加密算法的 Web 浏览器而造成的。如果您的浏览器不支持 128 位加密算法就会出现这个错误,您可以连接微软网站进行浏览器升级。403.6 错误是由于 IP 地址被拒绝而造成的。如果服务器中有不能访问该站点的IP地址列表,并且您使用的 IP 地址在该列表中时您就会返回这条错误信息。403.7 错误是因为要求客户证书。当需要访问的资源要求浏览器拥有服务器能够识别的安全套接字层(SSL)客户证书时会返回此种错误。403.8 错误是由于禁止站点访问而造成的。若服务器中有不能访问该站点的 DNS 名称列表,而您使用的 DNS 名称在列表中时就会返回此种信息。请注意区别 403.6 与 403.8 错误。403.9 错误是由于连接的用户过多而造成的,由于 Web 服务器很忙,因通讯量过多而无法处理请求时便会返回这条错误。403.10 错误是由于无效配置而导致的错误。当您试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序时便会返回这条错误。403.11 错误是由于密码更改而导致无权查看页面。403.12 错误是由于映射器拒绝访问而造成的。若要查看的网页要求使用有效的客户证书,而您的客户证书映射没有权限访问该 Web 站点时就会返回映射器拒绝访问的错误。403.13 错误是由于需要查看的网页要求使用有效的客户证书而使用的客户证书已经被吊销,或者无法确定证书是否已吊销造成的。403.14 错误 Web 服务器被配置为不列出此目录的内容,拒绝目录列表。403.15 错误是由于客户访问许可过多而造成的。当服务器超出其客户访问许可限制时会返回此条错误。403.16 错误是由于客户证书不可信或者无效而造成的。403.17 错误是由于客户证书已经到期或者尚未生效而造成的。 404 报错:404 报错主要是页面显示问题或者页面的链接有问题,意味着链接指向的网页不存在,即原始网页的 URL 失效。当 Web 服务器接到类似请求时,会返回一个 404 状态码,告诉浏览器已请求的资源并不存在。导致这个错误的原因一般有以下几种情况: 无法在所请求的端口上访问 Web 站点。Web 服务扩展锁定策略阻止本请求。MIME 映射策略阻止本请求。网站更新改版,但某些局部板块沿用原来的模块,而原有的模块调用的文件已经被删除或转移了路径。跟踪访问的各类脚码或 CSS 文件无效但调用代码依然存在。某个目录直接删除(导致一段时间该目录的文件在被爬行时全部报 404 Not Found 错误)网页 URL 生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的 URL 地址无法访问 502 报错:当测试访问报错为 502 Bad Gateway,这是 Web 程序配置异常导致的。建议结合 Web 访问日志,检测一下 Web 程序配置的参数设置是否有异常。详情请参见 502 bad gateway问题的解决方法。503 报错:503 报错是一种 HTTP 状态码,与 404 同属一种网页状态出错码。两者的区别是:前者是服务器出错的一种返回状态,后者是网页程序没有相关结果后返回的一种状态。503 报错产生的原因有可能是以下几种情况: 网络管理员可能关闭应用程序池以执行维护。当请求到达时应用程序池队列已满。应用程序池标识没有使用预定义账户:网络服务。而自己配置了标识,但是配置的这个用户不属于 IIS_WPG 组。应用程序池启用了 CPU 监视,并且设置了 CPU 利用率超过一定百分比关闭应用程序池,而开发人员写的服务端页面 (.asp、.aspx) 执行效率不高,会引起 CPU 的长时间占用,最终达到设置的百分比,从而引起应用程序池关闭。应用程序池的性能选项卡的请求队列限制所填的数值太小,默认为 1000。某个目录直接删除(导致一段时间该目录的文件在被爬行时全部报 404 Not Found 错误)。网页 URL 生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的 URL 地址无法访问。该站点正在被攻击。对于最新型的攻击,其实是 DDoS 的一种派生,原理在于找数千个IP,同时向服务器的 Apache 发出请求,然后 立即断开,让 Apache 处于等待状态,致使 Apache 线程全部被填满,致使服务器死机。因此,为了保证大多数客户的利益,我们给每个空间,作出了每 19 秒 64 个 php 请求的限制。注意,是 php 请求,一般的图片请求和 html 请求不包括在内。该程序占用的 php 线程过多,有的程序没有进行好优化处理,一个点击即可产生数个,甚至数十个 php 线程。这样的话,几个点击就可以把该时段的64个 php 线程全部填满了。因此出现 503 错误。建议优化一下程序,尽量少用 require (请求)等语句。 如问题还未解决,请您记录排查结果、相关日志信息或截图,提交工单联系阿里云。

2019-12-01 23:11:57 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 注意:无法打开网站时,应该先搜索排查报错提示的含义,本文列举了一些常见的报错情况。 无法访问 ECS 实例上的网站时的分析思路: 根据报错情况分析网络通信问题 ECS Linux 实例网络通信问题排查ECS Windows 实例网络通信问题排查 端口通信问题 ECS Linux 实例端口通信问题ECS Windows 实例端口通信问题 防火墙配置异常 ECS Windows 实例远程无法连接,关闭防火墙后连接恢复正常ECS Linux 实例 SSH 无法连接,关闭 Iptables 后连接恢复正常 重新配置安全组公网规则 网络通信问题 ECS Linux 实例网络通信问题排查 执行 ifconfig 和 ip addr 网络检测命令查看 IP 地址。 执行命令 route -n 通过实例路由表查看网关。 ECS Windows 实例网络通信问题排查 打开 CMD,执行 ipconfig 网络检测命令查看 IP 地址。 执行命令 route print 通过实例路由表查看网关。 注意: 若网卡驱动未开启或网卡配置有问题,请检查网卡驱动,并重新安装。 关于网络相关问题的测试工具,详见 ping 丢包或不通时链路测试说明。 端口通信问题 ECS Linux 实例端口通信问题 执行命令 netstat –antpu | grep sshd 检测 sshd 服务的运行状态,确认端口是否有正常监听。 执行下列命令查看服务运行状态: CentOS6:service sshd statusCentOS7:systemctl status sshd 如果 sshd 服务没有正常运行,执行下列命令手动启动 sshd 服务: CentOS6:service sshd restartCentOS7:systemctl restart sshd 查看 sshd 程序日志 如果无法正常启动 sshd 服务,CentOS 6 系统一般会直接输出错误信息,而CentOS 7 启动时没有输出信息,需要通过 secure 日志进行查看。sshd 日志:/var/log/secure。 通过 secure 日志的报错信息,一般是可以定位绝大部分 sshd 启动异常的问题。 ECS Windows 实例端口通信问题 执行远程端口检测命令: Tasklist /svc | findstr “Ter”netstat –ano | findstr “$PID” 防火墙配置异常 ECS Windows 实例远程无法连接,关闭防火墙后连接恢复正常 前提条件:您只有在已授权可关闭防火墙的情况下,才能做该项排查。 调整防火墙配置策略,详见:ECS Windows 远程连接之防火墙设置。 调整后,重新进行远程连接。 ECS Linux 实例 SSH 无法连接,关闭 Iptables 后连接恢复正常 前提条件:您只有在已授权可关闭 Iptables 的情况下,才能做调整 Iptables 配置策略排查。 执行命令 iptables -nvL –line-number 查看防火墙规则: n 不对 IP 地址进行反查,加上这个参数显示速度会快很多。 v 输出详细信息,包含通过该规则的数据包数量、总字节数及相应的网络接口。 L 查看当前表的所有规则,默认查看的是 filter 表,如果要查看 NAT 表,可以加上 -t NAT 参数。 修改规则。(若您之前已设置过规则策略,执行命令 cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.bak 保存一份原有的 Iptables 文件,避免丢失已设置过策略。) 执行命令 iptables -F 清空实例上所有的规则。 执行命令 iptables -P INPUT DROP 拒绝 INPUT 方向所有的请求都。 注意:线上业务请勿直接操作,会导致业务直接中断。 执行下列命令放行端口 22: iptables -A INPUT -p tcp --dport 22 -j ACCEPTiptables -A OUTPUT -p tcp --sport 22 -j ACCEPT执行下列命令指定 IP 访问端口 22: iptables -I INPUT -s 192.168.1.1 -p tcp --dport 22 -j ACCEPT 说明: 192.168.1.1 为请求端 IP 地址。 执行命令 iptables -L 查看添加的规则是否生效。 执行命令 iptables-save > /etc/sysconfig/iptables 保存添加的规则。 执行命令 service iptables restart 或 /etc/init.d/iptables restart 重启 Iptables。 执行命令 systemctl reboot 重启实例验证配置。 重新进行 SSH 连接。 重新配置安全组公网规则 原因分析:安全组默认没有放行网站使用的端口(如 80 端口)。您需要自行放行该接口。 解决方法: 登录 ECS 控制台,找到该实例。单击实例 ID,进入详情页,再单击本实例安全组 > 配置规则 >添加安全组规则。根据网站使用的端口配置新的安全组规则,放行网站使用的端口,最后单击确定。 可参考文档添加安全组规则。 根据报错情况分析 报错情况比较复杂,此处列出比较常见的几种报错内容: 403 报错:403 报错是一个大类,403 的报错基本上是权限问题,出现 403 报错时您需要检测权限配置问题。 403.1 错误是由于“执行”访问被禁止而造成的。若试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序时便会出现此种错误。403.2 错误是由于”读取”访问被禁止而造成的。导致此错误是由于没有可用的默认网页并且没有对目录启用目录浏览,或者要显示的 HTML 网页所驻留的目录仅标记为“可执行”或“脚本”权限。403.3 错误是由于“写入”访问被禁止而造成的。当试图将文件上载到目录或在目录中修改文件,但该目录不允许“写”访问时就会出现此种错误。403.4 错误是由于要求 SSL 而造成的。您必须在要查看的网页的地址中使用 HTTPS。403.5 错误是由于要求使用 128 位加密算法的 Web 浏览器而造成的。如果您的浏览器不支持 128 位加密算法就会出现这个错误,您可以连接微软网站进行浏览器升级。403.6 错误是由于 IP 地址被拒绝而造成的。如果服务器中有不能访问该站点的IP地址列表,并且您使用的 IP 地址在该列表中时您就会返回这条错误信息。403.7 错误是因为要求客户证书。当需要访问的资源要求浏览器拥有服务器能够识别的安全套接字层(SSL)客户证书时会返回此种错误。403.8 错误是由于禁止站点访问而造成的。若服务器中有不能访问该站点的 DNS 名称列表,而您使用的 DNS 名称在列表中时就会返回此种信息。请注意区别 403.6 与 403.8 错误。403.9 错误是由于连接的用户过多而造成的,由于 Web 服务器很忙,因通讯量过多而无法处理请求时便会返回这条错误。403.10 错误是由于无效配置而导致的错误。当您试图从目录中执行 CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序时便会返回这条错误。403.11 错误是由于密码更改而导致无权查看页面。403.12 错误是由于映射器拒绝访问而造成的。若要查看的网页要求使用有效的客户证书,而您的客户证书映射没有权限访问该 Web 站点时就会返回映射器拒绝访问的错误。403.13 错误是由于需要查看的网页要求使用有效的客户证书而使用的客户证书已经被吊销,或者无法确定证书是否已吊销造成的。403.14 错误 Web 服务器被配置为不列出此目录的内容,拒绝目录列表。403.15 错误是由于客户访问许可过多而造成的。当服务器超出其客户访问许可限制时会返回此条错误。403.16 错误是由于客户证书不可信或者无效而造成的。403.17 错误是由于客户证书已经到期或者尚未生效而造成的。 404 报错:404 报错主要是页面显示问题或者页面的链接有问题,意味着链接指向的网页不存在,即原始网页的 URL 失效。当 Web 服务器接到类似请求时,会返回一个 404 状态码,告诉浏览器已请求的资源并不存在。导致这个错误的原因一般有以下几种情况: 无法在所请求的端口上访问 Web 站点。Web 服务扩展锁定策略阻止本请求。MIME 映射策略阻止本请求。网站更新改版,但某些局部板块沿用原来的模块,而原有的模块调用的文件已经被删除或转移了路径。跟踪访问的各类脚码或 CSS 文件无效但调用代码依然存在。某个目录直接删除(导致一段时间该目录的文件在被爬行时全部报 404 Not Found 错误)网页 URL 生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的 URL 地址无法访问 502 报错:当测试访问报错为 502 Bad Gateway,这是 Web 程序配置异常导致的。建议结合 Web 访问日志,检测一下 Web 程序配置的参数设置是否有异常。详情请参见 502 bad gateway问题的解决方法。503 报错:503 报错是一种 HTTP 状态码,与 404 同属一种网页状态出错码。两者的区别是:前者是服务器出错的一种返回状态,后者是网页程序没有相关结果后返回的一种状态。503 报错产生的原因有可能是以下几种情况: 网络管理员可能关闭应用程序池以执行维护。当请求到达时应用程序池队列已满。应用程序池标识没有使用预定义账户:网络服务。而自己配置了标识,但是配置的这个用户不属于 IIS_WPG 组。应用程序池启用了 CPU 监视,并且设置了 CPU 利用率超过一定百分比关闭应用程序池,而开发人员写的服务端页面 (.asp、.aspx) 执行效率不高,会引起 CPU 的长时间占用,最终达到设置的百分比,从而引起应用程序池关闭。应用程序池的性能选项卡的请求队列限制所填的数值太小,默认为 1000。某个目录直接删除(导致一段时间该目录的文件在被爬行时全部报 404 Not Found 错误)。网页 URL 生成规则改变、网页文件更名或移动位置、导入链接拼写错误等,导致原来的 URL 地址无法访问。该站点正在被攻击。对于最新型的攻击,其实是 DDoS 的一种派生,原理在于找数千个IP,同时向服务器的 Apache 发出请求,然后 立即断开,让 Apache 处于等待状态,致使 Apache 线程全部被填满,致使服务器死机。因此,为了保证大多数客户的利益,我们给每个空间,作出了每 19 秒 64 个 php 请求的限制。注意,是 php 请求,一般的图片请求和 html 请求不包括在内。该程序占用的 php 线程过多,有的程序没有进行好优化处理,一个点击即可产生数个,甚至数十个 php 线程。这样的话,几个点击就可以把该时段的64个 php 线程全部填满了。因此出现 503 错误。建议优化一下程序,尽量少用 require (请求)等语句。 如问题还未解决,请您记录排查结果、相关日志信息或截图,提交工单联系阿里云。

2019-12-01 23:11:56 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 随着业务的增长,您的数据盘容量可能无法满足数据存储的需要,这时您可以使用 磁盘扩容 功能扩容数据盘。 说明 挂载在实例上的数据盘,只有当实例处于 运行中 (Running) 或 已停止(Stopped) 状态时才可以扩容。扩容这种数据盘需要在控制台上重启实例后才能使扩容后的容量生效,而重启实例会停止实例,中断您的业务,所以请您谨慎操作。 建议在扩容数据盘之前手动创建快照,以备份数据。 无论数据盘的状态是 待挂载 还是 使用中,都可以执行磁盘扩容操作。 包年包月实例如果做过 续费降配 操作,当前计费周期的剩余时间内,实例上的包年包月云盘不支持扩容磁盘操作。 如果数据盘正在创建快照,则不允许执行扩容数据盘的操作。 磁盘扩容功能只能扩容数据盘,不能扩容系统盘或本地盘(本地 SSD 盘等)。 本文以一个高效云盘的数据盘和一个运行CentOS 7.3 64位的 ECS 实例为例,说明如何扩容数据盘并使扩容后的容量可用。 您可以按以下步骤完成扩容操作: 步骤 1. 在控制台上扩容数据盘的磁盘空间 步骤 2. 登录实例扩容文件系统 步骤 1. 在控制台上扩容数据盘的磁盘空间 按以下步骤在控制台上扩容数据盘的磁盘空间: 登录 ECS管理控制台。 在左侧导航栏里,选择 存储 > 云盘。 说明 如果您需要扩容的数据盘已经挂载在某个实例上,您可以单击 实例,找到相应实例后,进入实例详情页,并单击 本实例磁盘。 选择地域。 找到需要扩容的磁盘,并在 操作 列中,选择 更多 > 磁盘扩容。 在 磁盘扩容 页面上,设置 扩容后容量,在本示例中为30 GiB。扩容后容量只能比当前容量大。 待页面上显示费用信息后,单击 确定扩容。 说明 扩容成功后,磁盘列表里即显示扩容后的容量。但是,如果您的数据盘已经挂载到实例上,只有在控制台上 重启实例 后,登录实例才能看到新的磁盘空间容量。 在控制台上扩容数据盘的磁盘空间后, 如果数据盘已经挂载到实例上,您必须执行 步骤 2. 登录实例扩容文件系统。 如果数据盘未挂载到实例上,您必须先挂载数据盘(参见 挂载云盘),再根据数据盘的实际情况执行不同的操作: 如果这是一个未格式化的数据盘,您必须格式化数据盘。详细信息,请参见 Linux 格式化和挂载数据盘。 如果这个数据盘之前已经格式化并分区,您必须 步骤 2. 登录实例扩容文件系统。 步骤 2. 登录实例扩容文件系统 在ECS控制台上完成磁盘扩容后,磁盘每个分区的文件系统并未扩容。您需要登录实例扩容文件系统。 在本示例中,假设数据盘挂载在一台Linux实例上,实例的操作系统为CentOS 7.3 64位,未扩容前的数据盘只有一个主分区(/dev/vdb1,ext4文件系统),文件系统的挂载点为 /resizetest,文件系统扩容完成后,数据盘仍然只有一个主分区。 使用用户名密码验证连接 Linux 实例。 运行 umount 命令卸载主分区。umount /dev/vdb1 说明 使用 df -h 查看是否卸载成功,如果看不到 /dev/vdb1 的信息表示卸载成功。以下为示例输出结果。 [root@iXXXXXX ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.5G 36G 4% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 312K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 使用 fdisk 命令删除原来的分区并创建新分区: 说明 如果您使用 parted 工具操作分区,不能与 fdisk 交叉使用,否则会导致分区的起始扇区不一致。关于 parted 工具的使用说明可以参考这里。 运行命令 fdisk -l 罗列分区信息并记录扩容前数据盘的最终容量、起始扇区(First sector)位置。 运行命令 fdisk [数据盘设备名] 进入 fdisk 界面。本示例中,命令为 fdisk /dev/vdb。 输入 d 并按回车键,删除原来的分区。 说明 删除分区不会造成数据盘内数据的丢失。 输入 n 并按回车键,开始创建新的分区。 输入 p 并按回车键,选择创建主分区。因为创建的是一个单分区数据盘,所以只需要创建主分区。 说明 如果要创建4个以上的分区,您应该创建至少一个扩展分区,即选择 e。 输入分区编号并按回车键。因为这里仅创建一个分区,所以输入 1。 输入第一个可用的扇区编号:为了保证数据的一致性,First sector需要与原来的分区保持一致。在本示例中,按回车键采用默认值。 说明 如果发现First sector显示的位置和之前记录的不一致,说明之前可能使用 parted 来分区,那么就停止当前的 fdisk 操作,使用 parted 重新操作。 输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。 输入 wq 并按回车键,开始分区。 [root@iXXXXXX ~]# fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Selected partition 1 Partition 1 is deleted Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-62914559, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): Using default value 62914559 Partition 1 of type Linux and of size 30 GiB is set Command (m for help): wq The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 说明 如果您使用的是 parted 工具,进入 parted 界面后,输入 p 罗列当前的分区情况。如果有分区,则使用 rm+ 序列号来删除老的分区表,然后使用 unit s 定义起始位置,单位使用扇区个数计量,最后使用 mkpart 命令来创建即可,如下图所示。 部分操作系统里,修改分区后可能会重新自动挂载文件系统。建议先执行 df -h 重新查看文件系统空间和使用情况。如果文件系统重新被挂载,执行 umount [文件系统名称] 再次卸载文件系统。 检查文件系统,并变更文件系统大小。 e2fsck -f /dev/vdb1 # 检查文件系统 resize2fs /dev/vdb1 # 变更文件系统大小 说明 使用 e2fsck 时,由于系统需要检查并订正文件系统元数据,所以速度较慢、耗时较长,请耐心等待。 正确使用 e2fsck 和 resize2fs 指令,不会造成原有数据丢失。 以下为示例输出结果。 [root@iXXXXXX ~]# e2fsck -f /dev/vdb1 e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vdb1: 11/1835008 files (0.0% non-contiguous), 159218/7339776 blocks [root@iXXXXXX ~]# resize2fs /dev/vdb1 resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vdb1 to 7864064 (4k) blocks. The filesystem on /dev/vdb1 is now 7864064 blocks long. 将扩容完成的文件系统挂载到原来的挂载点(如本示例中的 /resizetest)。mount /dev/vdb1 /resizetest 查看文件系统空间和使用情况:运行命令 df -h。如果出现扩容后的文件系统信息,说明挂载成功,可以使用扩容后的文件系统了。 说明 挂载操作完成后,不需要在控制台上重启实例即可开始使用扩容后的文件系统。 以下为示例输出结果。 [root@iXXXXXX ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.5G 36G 4% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 312K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 /dev/vdb1 30G 44M 28G 1% /resizetest

2019-12-01 22:56:54 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 随着业务的增长,您的数据盘容量可能无法满足数据存储的需要,这时您可以使用 磁盘扩容 功能扩容数据盘。 说明 挂载在实例上的数据盘,只有当实例处于 运行中 (Running) 或 已停止(Stopped) 状态时才可以扩容。扩容这种数据盘需要在控制台上重启实例后才能使扩容后的容量生效,而重启实例会停止实例,中断您的业务,所以请您谨慎操作。 建议在扩容数据盘之前手动创建快照,以备份数据。 无论数据盘的状态是 待挂载 还是 使用中,都可以执行磁盘扩容操作。 包年包月实例如果做过 续费降配 操作,当前计费周期的剩余时间内,实例上的包年包月云盘不支持扩容磁盘操作。 如果数据盘正在创建快照,则不允许执行扩容数据盘的操作。 磁盘扩容功能只能扩容数据盘,不能扩容系统盘或本地盘(本地 SSD 盘等)。 本文以一个高效云盘的数据盘和一个运行CentOS 7.3 64位的 ECS 实例为例,说明如何扩容数据盘并使扩容后的容量可用。 您可以按以下步骤完成扩容操作: 步骤 1. 在控制台上扩容数据盘的磁盘空间 步骤 2. 登录实例扩容文件系统 步骤 1. 在控制台上扩容数据盘的磁盘空间 按以下步骤在控制台上扩容数据盘的磁盘空间: 登录 ECS管理控制台。 在左侧导航栏里,选择 存储 > 云盘。 说明 如果您需要扩容的数据盘已经挂载在某个实例上,您可以单击 实例,找到相应实例后,进入实例详情页,并单击 本实例磁盘。 选择地域。 找到需要扩容的磁盘,并在 操作 列中,选择 更多 > 磁盘扩容。 在 磁盘扩容 页面上,设置 扩容后容量,在本示例中为30 GiB。扩容后容量只能比当前容量大。 待页面上显示费用信息后,单击 确定扩容。 说明 扩容成功后,磁盘列表里即显示扩容后的容量。但是,如果您的数据盘已经挂载到实例上,只有在控制台上 重启实例 后,登录实例才能看到新的磁盘空间容量。 在控制台上扩容数据盘的磁盘空间后, 如果数据盘已经挂载到实例上,您必须执行 步骤 2. 登录实例扩容文件系统。 如果数据盘未挂载到实例上,您必须先挂载数据盘(参见 挂载云盘),再根据数据盘的实际情况执行不同的操作: 如果这是一个未格式化的数据盘,您必须格式化数据盘。详细信息,请参见 Linux 格式化和挂载数据盘。 如果这个数据盘之前已经格式化并分区,您必须 步骤 2. 登录实例扩容文件系统。 步骤 2. 登录实例扩容文件系统 在ECS控制台上完成磁盘扩容后,磁盘每个分区的文件系统并未扩容。您需要登录实例扩容文件系统。 在本示例中,假设数据盘挂载在一台Linux实例上,实例的操作系统为CentOS 7.3 64位,未扩容前的数据盘只有一个主分区(/dev/vdb1,ext4文件系统),文件系统的挂载点为 /resizetest,文件系统扩容完成后,数据盘仍然只有一个主分区。 使用用户名密码验证连接 Linux 实例。 运行 umount 命令卸载主分区。umount /dev/vdb1 说明 使用 df -h 查看是否卸载成功,如果看不到 /dev/vdb1 的信息表示卸载成功。以下为示例输出结果。 [root@iXXXXXX ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.5G 36G 4% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 312K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 使用 fdisk 命令删除原来的分区并创建新分区: 说明 如果您使用 parted 工具操作分区,不能与 fdisk 交叉使用,否则会导致分区的起始扇区不一致。关于 parted 工具的使用说明可以参考这里。 运行命令 fdisk -l 罗列分区信息并记录扩容前数据盘的最终容量、起始扇区(First sector)位置。 运行命令 fdisk [数据盘设备名] 进入 fdisk 界面。本示例中,命令为 fdisk /dev/vdb。 输入 d 并按回车键,删除原来的分区。 说明 删除分区不会造成数据盘内数据的丢失。 输入 n 并按回车键,开始创建新的分区。 输入 p 并按回车键,选择创建主分区。因为创建的是一个单分区数据盘,所以只需要创建主分区。 说明 如果要创建4个以上的分区,您应该创建至少一个扩展分区,即选择 e。 输入分区编号并按回车键。因为这里仅创建一个分区,所以输入 1。 输入第一个可用的扇区编号:为了保证数据的一致性,First sector需要与原来的分区保持一致。在本示例中,按回车键采用默认值。 说明 如果发现First sector显示的位置和之前记录的不一致,说明之前可能使用 parted 来分区,那么就停止当前的 fdisk 操作,使用 parted 重新操作。 输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。 输入 wq 并按回车键,开始分区。 [root@iXXXXXX ~]# fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Selected partition 1 Partition 1 is deleted Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-62914559, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): Using default value 62914559 Partition 1 of type Linux and of size 30 GiB is set Command (m for help): wq The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 说明 如果您使用的是 parted 工具,进入 parted 界面后,输入 p 罗列当前的分区情况。如果有分区,则使用 rm+ 序列号来删除老的分区表,然后使用 unit s 定义起始位置,单位使用扇区个数计量,最后使用 mkpart 命令来创建即可,如下图所示。 部分操作系统里,修改分区后可能会重新自动挂载文件系统。建议先执行 df -h 重新查看文件系统空间和使用情况。如果文件系统重新被挂载,执行 umount [文件系统名称] 再次卸载文件系统。 检查文件系统,并变更文件系统大小。 e2fsck -f /dev/vdb1 # 检查文件系统 resize2fs /dev/vdb1 # 变更文件系统大小 说明 使用 e2fsck 时,由于系统需要检查并订正文件系统元数据,所以速度较慢、耗时较长,请耐心等待。 正确使用 e2fsck 和 resize2fs 指令,不会造成原有数据丢失。 以下为示例输出结果。 [root@iXXXXXX ~]# e2fsck -f /dev/vdb1 e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vdb1: 11/1835008 files (0.0% non-contiguous), 159218/7339776 blocks [root@iXXXXXX ~]# resize2fs /dev/vdb1 resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vdb1 to 7864064 (4k) blocks. The filesystem on /dev/vdb1 is now 7864064 blocks long. 将扩容完成的文件系统挂载到原来的挂载点(如本示例中的 /resizetest)。mount /dev/vdb1 /resizetest 查看文件系统空间和使用情况:运行命令 df -h。如果出现扩容后的文件系统信息,说明挂载成功,可以使用扩容后的文件系统了。 说明 挂载操作完成后,不需要在控制台上重启实例即可开始使用扩容后的文件系统。 以下为示例输出结果。 [root@iXXXXXX ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.5G 36G 4% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 312K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 /dev/vdb1 30G 44M 28G 1% /resizetest

2019-12-01 22:56:54 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 随着业务的增长,您的数据盘容量可能无法满足数据存储的需要,这时您可以使用 磁盘扩容 功能扩容数据盘。 说明 挂载在实例上的数据盘,只有当实例处于 运行中 (Running) 或 已停止(Stopped) 状态时才可以扩容。扩容这种数据盘需要在控制台上重启实例后才能使扩容后的容量生效,而重启实例会停止实例,中断您的业务,所以请您谨慎操作。 建议在扩容数据盘之前手动创建快照,以备份数据。 无论数据盘的状态是 待挂载 还是 使用中,都可以执行磁盘扩容操作。 包年包月实例如果做过 续费降配 操作,当前计费周期的剩余时间内,实例上的包年包月云盘不支持扩容磁盘操作。 如果数据盘正在创建快照,则不允许执行扩容数据盘的操作。 磁盘扩容功能只能扩容数据盘,不能扩容系统盘或本地盘(本地 SSD 盘等)。 本文以一个高效云盘的数据盘和一个运行CentOS 7.3 64位的 ECS 实例为例,说明如何扩容数据盘并使扩容后的容量可用。 您可以按以下步骤完成扩容操作: 步骤 1. 在控制台上扩容数据盘的磁盘空间 步骤 2. 登录实例扩容文件系统 步骤 1. 在控制台上扩容数据盘的磁盘空间 按以下步骤在控制台上扩容数据盘的磁盘空间: 登录 ECS管理控制台。 在左侧导航栏里,选择 存储 > 云盘。 说明 如果您需要扩容的数据盘已经挂载在某个实例上,您可以单击 实例,找到相应实例后,进入实例详情页,并单击 本实例磁盘。 选择地域。 找到需要扩容的磁盘,并在 操作 列中,选择 更多 > 磁盘扩容。 在 磁盘扩容 页面上,设置 扩容后容量,在本示例中为30 GiB。扩容后容量只能比当前容量大。 待页面上显示费用信息后,单击 确定扩容。 说明 扩容成功后,磁盘列表里即显示扩容后的容量。但是,如果您的数据盘已经挂载到实例上,只有在控制台上 重启实例 后,登录实例才能看到新的磁盘空间容量。 在控制台上扩容数据盘的磁盘空间后, 如果数据盘已经挂载到实例上,您必须执行 步骤 2. 登录实例扩容文件系统。 如果数据盘未挂载到实例上,您必须先挂载数据盘(参见 挂载云盘),再根据数据盘的实际情况执行不同的操作: 如果这是一个未格式化的数据盘,您必须格式化数据盘。详细信息,请参见 Linux 格式化和挂载数据盘。 如果这个数据盘之前已经格式化并分区,您必须 步骤 2. 登录实例扩容文件系统。 步骤 2. 登录实例扩容文件系统 在ECS控制台上完成磁盘扩容后,磁盘每个分区的文件系统并未扩容。您需要登录实例扩容文件系统。 在本示例中,假设数据盘挂载在一台Linux实例上,实例的操作系统为CentOS 7.3 64位,未扩容前的数据盘只有一个主分区(/dev/vdb1,ext4文件系统),文件系统的挂载点为 /resizetest,文件系统扩容完成后,数据盘仍然只有一个主分区。 使用用户名密码验证连接 Linux 实例。 运行 umount 命令卸载主分区。umount /dev/vdb1 说明 使用 df -h 查看是否卸载成功,如果看不到 /dev/vdb1 的信息表示卸载成功。以下为示例输出结果。 [root@iXXXXXX ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.5G 36G 4% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 312K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 使用 fdisk 命令删除原来的分区并创建新分区: 说明 如果您使用 parted 工具操作分区,不能与 fdisk 交叉使用,否则会导致分区的起始扇区不一致。关于 parted 工具的使用说明可以参考这里。 运行命令 fdisk -l 罗列分区信息并记录扩容前数据盘的最终容量、起始扇区(First sector)位置。 运行命令 fdisk [数据盘设备名] 进入 fdisk 界面。本示例中,命令为 fdisk /dev/vdb。 输入 d 并按回车键,删除原来的分区。 说明 删除分区不会造成数据盘内数据的丢失。 输入 n 并按回车键,开始创建新的分区。 输入 p 并按回车键,选择创建主分区。因为创建的是一个单分区数据盘,所以只需要创建主分区。 说明 如果要创建4个以上的分区,您应该创建至少一个扩展分区,即选择 e。 输入分区编号并按回车键。因为这里仅创建一个分区,所以输入 1。 输入第一个可用的扇区编号:为了保证数据的一致性,First sector需要与原来的分区保持一致。在本示例中,按回车键采用默认值。 说明 如果发现First sector显示的位置和之前记录的不一致,说明之前可能使用 parted 来分区,那么就停止当前的 fdisk 操作,使用 parted 重新操作。 输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。 输入 wq 并按回车键,开始分区。 [root@iXXXXXX ~]# fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Selected partition 1 Partition 1 is deleted Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-62914559, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): Using default value 62914559 Partition 1 of type Linux and of size 30 GiB is set Command (m for help): wq The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 说明 如果您使用的是 parted 工具,进入 parted 界面后,输入 p 罗列当前的分区情况。如果有分区,则使用 rm+ 序列号来删除老的分区表,然后使用 unit s 定义起始位置,单位使用扇区个数计量,最后使用 mkpart 命令来创建即可,如下图所示。 部分操作系统里,修改分区后可能会重新自动挂载文件系统。建议先执行 df -h 重新查看文件系统空间和使用情况。如果文件系统重新被挂载,执行 umount [文件系统名称] 再次卸载文件系统。 检查文件系统,并变更文件系统大小。 e2fsck -f /dev/vdb1 # 检查文件系统 resize2fs /dev/vdb1 # 变更文件系统大小 说明 使用 e2fsck 时,由于系统需要检查并订正文件系统元数据,所以速度较慢、耗时较长,请耐心等待。 正确使用 e2fsck 和 resize2fs 指令,不会造成原有数据丢失。 以下为示例输出结果。 [root@iXXXXXX ~]# e2fsck -f /dev/vdb1 e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vdb1: 11/1835008 files (0.0% non-contiguous), 159218/7339776 blocks [root@iXXXXXX ~]# resize2fs /dev/vdb1 resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vdb1 to 7864064 (4k) blocks. The filesystem on /dev/vdb1 is now 7864064 blocks long. 将扩容完成的文件系统挂载到原来的挂载点(如本示例中的 /resizetest)。mount /dev/vdb1 /resizetest 查看文件系统空间和使用情况:运行命令 df -h。如果出现扩容后的文件系统信息,说明挂载成功,可以使用扩容后的文件系统了。 说明 挂载操作完成后,不需要在控制台上重启实例即可开始使用扩容后的文件系统。 以下为示例输出结果。 [root@iXXXXXX ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.5G 36G 4% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 312K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 /dev/vdb1 30G 44M 28G 1% /resizetest

2019-12-01 22:56:54 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 随着业务的增长,您的数据盘容量可能无法满足数据存储的需要,这时您可以使用 磁盘扩容 功能扩容数据盘。 说明 挂载在实例上的数据盘,只有当实例处于 运行中 (Running) 或 已停止(Stopped) 状态时才可以扩容。扩容这种数据盘需要在控制台上重启实例后才能使扩容后的容量生效,而重启实例会停止实例,中断您的业务,所以请您谨慎操作。 建议在扩容数据盘之前手动创建快照,以备份数据。 无论数据盘的状态是 待挂载 还是 使用中,都可以执行磁盘扩容操作。 包年包月实例如果做过 续费降配 操作,当前计费周期的剩余时间内,实例上的包年包月云盘不支持扩容磁盘操作。 如果数据盘正在创建快照,则不允许执行扩容数据盘的操作。 磁盘扩容功能只能扩容数据盘,不能扩容系统盘或本地盘(本地 SSD 盘等)。 本文以一个高效云盘的数据盘和一个运行CentOS 7.3 64位的 ECS 实例为例,说明如何扩容数据盘并使扩容后的容量可用。 您可以按以下步骤完成扩容操作: 步骤 1. 在控制台上扩容数据盘的磁盘空间 步骤 2. 登录实例扩容文件系统 步骤 1. 在控制台上扩容数据盘的磁盘空间 按以下步骤在控制台上扩容数据盘的磁盘空间: 登录 ECS管理控制台。 在左侧导航栏里,选择 存储 > 云盘。 说明 如果您需要扩容的数据盘已经挂载在某个实例上,您可以单击 实例,找到相应实例后,进入实例详情页,并单击 本实例磁盘。 选择地域。 找到需要扩容的磁盘,并在 操作 列中,选择 更多 > 磁盘扩容。 在 磁盘扩容 页面上,设置 扩容后容量,在本示例中为30 GiB。扩容后容量只能比当前容量大。 待页面上显示费用信息后,单击 确定扩容。 说明 扩容成功后,磁盘列表里即显示扩容后的容量。但是,如果您的数据盘已经挂载到实例上,只有在控制台上 重启实例 后,登录实例才能看到新的磁盘空间容量。 在控制台上扩容数据盘的磁盘空间后, 如果数据盘已经挂载到实例上,您必须执行 步骤 2. 登录实例扩容文件系统。 如果数据盘未挂载到实例上,您必须先挂载数据盘(参见 挂载云盘),再根据数据盘的实际情况执行不同的操作: 如果这是一个未格式化的数据盘,您必须格式化数据盘。详细信息,请参见 Linux 格式化和挂载数据盘。 如果这个数据盘之前已经格式化并分区,您必须 步骤 2. 登录实例扩容文件系统。 步骤 2. 登录实例扩容文件系统 在ECS控制台上完成磁盘扩容后,磁盘每个分区的文件系统并未扩容。您需要登录实例扩容文件系统。 在本示例中,假设数据盘挂载在一台Linux实例上,实例的操作系统为CentOS 7.3 64位,未扩容前的数据盘只有一个主分区(/dev/vdb1,ext4文件系统),文件系统的挂载点为 /resizetest,文件系统扩容完成后,数据盘仍然只有一个主分区。 使用用户名密码验证连接 Linux 实例。 运行 umount 命令卸载主分区。umount /dev/vdb1 说明 使用 df -h 查看是否卸载成功,如果看不到 /dev/vdb1 的信息表示卸载成功。以下为示例输出结果。 [root@iXXXXXX ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.5G 36G 4% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 312K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 使用 fdisk 命令删除原来的分区并创建新分区: 说明 如果您使用 parted 工具操作分区,不能与 fdisk 交叉使用,否则会导致分区的起始扇区不一致。关于 parted 工具的使用说明可以参考这里。 运行命令 fdisk -l 罗列分区信息并记录扩容前数据盘的最终容量、起始扇区(First sector)位置。 运行命令 fdisk [数据盘设备名] 进入 fdisk 界面。本示例中,命令为 fdisk /dev/vdb。 输入 d 并按回车键,删除原来的分区。 说明 删除分区不会造成数据盘内数据的丢失。 输入 n 并按回车键,开始创建新的分区。 输入 p 并按回车键,选择创建主分区。因为创建的是一个单分区数据盘,所以只需要创建主分区。 说明 如果要创建4个以上的分区,您应该创建至少一个扩展分区,即选择 e。 输入分区编号并按回车键。因为这里仅创建一个分区,所以输入 1。 输入第一个可用的扇区编号:为了保证数据的一致性,First sector需要与原来的分区保持一致。在本示例中,按回车键采用默认值。 说明 如果发现First sector显示的位置和之前记录的不一致,说明之前可能使用 parted 来分区,那么就停止当前的 fdisk 操作,使用 parted 重新操作。 输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。 输入 wq 并按回车键,开始分区。 [root@iXXXXXX ~]# fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Selected partition 1 Partition 1 is deleted Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-62914559, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): Using default value 62914559 Partition 1 of type Linux and of size 30 GiB is set Command (m for help): wq The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 说明 如果您使用的是 parted 工具,进入 parted 界面后,输入 p 罗列当前的分区情况。如果有分区,则使用 rm+ 序列号来删除老的分区表,然后使用 unit s 定义起始位置,单位使用扇区个数计量,最后使用 mkpart 命令来创建即可,如下图所示。 部分操作系统里,修改分区后可能会重新自动挂载文件系统。建议先执行 df -h 重新查看文件系统空间和使用情况。如果文件系统重新被挂载,执行 umount [文件系统名称] 再次卸载文件系统。 检查文件系统,并变更文件系统大小。 e2fsck -f /dev/vdb1 # 检查文件系统 resize2fs /dev/vdb1 # 变更文件系统大小 说明 使用 e2fsck 时,由于系统需要检查并订正文件系统元数据,所以速度较慢、耗时较长,请耐心等待。 正确使用 e2fsck 和 resize2fs 指令,不会造成原有数据丢失。 以下为示例输出结果。 [root@iXXXXXX ~]# e2fsck -f /dev/vdb1 e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vdb1: 11/1835008 files (0.0% non-contiguous), 159218/7339776 blocks [root@iXXXXXX ~]# resize2fs /dev/vdb1 resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vdb1 to 7864064 (4k) blocks. The filesystem on /dev/vdb1 is now 7864064 blocks long. 将扩容完成的文件系统挂载到原来的挂载点(如本示例中的 /resizetest)。mount /dev/vdb1 /resizetest 查看文件系统空间和使用情况:运行命令 df -h。如果出现扩容后的文件系统信息,说明挂载成功,可以使用扩容后的文件系统了。 说明 挂载操作完成后,不需要在控制台上重启实例即可开始使用扩容后的文件系统。 以下为示例输出结果。 [root@iXXXXXX ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.5G 36G 4% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 312K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 /dev/vdb1 30G 44M 28G 1% /resizetest

2019-12-01 22:56:53 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档 随着业务的增长,您的数据盘容量可能无法满足数据存储的需要,这时您可以使用 磁盘扩容 功能扩容数据盘。 说明 挂载在实例上的数据盘,只有当实例处于 运行中 (Running) 或 已停止(Stopped) 状态时才可以扩容。扩容这种数据盘需要在控制台上重启实例后才能使扩容后的容量生效,而重启实例会停止实例,中断您的业务,所以请您谨慎操作。 建议在扩容数据盘之前手动创建快照,以备份数据。 无论数据盘的状态是 待挂载 还是 使用中,都可以执行磁盘扩容操作。 包年包月实例如果做过 续费降配 操作,当前计费周期的剩余时间内,实例上的包年包月云盘不支持扩容磁盘操作。 如果数据盘正在创建快照,则不允许执行扩容数据盘的操作。 磁盘扩容功能只能扩容数据盘,不能扩容系统盘或本地盘(本地 SSD 盘等)。 本文以一个高效云盘的数据盘和一个运行CentOS 7.3 64位的 ECS 实例为例,说明如何扩容数据盘并使扩容后的容量可用。 您可以按以下步骤完成扩容操作: 步骤 1. 在控制台上扩容数据盘的磁盘空间 步骤 2. 登录实例扩容文件系统 步骤 1. 在控制台上扩容数据盘的磁盘空间 按以下步骤在控制台上扩容数据盘的磁盘空间: 登录 ECS管理控制台。 在左侧导航栏里,选择 存储 > 云盘。 说明 如果您需要扩容的数据盘已经挂载在某个实例上,您可以单击 实例,找到相应实例后,进入实例详情页,并单击 本实例磁盘。 选择地域。 找到需要扩容的磁盘,并在 操作 列中,选择 更多 > 磁盘扩容。 在 磁盘扩容 页面上,设置 扩容后容量,在本示例中为30 GiB。扩容后容量只能比当前容量大。 待页面上显示费用信息后,单击 确定扩容。 说明 扩容成功后,磁盘列表里即显示扩容后的容量。但是,如果您的数据盘已经挂载到实例上,只有在控制台上 重启实例 后,登录实例才能看到新的磁盘空间容量。 在控制台上扩容数据盘的磁盘空间后, 如果数据盘已经挂载到实例上,您必须执行 步骤 2. 登录实例扩容文件系统。 如果数据盘未挂载到实例上,您必须先挂载数据盘(参见 挂载云盘),再根据数据盘的实际情况执行不同的操作: 如果这是一个未格式化的数据盘,您必须格式化数据盘。详细信息,请参见 Linux 格式化和挂载数据盘。 如果这个数据盘之前已经格式化并分区,您必须 步骤 2. 登录实例扩容文件系统。 步骤 2. 登录实例扩容文件系统 在ECS控制台上完成磁盘扩容后,磁盘每个分区的文件系统并未扩容。您需要登录实例扩容文件系统。 在本示例中,假设数据盘挂载在一台Linux实例上,实例的操作系统为CentOS 7.3 64位,未扩容前的数据盘只有一个主分区(/dev/vdb1,ext4文件系统),文件系统的挂载点为 /resizetest,文件系统扩容完成后,数据盘仍然只有一个主分区。 使用用户名密码验证连接 Linux 实例。 运行 umount 命令卸载主分区。umount /dev/vdb1 说明 使用 df -h 查看是否卸载成功,如果看不到 /dev/vdb1 的信息表示卸载成功。以下为示例输出结果。 [root@iXXXXXX ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.5G 36G 4% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 312K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 使用 fdisk 命令删除原来的分区并创建新分区: 说明 如果您使用 parted 工具操作分区,不能与 fdisk 交叉使用,否则会导致分区的起始扇区不一致。关于 parted 工具的使用说明可以参考这里。 运行命令 fdisk -l 罗列分区信息并记录扩容前数据盘的最终容量、起始扇区(First sector)位置。 运行命令 fdisk [数据盘设备名] 进入 fdisk 界面。本示例中,命令为 fdisk /dev/vdb。 输入 d 并按回车键,删除原来的分区。 说明 删除分区不会造成数据盘内数据的丢失。 输入 n 并按回车键,开始创建新的分区。 输入 p 并按回车键,选择创建主分区。因为创建的是一个单分区数据盘,所以只需要创建主分区。 说明 如果要创建4个以上的分区,您应该创建至少一个扩展分区,即选择 e。 输入分区编号并按回车键。因为这里仅创建一个分区,所以输入 1。 输入第一个可用的扇区编号:为了保证数据的一致性,First sector需要与原来的分区保持一致。在本示例中,按回车键采用默认值。 说明 如果发现First sector显示的位置和之前记录的不一致,说明之前可能使用 parted 来分区,那么就停止当前的 fdisk 操作,使用 parted 重新操作。 输入最后一个扇区编号:因为这里仅创建一个分区,所以按回车键采用默认值。 输入 wq 并按回车键,开始分区。 [root@iXXXXXX ~]# fdisk /dev/vdb Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Selected partition 1 Partition 1 is deleted Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default response p Partition number (1-4, default 1): First sector (2048-62914559, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-62914559, default 62914559): Using default value 62914559 Partition 1 of type Linux and of size 30 GiB is set Command (m for help): wq The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks. 说明 如果您使用的是 parted 工具,进入 parted 界面后,输入 p 罗列当前的分区情况。如果有分区,则使用 rm+ 序列号来删除老的分区表,然后使用 unit s 定义起始位置,单位使用扇区个数计量,最后使用 mkpart 命令来创建即可,如下图所示。 部分操作系统里,修改分区后可能会重新自动挂载文件系统。建议先执行 df -h 重新查看文件系统空间和使用情况。如果文件系统重新被挂载,执行 umount [文件系统名称] 再次卸载文件系统。 检查文件系统,并变更文件系统大小。 e2fsck -f /dev/vdb1 # 检查文件系统 resize2fs /dev/vdb1 # 变更文件系统大小 说明 使用 e2fsck 时,由于系统需要检查并订正文件系统元数据,所以速度较慢、耗时较长,请耐心等待。 正确使用 e2fsck 和 resize2fs 指令,不会造成原有数据丢失。 以下为示例输出结果。 [root@iXXXXXX ~]# e2fsck -f /dev/vdb1 e2fsck 1.42.9 (28-Dec-2013) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vdb1: 11/1835008 files (0.0% non-contiguous), 159218/7339776 blocks [root@iXXXXXX ~]# resize2fs /dev/vdb1 resize2fs 1.42.9 (28-Dec-2013) Resizing the filesystem on /dev/vdb1 to 7864064 (4k) blocks. The filesystem on /dev/vdb1 is now 7864064 blocks long. 将扩容完成的文件系统挂载到原来的挂载点(如本示例中的 /resizetest)。mount /dev/vdb1 /resizetest 查看文件系统空间和使用情况:运行命令 df -h。如果出现扩容后的文件系统信息,说明挂载成功,可以使用扩容后的文件系统了。 说明 挂载操作完成后,不需要在控制台上重启实例即可开始使用扩容后的文件系统。 以下为示例输出结果。 [root@iXXXXXX ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 1.5G 36G 4% / devtmpfs 487M 0 487M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 312K 496M 1% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup tmpfs 100M 0 100M 0% /run/user/0 /dev/vdb1 30G 44M 28G 1% /resizetest

2019-12-01 22:56:54 0 浏览量 回答数 0

回答

没有一个初步的战略 大多数没有计算机科学或数据分析背景的工程师想要在数据科学中开始一个新的职业生涯,他们没有一个明确的战略,没有成为数据科学家、分析师或工程师的明确步骤。他们试图尽可能快地用信息填满自己的脑袋,而不是真正深入到特定的主题;他们倾向于一次注册多个在线课程,从不同的网站下载几个备忘单,阅读许多作者的文章,但没有一个结构化的计划。在开始这段旅程之前,我强烈建议你制定一个学习计划,并列出一些日常习惯,以实现你的目标,增强你的分析和编程技能。对你想从事的行业使用的最流行的编程语言和软件进行自己的研究,搜索最广泛使用的库和包,并根据你的目标选择最适合你的编程语言和软件。坚持和练习会使你成为大师。 尝试同时学习几种编程语言和软件 新程序员常常会受到诱惑,想要同时学习几种编程语言和软件,把它们作为技术技能写进简历。虽然你可能认为这是一种营销自己的策略,但它往往会适得其反。拥有数据科学、数据分析师和数据工程职位的公司和组织更有可能要求应聘者具备一种或两种或最多三种编程语言和软件的坚实背景。很少有职位要求你同时精通Python, R, SQL, C, c , c#, Matlab, Java, Ruby。相反,你应该研究一下你更可能在某个特定行业或公司使用的编程语言和软件;掌握你的编程和分析技能,并成为真正的专家。你将认识到,所有编程语言之间共享一个公共逻辑和类似的函数,在此之后,从一种语言到另一种语言的转换只需要学习一种不同的语法,而不需要学习它背后的整个逻辑。 没有在代码上写注释 尽管这听起来很明显,而且是一个无关紧要的任务,但它代表了一种很好的策略,可以跟踪每一行或每一块代码执行的操作,以便返回到暂停的项目。在最初的代码编写过程中,程序员对项目的目的和目标有了清晰而清晰的认识;他们知道自己想要编写的程序背后的逻辑步骤和追求的结果。然而,由于多种原因(经济约束、信息缺失、优先级的改变),所有的项目都很容易暂停,这将迫使程序员切换到不同的任务,而让先前的任务保持不变。一个中断的项目需要的时间越长,就越不容易记住它的位置和缺失的点。这里是注释发挥作用的地方。试着在你认为有必要的地方使用它们;记住要足够清晰,并记住它们应该允许代码程序员和执行者理解代码背后的逻辑步骤。 在代码编写过程中不要求反馈 在你的经理要求你做什么,他/她希望你做什么,客户要求什么,和你实际做什么之间总是有很大的差距。当你在开发一个程序或新代码时,试着把它分成几个阶段,并在进入下一个阶段之前征求反馈。在每个阶段结束后得到反馈,这将让你知道你是否正确,或者是否需要根据客户的要求进行更改。这并不意味着你无法理解其他人的要求,而是将其视为利益相关者之间的想法和期望的统一。如果在偏离正轨的情况下,你收到反馈的频率越高,你需要进行的修改就越少。请记住,持续的沟通对于每一个项目的成功实施都是至关重要的。 没有测试你当前的知识 你可能已经看了很多逐步编程教程。你可能也读过许多数据科学书籍和编程书。你可能已经完成了许多编程训练营的练习。下一步是什么?测试你目前的知识。这种训练营和课程的真正价值不在于证书本身,而在于你学到的知识,并能成功地应用于解决某个问题。老实说,每个人都可以通过参加在线课程来获得证书,只要跳过大部分的课程就可以了;公司和组织都非常清楚这一点。尝试把自己推向新的极限,在网上寻找编程挑战,尝试头脑风暴,在没有太多帮助资源的情况下编写代码。这并不意味着你在实际工作中不会用到它们,但它会让你感觉更舒服,更安全,更少依赖它们。 没有充分利用优缺点 在某种程度上,你可能会觉得使用一种特定的编程语言和软件是很舒服的,而你可能会发现学习一种新的语言和软件是没有用的。我曾多次听到数据分析师争论哪种编程语言在能力、可用库和包、在线资源和流行程度方面是最好的。但是,你必须足够谦虚,认识到总有从另一种语言、库、包或软件中学习新东西的空间。每种编程语言和软件都有其优点和缺点,但是我们的目标是充分利用它们,并具有足够的灵活性,以确定最适合用于特定任务以解决特定问题的语言和软件。 假设你什么都知道 相信我,没有人什么都知道。数据科学领域非常广泛,每天都要学习新东西。库、包、函数、方法和算法的总数非常多。永远保持好奇,保持谦虚,如果你认为你知道的很多,你实际知道的就很少。 原文链接: https://blog.csdn.net/fendouaini/article/details/103252444

茶什i 2020-01-15 11:57:21 0 浏览量 回答数 0

回答

您好,此类报警为硬盘使用率报警,建议您查看您的实例中的进程是否存在可疑进程。如果您的磁盘为数据盘, 您可以使用 磁盘扩容 功能扩容数据盘。 说明 建议在扩容数据盘之前手动创建快照,以备份数据。 无论数据盘的状态是   待挂载  还是   使用中,都可以执行磁盘扩容操作。 如果数据盘正在创建快照,则不允许执行扩容数据盘的操作。 包年包月实例如果做过   续费降配  操作,当前计费周期的剩余时间内,实例上的包年包月云盘不支持扩容磁盘操作。 扩容磁盘只是扩大数据盘容量,而不是扩容文件系统。 磁盘扩容只能扩容数据盘,不能扩容系统盘或本地盘(本地 SSD 盘等)。 挂载在实例上的数据盘,只有当实例处于   运行中  ( Running) 或   已停止( Stopped) 状态时才可以扩容。扩容这种数据盘需要在控制台上重启实例后才能使扩容后的容量生效,而重启实例会使您的实例停止工作,从而中断您的业务,所以请您 谨慎操作。 本文以一个高效云盘的数据盘和一个运行Windows Server 2008 R2企业版64位中文版的ECS实例为例,说明如何扩容数据盘并使扩容后的容量可用。示例中最初的磁盘大小为24 GiB,我们将其扩容到26 GiB。 您可以按以下步骤完成扩容操作: 步骤 1. 在控制台上扩容数据盘 步骤 2. 登录实例完成扩容 步骤 1. 在控制台上扩容数据盘 按以下步骤在控制台上扩容数据盘: 登录   ECS管理控制台。 在左侧导航栏里,选择   存储 > 云盘。 说明 如果您需要扩容的数据盘已经挂载在某个实例上,您可以单击  实例,找到相应实例后,进入实例详情页,并单击  本实例磁盘。 选择地域。 找到需要扩容的磁盘,并在   操作  列中,选择   更多 > 磁盘扩容。 在   磁盘扩容  页面上,设置   扩容后容量。在本示例中为26 GiB。扩容后容量只能比当前容量大。 待页面上显示费用信息后,单击   确定扩容。 说明 扩容成功后,磁盘列表里即显示扩容后的容量。但是,如果您的数据盘已经挂载到实例上,您需要在控制台上  重启实例 后,登录实例才能看到扩容后的数据盘容量。 在控制台上完成扩容后, 如果数据盘已经挂载到实例,可以直接执行   步骤 2. 登录实例完成扩容。 如果数据盘未挂载到实例上,您应先挂载数据盘(详见   挂载云盘),再根据数据盘的实际情况执行不同的操作: 如果这是一个全新的数据盘,您可以直接格式化数据盘。详见   Windows 格式化数据盘。 如果这个数据盘之前已经格式化并分区,您需要执行   步骤 2. 登录实例完成扩容。 步骤 2. 登录实例完成扩容 按以下步骤在实例内部完成数据盘扩容: 使用软件连接Windows实例。 在Windows Server桌面,单击服务器管理器图标   。 在   服务器管理器  的左侧导航窗格里,选择   存储 > 磁盘管理。在磁盘管理区域,可以看到新增的数据盘空间与旧的数据盘空间之间的关系。本例中, 磁盘 2  是扩容的数据盘。 右键单击   磁盘 2,选择   转换到动态磁盘,并按页面提示将基本磁盘转换为动态磁盘。   说明 基本磁盘转换成动态磁盘,操作的过程中会将磁盘从系统中卸载下来。如果数据盘内安装了应用程序,转换过程中这些应用程序暂时无法使用。转换过程中不会造成数据丢失。 完成转换后,磁盘 2 在磁盘管理器中显示如下。 右键单击磁盘 2的简单卷的任一空白处,并选择   扩展卷。 根据   扩展卷向导  的指示完成扩展卷操作。完成后,新增的数据盘空间会自动合入原来的卷中, 磁盘 2  在磁盘管理器中显示如下。 说明 如果是Windows Server 2003,完成后新增的数据盘空间会自动增加到数据盘中,但是在磁盘管理器中,新增的数据盘空间会以一个独立卷的形式存在。Windows Server 2003中,扩容多少次就会有创建多少个独立的卷,不会将所有的卷都合并到之前的卷里面,但并不会影响实际使用。以下是一个Windows Server 2003系统里扩容后数据盘的显示信息。 至此,您已经完成了扩容数据盘。 如果您对我的回答满意,请您采纳一下,谢谢!

zihangu 2019-12-02 00:30:26 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板