Author Archives: arstercz

监控 redis warn 级别日志信息

By | May 11, 2018

介绍 我们现有的 redis 监控包括 zabbix, cacti 以及定制的 redis-sentinel-notify 脚本. 在不进行 sentinel 切换的前提下, 很难发现 redis 是否出现了其它错误, 比如连接占满, 同步异常, 后台线程中断等. redis 的日志级别提供了更为详细的诊断的信息. 从 redis 源代码中搜索 redisLog 函数的 REDIS_WARNING 相关的参数即可管中窥豹的了解到 warn 级别提供的大多都是有用的诊断信息, 基于此我们可以通过 warn 信息来了解更精确的诊断信息. redis 日志级别 以 redis-4.0.8 版本为例说明, server.h 文件中其包含系统的 syslog.h 头文件, 可以看到 redis 日志级别遵循 syslog 的级别信息, 不过只用到了以下 4 个级别: /usr/include/sys/syslog.h 文件 …. #define LOG_WARNING 4… Read More »

使用 Percona Server auto manager 管理数据库

By | April 2, 2018

介绍 Percona Server auto manager 是基于 percona-server-5.6.39.83.1 的一个分支版本, 其增加了 memcached 记录和 sql 过滤的功能, 用来降低管理员操作数据库的风险. 不同于 inception 的深度修改, Percona Server auto manager 仅修改客户端的 client/mysql.cc 和 client/mysqldump.c, 不影响 server 端的功能. 说明: memcached 功能用来记录用户输入的用户名及密码, 这点在一次一密登录 mysql 的时候比较有用, 由于 mysql 命令行是将最终的密码哈希结果传给 server, 所以中间件等软件无法得知用户输入的验证信息, 如果一次一密是有状态的则可以通过时间等方式算出验证信息 比如 google totp, 如果是无状态的则中间件代理等工具无法得知验证信息. 当然我们也可以在 client 代码层完成验证, 不过这种方式存在局限性, 不够通用; sql 过滤功能则主要用来限制开发者或管理员对数据库表的修改, 可以使用 –skip-sql-filter 选项忽略此功能, 具体的限制规则见下文.… Read More »

How does snoopy log every executed command

By | January 18, 2018

snoopy 介绍 snoopy 是一个轻量级的lib库, 用来记录系统中所有执行过的命令(以及参数). 我们在实际环境的使用过程中, 结合 snoopy 和 rsyslog 可以很方便的搜集所有主机的历史执行命令, 这种方式给安全审计和故障排错带来了很大的便利. 不同于以往的 shell + history 方式, snoopy 是以预加载 (preload) 的方式实现历史命令的记录, 整个会话环境的信息都可以记录下来, 而前者则仅仅记录执行的命令, 且容易绕过记录, 难以满足我们的需求. 安装部署可参考 install, rpm-install. 下文则详细介绍 snoopy 如何实现以及使用事项. snoopy 如何工作 linux 的 ld.so, ld-linux.so(动态链接)机制可以让程序在运行的时候加载或预处理需要的动态库文件(使用 –static 选项编译的程序除外). 其提供以下不同的文件: /lib/ld.so a.out dynamic linker/loader /lib/ld-linux.so.{1,2} ELF dynamic linker/loader /etc/ld.so.cache File containing a compiled list of… Read More »

使用 transfer 共享文件

By | December 22, 2017

简单说明 transfer 工具可以很方面的让大家以命令行的方式共享文件, 其参考了工具 transfer.sh, 不过去掉了很多不太常用的功能, 另外我们给 transfer 工具增加了以下特性: 1. http basic auth to verifid users; 2. transfer read configure file to revify user; 3. add timestamp to the upload file; 4. use http delete method to delete file; transfer 默认使用 http 的 basicauth 方式验证用户, 如果共享的文件比较敏感可以在 transfer 前面加个 https 做反向代理. 当然最好还是只在局域网环境中使用. 适用场景 transfer 默认会随机生成一个子目录来保存用户上传的文件, 在文件数量特别多的情况下,… Read More »

在 MySQL 中模拟 PostgreSQL 的 sequence 功能

By | December 7, 2017

介绍 在 id 生成器介绍 一文中, 我们介绍了几种生成 id 的方式, 其中的 last_insert_id 小节中, 简单说明了中小业务可以使用 last_insert_id 的方式来生成 id, 在 InnoDB 表的情况下容易产生死锁(下文会介绍在一个事务中操作可以降低死锁概率), 将表改成 MyISAM 也可以提高性能, 不过不利于 xtrabackup 的在线备份; 在 postgresql 序列生成器 小节中, 介绍了 postgresql 自带序列生成器的功能, 使用起来也很方便. 如果我们使用的是阿里的 MySQL 分支版本 AliSQL, 则可以直接使用内置的 Sequence 逻辑引擎, 效果类似 PostgreSQL, 不过其基于 MySQL 的 InnoDB 或 MyISAM 引擎, 这样做可以更好的兼容 xtrabackup 等备份. 不过在本文中我们只考虑的普通的 MySQL 版本, 所以我们参考了… Read More »

rqlite 使用及注意事项

By | November 24, 2017

介绍 rqlite 是一款轻量级且分布式的关系型数据库, 实际上它是在 SQLite 的基础上实现的关系型数据库, 加上 raft 协议实现了一致性分布式. 另外它还提供了 http 相关的接口. 不同于 etcd 和 consul 这两款键值数据库, rqlite 是真正的关系型数据库, 也支持事务等. 从这方面看, 在对数据有分布式一致性且支持事务功能的需求中, rqlite 非常适合, 而且很轻量, 方便部署, 不像 MySQL, PostgrelSQL 等显得有些笨重. 当然和传统数据库比起来 rqlite 也有自身的缺点. 下面则着重介绍 rqlite 的使用及注意事项. 环境: ip os hostname 10.0.21.5 centos 6.5 cz-test1 10.0.21.7 centos 6.5 cz-test2 10.0.21.17 centos 6.5 cz-test3 启动: cz-test1 主机:… Read More »

read-committed 隔离级别对 MySQL 复制的影响

By | November 24, 2017

read-committed 隔离级别对 MySQL 复制的影响 近期碰到了一个 mysql slave 正常接收 relay log, 但是不执行更新的情况, 更准确的说是不执行 row 格式的所有更新, DDL 和 statement 格式的都正常更新, 主从环境配置见下文. 环境配置 OS: CentOS release 6.7 (Final) Kernel: 2.6.32-573.18.1.el6.x86_64 MySQL: Percona-Server-5.5.33-rel31.1-566.Linux.x86_64 主从环境 使用 repl_discovery检查如下: # repl_discovery -h 10.0.21.7 -P 3308 -u monitor –askpass Enter password : +-10.0.21.7:3308 version 5.5.33-rel31.1-log server_id 2690331 has_gtid Not Support tx_isolation READ-COMMITTED binlog_enable… Read More »