Author Archives: arstercz

linux 系统 xfs_vm_releasepage 警告问题处理

By | 2019-03-27

问题说明 最近的几台机器在同一天的不同时段都出现以下警告信息: Mar 26 20:55:03 host1 kernel: WARNING: at fs/xfs/xfs_aops.c:1045 xfs_vm_releasepage+0xcb/0x100 [xfs]() Mar 26 20:55:03 host1 kernel: Modules linked in: nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack iptable_filter ip_tables ebtable_filter ebtables ip6table_ filter ip6_tables devlink bridge stp llc xt_multiport sunrpc dm_mirror dm_region_hash dm_log dm_mod intel_powerclamp coretemp intel_rapl iosf_mbi kvm_intel kvm irqbypa ss crc32_pclmul ghash_clmulni_intel aesni_intel lrw gf128mul glue_helper… Read More »

TokuDB 使用问题汇总

By | 2019-02-19

简单介绍 TokuDB 引擎提供很好的压缩比(笔者环境中的数据在默认的 zlib 设置下压缩比大致为 InnoDB:TokuDB ~= 5:1), 以及快速增加, 删除, 重命名列, 热更索引等特性, 这些特性很适合日志记录类的表来使用, 该类表可以仅做主从复制, 不做定期的备份. 如果需要备份可以参考 AliSQLBackup, 其基于 xtrabackup-2.3.5版本, 可以同时备份 InnoDB 和 TokuDB 引擎的表. 另外innodb_buffer_pool_size 和 tokudb_cache_size 两个参数的值需要按需分配, 如果没有多少 InnoDB 表, 最好调小 innodb_buffer_pool_size 的值. 更多基础的特性说明可以参考以前的文章: TokuDB 使用简单说明. 下述的问题列表则主要介绍在使用 TokuDB 的过程中碰到的一些问题, 后期碰到的问题也会在该列表中持续更新. 问题列表 修改分区表耗时长问题处理 转换 InnoDB 大表到 TokuDB 崩溃问题 修改 tokudb_data_dir 参数出现不能找到文件错误 temp 锁占用不能启动问题 修改分区表耗时长问题处理 详见… Read More »

使用 mmm-manager 管理云环境中的 MySQL 双主实例

By | 2019-01-28

介绍说明 在之前的工具中, mha_switch 和 mha_manager_consul 的使用都是建立在虚 ip 漂移的基础上实现的高可用方案. 不过在云环境中, 目前很多的云厂商还不支持虚 ip 漂移的功能, SLB(负载均衡)等没有类似 haproxy 的 backup 模式, 所以不适用于单 master 读写的场景. 如果使用 SLB 代理多 master, 则很难保证数据一致性问题(比如主从延迟). 一些组织在使用云环境的时候可能首要考虑数据安全性, 这种情况下可能不会考虑 RDS 之类的服务, 而是在云主机中自建 MySQL 实例, 并且最好占用整个宿主机. 如果自建实例, 就一定需要考虑高可用方案, 在不支持虚 ip 漂移的情况下, dns 服务或者绑 hosts 文件是个可选的方案, 在故障切换的时候做好对应的记录修改即可, 不过这种方式需要业务做对应调整, 在业务复杂的场景下, 需要保证修改记录的准确性和及时性. mmm-manager 则提供了另一种方案用来管理双主满足高可用的需求. 不过该方案依赖一些编程语言驱动的特性支持. 对于不支持特性的编程语言, mmm-manager 提供了更新 redis key 值,… Read More »

Linux 系统如何处理名称解析

By | 2018-12-19

简单介绍 在 Linux 系统中, 绝大多数程序依赖系统库函数来完成名称解析, 整个解析过程包含多个操作, 有些操作信息在启动程序时确定, 有些操作信息则在程序运行时确认, Linux 也提供了一些网络函数(由 glibc 提供)来控制这些操作,下图所示为一个比较典型的应用程序, 域名解析及域名服务器之间的关系图: 程序在运行后通过 glibc 提供的网络函数(gethostbyname, getaddrinfo等)来调用解析器(resolver code, 比如 nsswitch 等), 解析器则读取一些配置文件(比如 /etc/nsswitch.conf, /etc/hosts, /etc/resolv.conf) 来决定使用什么域名服务器(nameserver)以什么选项(超时时间, 重试次数), 什么优先级(先 hosts 还是 先 dns) 对指定的域名进行处理. 当然也可以使用 dns 缓存类的工具加速请求的处理, 这些工具可以是 bind(当缓存用), nscd(由 glibc 提供), systemd-resolved(由 systemd 提供). 下面则简单介绍解析器提供的几个网络函数. 函数说明 glibc 的解析器(revolver code) 提供了下面两个函数实现名称到 ip 地址的解析, gethostbyname 函数以同步阻塞的方式提供服务, 没有超时等选项,… Read More »

使用 systemd 限制系统资源的使用

By | 2018-12-10

简单介绍 在基于 Linux-3.x 内核版本的很多发行版都提供了 Systemd 来管理系统和服务. 同时也将 cgroup 功能加到了 slice, scope 和 service 三个单元中, 详见 sec-Default_Cgroup_Hierarchies. 基于这些特性我们可以很方便的通过 systemd 来限制服务或者进程对系统资源的使用, 这在单主机多服务的场景下会很有用. 下面则以 MySQL 服务为例介绍如何使用 systemd 限制资源的使用, 其它服务的限制和此等同. 示例使用 以 Centos7 系统为例, 从 redhat-resource-control 的文档来看, 官方建议通过 service 来实现资源的限制, 所以这里我们增加可以带端口参数(如果单台主机有多个 MySQL 实例的话)启动的 mysql 服务: # cat /usr/lib/systemd/system/mysql@.service [Unit] Description=MySQL Server node%i [Service] Type=forking Environment=”PORT_ARGS=%I” PermissionsStartOnly=true ExecStart=/usr/local/mysqlnode/bin/node ${PORT_ARGS} start… Read More »

TokuDB 修改分区表耗时长问题处理

By | 2018-12-06

问题说明 在之前的文章TokuDB 使用简单说明中简单介绍了如何使用 TokuDB, 其固有的特性很适合存储日志类的需求, 不过近期在修改 TokuDB 分区表的时候出现操作时间较长的提示, 业务端也同时出现响应时间较长的请求. 如下所示: # bash text_data_partition.sh 127.0.0.1 3311 text_base text_data 2018_12_05_14_55_39 [info] alter maxvalue of the partitions 2018_12_05_14_55_39 [info] reorganize p20181217 partition 2018_12_05_14_55_44 [info] reorganize p20181217 partition ok 我们按天对 text_data 表进行分区, p20181217 分区为小于 MAXVALUE 的空表, 在增加 p20181218 分区的时候耗时较长, 上述的操作耗时 5s, 查看各子表信息, 所有子分区文件的时间戳都有改变, 不过我们只操作了 p20181217 分区, 理论上来讲应该只有 p20181217 和… Read More »

Centos 系统 SLAB dentry 过高引起系统卡顿分析处理

By | 2018-10-23

问题说明 近期几台主机系统都出现卡顿几秒甚至十几秒的现象, 期间没有网络问题. 每次出现卡顿现象的时间也不固定. 服务请求数和流量也没有异常变化, 我们使用 cpu_capture 状态脚本解析 top 命令的输出, 正常情况几百毫秒即可输出, 在异常时耗时很长, 如下可以看到耗时接近 15s: begin time: 2018-09-24T23:26:25.347257868 end time: 2018-09-24T23:26:40.062807607 Total cpu usage: 241.8 373 -> cpu: 100.00, state: R, cmd: kswapd0 374 -> cpu: 100.00, state: R, cmd: kswapd1 31493 -> cpu: 20.90, state: R, cmd: curl 31196 -> cpu: 16.70, state: R, cmd:… Read More »