草庐IT

卷扩容业务失败了,在线等…

华为云开发者社区 2023-03-28 原文
摘要:卷扩容一般指实例级的磁盘扩容。

本文分享自华为云社区《【公有云公共】卷扩容业务失败》,作者:酷哥。

一、基本背景介绍

卷扩容一般指实例级的磁盘扩容。随着客户业务的不断开展,磁盘使用率也会随之增加。当磁盘使用率过高时,会影响数据库的使用,这时建议用户清理无用数据、运维清理无用日志或用户来操作卷扩容任务。

tips:

1、磁盘使用率过高时,会影响甚至完全阻塞客户的业务开展,所以GaussDB为各实例配置了巡检告警的指标参数,超过该指标的阈值时,即会上报告警。(该指标阈值必须设定的比datastorage_threshold_value_check(数据库只读阈值)低一些,这样才能达到提醒的效果。)

2、当超过datastorage_threshold_value_check(数据库只读阈值,百分数,默认值85),且enable_transaction_read_only(超过阈值后改为只读模式,默认为on)参数为on时,实例会改为只读模式,禁止用户的写入操作。

3、default_transaction_read_only(数据库只读模式参数,默认值off),设置为on后无法执行dml和写事务,即手动设置数据库为只读模式。

二、卷扩容任务失败处理办法

1、实例的磁盘使用率已经超过阈值,处于只读状态,导致卷扩容任务流失败。

处理思路:改善磁盘使用率

方法一:临时调大datastorage_threshold_value_check(数据库只读阈值),保证卷扩容任务完成后,回调该阈值。

  1. 告警或问题单提权后登陆问题实例的CMS主节点。
  2. cat /var/chroot/usr/local/cm/cm_server/cm_server.conf|grep "datastorage_threshold_value_check"(查询并记录当前只读阈值参数X1)
  3. gs_guc reload -Z cmserver -N all -I all -c "datastorage_threshold_value_check=X2"(调整只读阈值参数至X2,X2取值(1-99))

4)重试任务流至成功结束。

5)gs_guc reload -Z cmserver -N all -I all -c "datastorage_threshold_value_check=X1"(任务流重试成功结束后回调只读阈值参数至X1)

方法二:删除无效或失效的日志文件(联系内核工程师确认)

使用df –h命令查看当前磁盘使用率较高的磁盘,确认当前使用率,可能存在风险的目录包括/home/Ruby/log、/home/Ruby、/home/Mike、$PGHOST、/user/local(DN);

其中/home/Ruby/log下主要存放系统日志,管控日志以及om_agent日志,正常情况下这些日志均有自动清理和回收机制,若发现某类日志数量明显增加,则可能存在风险,需要手动清理(例如om_agent默认保留10个日志文件、管控日志默认保留20个等);

/home/Ruby和/home/Mike目录下主要会存放一些运维操作的临时文件,这些文件一般情况下在运维操作结束后就可以清理,可能存在忘记清理或者临时文件生成过大的情况,需要及时处理;

$PGHSOT目录下主要存放数据库运行相关的临时文件,若存在较大文件,需要确认文件用途后,采取清理动作;DN上的/usr/local目录使用系统磁盘,可能有一些运维操作也会在此目录下落盘,需要及时清理。

2、管控或AGENT调用等报错导致任务流报错失败

(检查任务流信息,视报错内容及步骤联系管控或AGENT确认)

(1)任务流中在内核扩容步骤报错。

登录实例堡垒机CN节点后台,使用df –h命令查看当前磁盘使用情况,若看到磁盘容量已经更新,则说明内核的磁盘扩容任务已成功。需要联系管控人员,确认任务流的报错信息,定位报错在哪一步,并根据管控人员的指引操作。(若磁盘未扩容成功,说明确实为内核问题,联系内核工程师处理)

(2)任务流中还未到达内核扩容步骤,前置子任务流或步骤报错。 需要联系管控人员,确认任务流的报错信息,定位报错在哪一步,并根据管控人员的指引操作。

(3)任务流中内核扩容步骤已成功完成,后置子任务流或步骤报错。 需要联系管控人员,确认任务流的报错信息,定位报错在哪一步,并根据管控人员的指引操作。

三、卷任务流扩容失败处理案例分享

1、问题定位:确认任务流中子任务流下发报错,联系管控根据其指引定位问题,确认为管控节点存在异常。(管控自身的3个节点中2个节点存在问题,只要调用到异常节点就会报错)

2、处理办法:多次重试任务流以规避管控的故障节点,后重入任务流直至成功结束。

 

点击关注,第一时间了解华为云新鲜技术~

有关卷扩容业务失败了,在线等…的更多相关文章

  1. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  2. ruby-on-rails - 创建 ruby​​ 数据库时惰性符号绑定(bind)失败 - 2

    我正在尝试在Rails上安装ruby​​,到目前为止一切都已安装,但是当我尝试使用rakedb:create创建数据库时,我收到一个奇怪的错误:dyld:lazysymbolbindingfailed:Symbolnotfound:_mysql_get_client_infoReferencedfrom:/Library/Ruby/Gems/1.8/gems/mysql2-0.3.11/lib/mysql2/mysql2.bundleExpectedin:flatnamespacedyld:Symbolnotfound:_mysql_get_client_infoReferencedf

  3. ruby - 正则表达式在哪个位置失败? - 2

    我需要一个非常简单的字符串验证器来显示第一个符号与所需格式不对应的位置。我想使用正则表达式,但在这种情况下,我必须找到与表达式相对应的字符串停止的位置,但我找不到可以做到这一点的方法。(这一定是一种相当简单的方法……也许没有?)例如,如果我有正则表达式:/^Q+E+R+$/带字符串:"QQQQEEE2ER"期望的结果应该是7 最佳答案 一个想法:你可以做的是标记你的模式并用可选的嵌套捕获组编写它:^(Q+(E+(R+($)?)?)?)?然后你只需要计算你获得的捕获组的数量就可以知道正则表达式引擎在模式中停止的位置,你可以确定匹配结束

  4. ruby - 使用 rbenv 和 ruby​​-build 构建 ruby​​ 失败,出现 undefined symbol : SSLv2_method - 2

    我正在尝试在配备ARMv7处理器的SynologyDS215j上安装ruby​​2.2.4或2.3.0。我用了optware-ng安装gcc、make、openssl、openssl-dev和zlib。我根据README中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby​​-build插件。.这些是随optware-ng安装的软件包及其版本binutils-2.25.1-1gcc-5.3.0-6gconv-modules-2.21-3glibc-opt-2.21-4libc-dev-2.21-1libgmp-6.0.0a-1libmpc-1.0.2-1libm

  5. ruby-on-rails - Ruby 的 'open_uri' 是否在读取或失败后可靠地关闭套接字? - 2

    一段时间以来,我一直在使用open_uri下拉ftp路径作为数据源,但突然发现我几乎连续不断地收到“530抱歉,允许的最大客户端数(95)已经连接。”我不确定我的代码是否有问题,或者是否是其他人在访问服务器,不幸的是,我无法真正确定谁有问题。本质上,我正在读取FTPURI:defself.read_uri(uri)beginuri=open(uri).readuri=="Error"?nil:urirescueOpenURI::HTTPErrornilendend我猜我需要在这里添加一些额外的错误处理代码...我想确保我采取一切预防措施来关闭所有连接,这样我的连接就不是问题所在,但是我

  6. ruby-on-rails - Ruby 流量控制 : throw an exception, 返回 nil 还是让它失败? - 2

    我在思考流量控制的最佳实践。我应该走哪条路?1)不要检查任何东西并让程序失败(更清晰的代码,自然的错误消息):defself.fetch(feed_id)feed=Feed.find(feed_id)feed.fetchend2)通过返回nil静默失败(但是,“CleanCode”说,你永远不应该返回null):defself.fetch(feed_id)returnunlessfeed_idfeed=Feed.find(feed_id)returnunlessfeedfeed.fetchend3)抛出异常(因为不按id查找feed是异常的):defself.fetch(feed_id

  7. ruby - gem 规范失败 - 2

    我正在为毕业设计开发GEM,TravisCI构建不断失败。这是我在Travis上的链接:https://travis-ci.org/ricardobond/perpetuus/builds/8709218构建错误是:$bundleexecrakerakeaborted!Don'tknowhowtobuildtask'default'/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_wrapper:14:in`eval'/home/travis/.rvm/gems/ruby-1.9.3-p448/bin/ruby_noexec_

  8. ruby-on-rails - "rails generate rspec:install"似乎失败了 - 2

    运行:ruby1.9.3p0和Rails3.2.1尝试使用rspec但当我尝试将其安装到我的应用程序中时出现以下错误:/Users/Si/.rvm/gems/ruby-1.9.3-p0/gems/railties-3.2.1/lib/rails/railtie/configuration.rb:85:in`method_missing':undefinedmethod`generators'for#(NoMethodError)from/Users/Si/.rvm/gems/ruby-1.9.3-p0/gems/rspec-rails-2.0.0.beta.18/lib/rspec-r

  9. ruby - Date 与 nil 的比较失败 - ruby - 2

    我正在运行这样的代码:ifvalid_from>Date.today当我运行它时,我得到一个错误提示comparisonofDatewithnilfailed我假设它正在发生,因为在某些情况下valid_from是nil。有没有办法避免出现此错误? 最佳答案 你可以这样做:ifvalid_fromandvalid_from>Date.today...end这将在第一个子句上短路,因为valid_from为nil,因此为false。 关于ruby-Date与nil的比较失败-ruby,我们

  10. ruby-on-rails - ActiveRecord 验证失败后如何将内容保存到数据库? - 2

    基本上我想要做的是在MyModelLog表中记录对MyModel的操作。这是一些伪代码:classMyModel我也有一个看起来像这样的模型:classMyModelLog"somethinghappened")endend为了记录我尝试:在MyModel的something方法中添加MyModelLog.log_something在MyModel的after_validation回调上调用MyModelLog.log_something在这两种情况下,创建都会在验证失败时回滚,因为它在验证事务中。当然我也想在验证失败时记录。我真的不想登录文件或数据库以外的其他地方,因为我需要日志条目

随机推荐