openGauss学习笔记-187 openGauss 数据库运维-常见故障定位手段

文章目录

    • openGauss学习笔记-187 openGauss 数据库运维-常见故障定位手段
      • 187.1 操作系统故障定位手段
      • 187.2 网络故障定位手段
      • 187.3 磁盘故障定位手段
      • 187.4 数据库故障定位手段

openGauss学习笔记-187 openGauss 数据库运维-常见故障定位手段

187.1 操作系统故障定位手段

查询状态时,显示一个节点上所有实例都不正常时,可能是操作系统发生了故障。

可以通过如下方法确定操作系统是否存在问题:

  • 通过SSH或者其它远程登录工具登录该节点。如果连接失败,请尝试通过ping发包检查网络状态。

    • 如果ping操作没有回复,则表明这台机器可能存在网络连接故障、处于宕机状态或者正处于重启状态。

      如果操作系统内核发生panic引起系统崩溃,系统重新启动时间较慢,需经过较长时间(大约20分钟)才能重启。建议每5分钟尝试连接一次,20分钟后不能连接成功,则表明这台机器已宕机或网络连接有问题,需要管理员到现场进行检查处理。

    • 如果网络可以ping通,但在SSH登入时卡住或登入后不能执行任何命令,通常是由系资源不足(如CPU或IO资源过载)引起的机器不响应外部连接。建议重试几次。如果5分钟内仍不能成功,需要管理员到现场进行检查处理。

  • 可以远程登录节点,但在执行操作时,响应缓慢,需要检查系统运行情况后,进行进一步处理。例如,收集系统信息、确定系统版本、硬件、参数设置及登录用户情况。下面列出一些常用命令供参考。

    • “who”命令查看当前在线用户。
[root@openGauss36 ~]# who
root     pts/0        2020-11-07 16:32 (10.70.223.238)
wyc      pts/1        2020-11-10 09:54 (10.70.223.222)
root     pts/2        2020-10-10 14:20 (10.70.223.238)
root     pts/4        2020-10-09 10:14 (10.70.223.233)
root     pts/5        2020-10-09 10:14 (10.70.223.233)
root     pts/7        2020-10-31 17:03 (10.70.223.222)
root     pts/9        2020-10-20 10:03 (10.70.220.85)
-   “cat /etc/openEuler-release”和“uname -a”命令检查系统的版本和内核信息。
[root@openGauss36 ~]# cat /etc/openEuler-release 
openEuler release 20.03 (LTS)
[root@openGauss36 ~]# uname -a
Linux openGauss36 4.19.90-2003.4.0.0036.oe1.aarch64 #1 SMP Mon Mar 23 19:06:43 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
[root@openGauss36 ~]#
-   “sysctl -a”命令(需要root用户执行)和“cat /etc/sysctl.conf”命令获得系统参数信息。
-   “cat /proc/cpuinfo”和“cat /proc/meminfo”获得CPU和内存信息。```[root@openGauss36 ~]# cat /proc/cpuinfoprocessor	: 0BogoMIPS	: 200.00Features	: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhmCPU implementer	: 0x48CPU architecture: 8CPU variant	: 0x1CPU part	: 0xd01CPU revision	: 0[root@openGauss36 ~]# cat /proc/meminfoMemTotal:       534622272 kBMemFree:        253322816 kBMemAvailable:   369537344 kBBuffers:         2429504 kBCached:         253063168 kBSwapCached:            0 kBActive:         88570624 kBInactive:       171801920 kBActive(anon):    4914880 kBInactive(anon): 67011456 kBActive(file):   83655744 kBInactive(file): 104790464 kB```-   “top -H”命令查看CPU的使用情况,确定是否因为某个进程导致CPU使用率过高。如果存在这种情况,通过gdb或gstack打印该程序堆栈,观察是否该程序处于死循环逻辑。
-   “iostat -x 1 3”命令查看IO的使用情况,确定是否当前磁盘的IO处于饱和状态。查看当前运行的执行作业情况,决定是否对占用较多IO的执行作业进行处理。
-   “vmstat 1 3”命令查看当前系统中内存的消耗情况,结合“top”命令获得消耗内存较多的进程,处于超出预期的状态。
-   以root用户查看操作系统日志信息(/var/log/messages)或dmseg信息,检查操作系统是否发生过异常错误。
-   操作系统的watchdog是为了保证OS系统正常运行,或者从死循环,死锁等状态退出的一种机制,如果watchdog超时(一般默认值为60s),系统将会复位。

187.2 网络故障定位手段

在数据库正常工作的情况下,网络层对上层用户是透明的,但数据库在长期运行时,可能会由于各种原因导致出现网络异常或错误。常见的因网络故障引发的异常有:

  • 数据库启动失败,报网络错误。
  • 状态异常,如:节点上所有的实例都是UnKnown或者所有主机都切换为备机。
  • 网络连接建立失败。
  • 对数据库执行SQL操作时,报网络异常中断的错误。
  • 连接数据库或执行查询时发生进程停止响应。数据库出现了网络故障后,主要通过使用Linux系统提供的网络相关命令工具(ping、ifconfig、netstat、lsof等),进程堆栈查看工具(gdb、gstack),结合数据库的日志信息,进行分析定位。本节通过举例介绍常见的网络问题,并进行基本的分析定位。

常见故障问题如下:

  • 启动失败,报网络错误

    问题现象1:日志中存在如下错误信息。可能是端口被其他进程侦听。

    LOG: could not bind socket at the 10 time, is another postmaster already running on port 54000?
    

    处理办法:执行如下命令查看侦听该端口的进程。端口号请根据实际端口号替换。

    [root@openGauss36 ~]# netstat -anop | grep 15970
    tcp        0      0 127.0.0.1:15970         0.0.0.0:*               LISTEN      3920251/gaussdb      off (0.00/0/0)
    tcp6       0      0 ::1:15970               :::*                    LISTEN      3920251/gaussdb      off (0.00/0/0)
    unix  2      [ ACC ]     STREAM     LISTENING     197399441 3920251/gaussdb      /tmp/.s.PGSQL.15970
    unix  3      [ ]         STREAM     CONNECTED     197461142 3920251/gaussdb      /tmp/.s.PGSQL.15970
    

    根据查询结果,强行停止正在占用端口的进程或者更改数据库侦听端口。

    问题现象2:使用gs_om -t status –detail 查询状态,如果显示主备间连接未建立。

    处理办法:在openEuler操作系统下,使用systemctl status firewalld.service命令,查看节点上是否开启了防火墙。如果开启,使用systemctl stop firewalld.service关闭防火墙。

    [root@openGauss36 mnt]# systemctl status firewalld.service
    ●firewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)Active: inactive (dead)Docs: man:firewalld(1)
    

    操作系统不同,命令可能不同,使用对应操作系统命令查看修改。

  • 数据库状态异常

    问题现象:某一节点上出现如下问题:

    • 所有实例都是UnKnown。
    • 所有主实例都切换成了备实例。
    • 查询中出现大量Connection reset by peer,Connection timed out等报错信息。

    处理办法

    • 如果ssh不能连接故障机器,在其他机器上使用Ping命令向该机器发数据包。如果可以Ping通,说明可能是该机器上的资源(内存、CPU、磁盘)耗尽导致不能建立连接。

    • 如果ssh可以连接该机器,尝试执行查询,并每隔1s执行/sbin/ifconfig eth?(?代表数字,表示第几个网卡)命令,查看如下信息中的dropped及errors值的变化情况,如果增长迅速,可能是网卡或网卡驱动故障。

      [root@openGauss36 ~]# ifconfig enp125s0f0
      enp125s0f0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 10.90.56.36  netmask 255.255.255.0  broadcast 10.90.56.255inet6 fe80::7be7:8038:f3dc:f916  prefixlen 64  scopeid 0x20<link>ether 44:67:47:7d:e6:84  txqueuelen 1000  (Ethernet)RX packets 129344246  bytes 228050833914 (212.3 GiB)RX errors 0  dropped 647228  overruns 0  frame 0TX packets 96689431  bytes 97279775245 (90.5 GiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
      
    • 检查如下参数设置是否正确。

      net.ipv4.tcp_retries1 = 3
      net.ipv4.tcp_retries2 = 15
      
  • 网络连接建立失败

    问题现象1:节点连接其他节点失败,日志中报出“ Connection refused ”错误。

    处理办法

    • 查看端口是否配置错误,导致连接时使用的端口并非对方侦听的端口。查看报错节点配置文件postgresql.conf记录端口号与对方侦听的端口就号是否一致。
    • 查看对方端口侦听是否正常(可以使用“netstat –anp”命令)。
    • 查看对方进程是否存在。

    问题现象2:对数据库执行SQL操作时,获取连接描述符失败,报错如下。

    WARNING:  29483313: incomplete message from client:4905,9 
    WARNING:  29483313: failed to receive connDefs at the time:1. 
    ERROR:  29483313: failed to get pooled connections 
    

    在日志中,找到上面的错误,并向上查看一段日志内容,可以看到详细的错误信息,常见的错误如下所示,主要是由于主备信息不正确导致。

    FATAL:  dn_6001_6002: can not accept connection in pending mode. 
    FATAL:  dn_6001_6002: the database system is starting up 
    FATAL:  dn_6009_6010: can not accept connection in standby mode.
    

    处理办法:

    • 使用gs_om -t status –detail查询状态,确认是否发生过主备切换。重置实例状态。
    • 此外,需要查看连接失败的节点是否发生了core或者重启。通过om日志可以查看到是否发生了重启。
  • 对数据库执行 SQL 操作时,报网络异常中断的错误

    问题现象1:查询执行失败,报错信息如下。

    ERROR:  dn_6065_6066: Failed to read response from Datanodes. Detail: Connection reset by peer. Local: dn_6065_6066 Remote: dn_6023_6024
    ERROR: Failed to read response from Datanodes Detail: Remote close socket unexpectedly
    ERROR: dn_6155_6156: dn_6151_6152: Failed to read vector response from Datanodes
    

    连接建立失败,报错信息如下。

    ERROR:  Distribute Query unable to connect 10.145.120.79:14600 [Detail:stream connect connect() fail: Connection timed out
    ERROR: Distribute Query unable to connect 10.144.192.214:12600 [Detail:receive accept response fail: Connection timed out 
    

    处理办法

    1. 使用gs_check检查网络配置是否符合标准。详细参考《工具与命令参考》中“服务端工具 > gs_check”章节中对network的检查。
    2. 查看是否有进程发生core或重启,以及主备切换。
    3. 如果不存在上述问题,可以联系网络技术人员做具体分析。

187.3 磁盘故障定位手段

常见的磁盘故障是磁盘空间不足、磁盘出现坏块、磁盘未挂载等。部分磁盘故障会导致文件系统损坏,例如磁盘未挂载,数据库管理自动定期执行磁盘检测时会识别故障并将实例停止,查看数据库状态时对应实例状态异常;部分磁盘故障不会导致文件系统损坏,例如磁盘空间不足,数据库管理无法检测到,服务进程访问到故障磁盘会异常退出,例如数据库无法启动、checksum校验不对、页面读写失败、页面校验错误等。

  • 对于会导致文件系统损坏的故障,查看状态会显示对应实例状态持续为Unknown,定位方法如下:

    • 查看日志,日志中会有类似 “data path disc writable test failed”异常,说明文件系统已损坏。

    • 文件系统损坏可能是磁盘未挂载,通过ls –l可以看到该磁盘对应的目录权限异常,如下。

    • 也可能是磁盘出现坏块,然后操作系统将文件系统保护起来,拒绝读写,可以使用磁盘坏块检查工具如badblocks检查磁盘是否有坏块,如下。

      [root@openeuler123 mnt]# badblocks /dev/sdb1 -s -v
      Checking blocks 0 to 2147482623
      Checking for bad blocks (read-only test): done                                                 
      Pass completed, 0 bad blocks found. (0/0/0 errors)
      
  • 对于不会导致文件系统损坏的故障,服务进程访问到故障磁盘会异常退出,定位方法如下。

    查看日志。日志中会有文件读写错误,例如“No space left on device”、“ invalid page header n block 122838 of relation base/16385/152715”。 文件读写错误可能是磁盘空间不足,通过df -h可以看到磁盘空间已达100%,如下。

    [root@openeuler123 mnt]# df -h
    Filesystem                  Size  Used Avail Use% Mounted on
    devtmpfs                    255G     0  255G   0% /dev
    tmpfs                       255G   35M  255G   1% /dev/shm
    tmpfs                       255G   57M  255G   1% /run
    tmpfs                       255G     0  255G   0% /sys/fs/cgroup
    /dev/mapper/openeuler-root  196G  8.8G  178G   5% /
    tmpfs                       255G  1.0M  255G   1% /tmp
    /dev/sda2                   9.8G  144M  9.2G   2% /boot
    /dev/sda1                    10G  5.8M   10G   1% /boot/efi
    /dev/mapper/openeuler-home  1.5T   69G  1.4T   5% /home
    tmpfs                        51G     0   51G   0% /run/user/0
    tmpfs                        51G     0   51G   0% /run/user/1004
    /dev/sdb1                   2.0T  169G  1.9T   9% /data
    

187.4 数据库故障定位手段

  • 日志。数据库日志记录了数据库服务端启动、运行或停止时出现的问题,当数据库在启动、运行或停止的过程中出现问题时,数据库用户可以通过运行日志快速分析问题的产生原因,并根据不同的原因采取相应的处理方法,尽可能地解决问题。
  • 视图。数据库提供了许多视图,用于展示数据库的内部状态,在定位故障时,经常使用的视图如下:
    • pg_stat_activity,用于查询当前实例上各个session的状态。
    • pg_thread_wait_status,用于查询该实例上各个线程的等待事件。
    • pg_locks,用于查询当前实例上的锁状态。
  • CORE文件。数据库相关进程在运行过程中可能会因为各种意外情况导致数据库崩溃(Coredump),而崩溃时产生的core文件对于迅速定位程序崩溃的原因及位置非常重要。如果进程运行时出现Coredump现象,建议立即收集core文件便于分析、定位故障。
    • 对性能有一定的影响,尤其是进程频繁异常时对性能的影响更大。
    • core文件会占用磁盘空间。因此,当检查到core文件产生后,应及时解决以避免对操作系统带来更严重的影响。操作系统自带core dump机制。开启后,系统中所有出现Coredump问题时都会生成core文件,对操作系统带来性能和磁盘占用的影响。
    • 设置core文件生成路径。修改/proc/sys/kernel/core_pattern内容。
[root@openeuler123 mnt]# cat /proc/sys/kernel/core_pattern
/data/jenkins/workspace/openGaussInstall/dbinstall/cluster/corefile/core-%e-%p-%t

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/599300.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Element】el-form和el-table嵌套实现表格编辑并提交表单校验

一、背景 页面需要用到表格采集用户数据&#xff0c;提交时进行表单校验&#xff1b;即表格中嵌套着表单&#xff0c;保存时进行表单校验 二、功能实现 2.1、el-form和el-table嵌套说明 ① :model"formData" 给表单绑定数据&#xff0c;formData是表单的数据对象 …

springboot、spring-kafka、kafka-client的版本对应关系

在使用springboot集成kafka的时候需要注意springboot版本、引用的依赖spring-kafka版本和kafka中间件版本的对应关系&#xff0c;否则可能会因为版本不兼容导致出现错误。 1、含义说明&#xff08;摘自官网&#xff09; Spring Boot&#xff1a;是springboot的版本。Spring fo…

设计模式——最全梳理,最好理解

新年献礼&#xff01; 设计模式呕心梳理 创建型模式 单例模式&#xff08;Singleton Pattern&#xff09;https://blog.csdn.net/qq_34869143/article/details/134874044 整理中... 结构型模式 代理模式&#xff08;Proxy Pattern&#xff09;https://blog.csdn.net/qq_34…

任务调度实现

一、定时任务概述 在项目中开发定时任务应该一种比较常见的需求&#xff0c;在 Java 中开发定时任务主要有三种解决方案&#xff1a;一是使用JDK 自带的 Timer&#xff0c;二是使用 Spring Task&#xff0c;三是使用第三方组件 Quartz Timer 是 JDK 自带的定时任务工具,其简单易…

解决:Microsoft Visual C++ 14.0 is required.

Microsoft Visual C 14.0 is required. Get it with “Microsoft Visual C Build Tools 当我们安装绝大部分python包的时候可以通过pip install 或者 conda install解决&#xff0c;但是任然有些包是安装不了的&#xff0c;比如我的就是在安装pyqt5的时候报Building wheel for…

基于MyCat2.0实现MySQL分库分表方案

目录 一、MyCat概述 二、MyCat作用 2.1 数据分片 2.1.1 垂直拆分 2.1.1.1 垂直分库 2.1.1.2 垂直分表 2.1.1.3 总结 2.1.2 水平拆分 2.1.2.1 水平分库 2.1.2.2 水平分表 2.1.2.3 总结 2.2 读写分离 2.3 多数据源整合 三、MyCat 与ShardingJDBC的区别 3.1 MyCat …

某大型电商APP sign头部签名逆向分析

APP版本 唯品会 7.45Java层抓包分析 打开抓包工具 charles进行分析&#xff0c;可以发现对于API采集需要突破当前这个参数&#xff0c;否则不返回信息 jadx静态分析 jadx静态分析&#xff0c;打开app搜索关键词api_sign&#xff0c;可以发现有参数位置 跟进去上边str赋值方…

phpstudy_pro 关于多版本php的问题

我在phpstudy中安装了多个PHP版本 我希望不同的网站可以对应不同的PHP版本&#xff0c;则在nginx配置文件中需要知道不同的PHP版本的监听端口是多少&#xff0c;如下图所示 然而找遍了php.ini配置&#xff0c;并未对listen进行设置&#xff0c;好奇是怎么实现不同的PHP监听不同…

时代变了,Spring 官方抛弃了 Java 8!

先容许我吐槽一句&#xff1a;Spring 官方&#xff0c;窝草尼玛&#xff01; 原谅我很愤怒&#xff01;最近编程导航星球和群友们反复问一个问题&#xff1a;为啥用 IDEA 创建 Spring Boot 项目时&#xff0c;不能选择 Java 8 了&#xff1f; 我本来以为是 IDEA 版本更新导致的…

html+css 有关于less的使用和全面解释

目录 less 注释 运算 嵌套 变量 导入 导出 禁止导出 less Less是一个CSS预处理器, Less文件后缀是.less。扩充了 CSS 语言, 使 CSS 具备一定的逻辑性、计算能力 注意&#xff1a;浏览器不识别 Less 代码&#xff0c;目前阶段&#xff0c;网页要引入对应的 CSS 文件 V…

聚道云软件连接器助力某动漫行业公司实现财务自动化

客户介绍 某动漫行业公司是一家专注于文化创意领域&#xff0c;致力于为人们提供独特、有趣的文化产品。公司拥有一支充满活力和创造力的团队&#xff0c;他们以卓越的创意和精湛的技术&#xff0c;创造出了一系列令人惊叹的作品。未来&#xff0c;该公司将继续秉承这一理念&a…

若依前后端分离版关联字典值查询数据工具类使用

场景 若依管理系统导出Excel时添加没有的列和关联码表显示中文进行导出&#xff1a; 若依管理系统导出Excel时添加没有的列和关联码表显示中文进行导出_若依的导出添加额外的字段信息-CSDN博客 上面通过关联表的方式实现查询字典值&#xff0c;若依本身提供了查询redis中缓存…

1.5C语言 双曲正弦函数(*) 优化麦克劳林公式

一.传统算法 #include<stdio.h> #include<math.h> int jc(int x); int main(){double x,eps,y0.0;scanf("%lf%lf",&x,&eps);int de1,i1;double item1.0;while(fabs(item)>eps){itempow(x,i)/jc(de);i2;yitem;}printf("%.6f\n",y); …

buildroot 编译错误【001】

在GitHub 查找错误,也挺好用 解决办法 fakeroot 错误

UE相关杂项笔记

1.PAK包解析 UE4如何反向查找Pak里面包含哪些文件 - 哔哩哔哩 CMD控制台命令输入 D:&quot;Epic Games&quot;\UE_5.1\Engine\Binaries\Win64\UnrealPak.exe 包路径 -list *文件夹带空格时 添加“ ”包裹住文件夹名 解包工具路径 UE引擎安装路径\UE_5.1\Engine\Binarie…

从Spring Cloud Alibaba开始聊架构

作为SpringCloudAlibaba微服务架构实战派上下册和RocketMQ消息中间件实战派上下册的作者胡弦。 另外我的新书RocketMQ消息中间件实战派上下册&#xff0c;在京东已经上架啦&#xff0c;目前都是5折&#xff0c;非常的实惠。 https://item.jd.com/14337086.htmlhttps://item.jd…

服务端如何防止订单重复支付

概述 如图是一个简化的下单流程&#xff0c;首先是提交订单&#xff0c;然后是支付。 支付的话&#xff0c;一般是走支付网关&#xff08;支付中心&#xff09;&#xff0c;然后支付中心与第三方支付渠道&#xff08;微信、支付宝、银联&#xff09;交互。 支付成功以后&…

C语言——指针

一、定义 指针也就是内存地址&#xff0c;指针变量是用来存放内存地址的变量。 将内存以一个字节分为一个个内存单元&#xff0c;每个内存单元都进行编号&#xff0c;这个编号就是地址&#xff0c;也就是指针。 int b 1;int *pb &b;//这里的pb变量是一个整型指针变量&a…

某音关键词搜索商品接口,某音关键词搜索商品列表接口,宝贝详情页接口,某音商品比价接口接入方案

要接入API接口以采集电商平台上的商品数据&#xff0c;可以按照以下步骤进行&#xff1a; 1、找到可用的API接口&#xff1a;首先&#xff0c;需要找到支持查询商品信息的API接口。这些信息通常可以在电商平台的官方文档或开发者门户网站上找到。 2、注册并获取API密钥&#x…

计算机网络期末复习

计算机网络复习 1.第一章 1.2.2计算机啊网络的分类(认识) 按网络的覆盖范围进行分类&#xff1a; 局域网城域网广域网个人区域网 按网络的使用者进行分类&#xff1a; 公用网专用网 1.3互联网的组成(掌握) 从功能上可以划分为以下两大部分&#xff1a; 边缘部分&#x…