Category Archives: system

system

rqlite 使用及注意事项

By | 2017/11/24

介绍 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 »

动态代理 MySQL slave 端口

By | 2017/10/16

背景介绍 一直以来我们的数据库主从架构都以 vip 作为高可用的基石, 通过 vip + MHA 的方式完成 master 的高可用, 并未对 slave 进行相关的高可用设计. 随着时间的推移, 为了减少一些业务对 master 的繁重的操作, 线上的一小部分业务开始连接 slave 对外提供服务. 这些常见的业务包括以下类型: 1. op 相关的工程, 统计类大查询; 2. 日志分析类的查询操作; 3. 使用 atlas 进行读写的业务; 4. 主从延迟无关, 以读为主的业务; 我们现有的业务中, 并未使用 atlas, proxysql 等中间件, 所以 op 后台类的业务查询都通过 slave 服务. 不过在过往的几次故障案例中, MHA 切换主从后会出现以下情况: +——–+ +——–+ | vip | | vip… Read More »

tcpdump 在 bond 环境下抓到重复报文的问题说明

By | 2017/08/03

tcpdump 在 bond 环境下抓到重复报文的问题说明 近期在排查问题时, 使用 tcpdump 抓包发现一个很奇怪的现象, 所有抓到的包都有重复的一份, 使用 wireshark 查看则表现为 tcp out of order, tcp dup ack 以及 tcp retransmission 这三种提示特别多, 如下图所示: 我们在 centos 6 和 centos 7 系统中验证都有这样的问题, 类似情况见 redhat-1260733 下面开始详细介绍该问题的描述及处理细节: 环境说明 10.0.21.5 – web 主机 – centos6 10.0.21.7 – redis 主机 – centos7 网络结构 bond 网络结构大致如下: 两台机器的 eth2, eth3 网口分别连接两个交换机, 选择模式… Read More »

使用 dbweb 修改数据库表结构

By | 2017/07/14

1. 说明 我们以 dbweb 工程为基础, 增加了一些功能上的限制, 来方便开发人员直接修改线上的数据库表结构, 修改及增加的更新包括: 1. 去掉原有的修改密码功能; 2. 增加 google totp 密码验证, 每登录一次需要获取最新的密码信息; 3. 限制 sql 执行, 包括以下限制: `delete/update` 语句必须带有 where 条件; `select` 语句必须带有 where 或 limit 条件; 禁止执行以下 sql: use <database> create <database/schema> alter … drop drop <database/schema> drop/truncate <table> purge … grant/revoke .. 格式化 sql; 4. 超过 200MB 大小的表禁止 alter… Read More »

基于 consul 架构的 MHA 自动切换

By | 2017/06/08

介绍 一直以来, 我们并未在线上启用 masterha_manager 自动切换脚本, 主要因为在网络抖动(网线, 所属机柜交换机不稳定)的情况下并不能保证数据库真的不能访问. 比如重启检测脚本所在机器的网卡并不能说明数据库出了问题, 所以从这方面看我们不能仅通过一个点的检测就判断数据库不可访问. 不过我们可以通过 consul(因为 consul 提供 dns 接口, 笔者更倾向于使用 consul, 而不是 etcd)集群的特性, 我们增加多点检测机制, 在 n 个集群的环境中, 有超过半数的检测点检测到数据库有问题, 我们就认为数据库不可访问, 这时则开始调用 masterha_manager 脚本进行切换, 如下图所示: <checkmysql> <checkmysql> <checkmysql> | | | +———+ +———+ +———+ | consul1 | | consul2 | | consul3 | +———+ +———+ +———+ \ | / \ |… Read More »