tcpdump 在 bond 环境下抓到重复报文的问题说明
tcpdump 在 bond 环境下抓到重复报文的问题说明 近期在排查问题时, 使用 tcpdump 抓包发现一个很奇怪的现象, 所有抓到的包都有重复的一份, 使用 wireshark 查看则表现为 tcp out of order, tcp dup ack 以及 tcp retransmission 这三种提示特别多, 如下图所示: 我们在...
使用 dbweb 修改数据库表结构
1. 说明 我们以 dbweb 工程为基础, 增加了一些功能上的限制, 来方便开发人员直接修改线上的数据库表结构, 修改及增加的更新包括: 1. 去掉原有的修改密码功能; 2. 增加 google totp 密码验证, 每登录一次需要获取最新的密码信息; 3. 限制 sql 执行, 包括以下限制: `delete/update` 语句必须带有 where 条件;...
基于 consul 架构的 MHA 自动切换
介绍 一直以来, 我们并未在线上启用 masterha_manager 自动切换脚本, 主要因为在网络抖动(网线, 所属机柜交换机不稳定)的情况下并不能保证数据库真的不能访问. 比如重启检测脚本所在机器的网卡并不能说明数据库出了问题, 所以从这方面看我们不能仅通过一个点的检测就判断数据库不可访问. 不过我们可以通过 consul(因为 consul 提供 dns 接口, 笔者更倾向于使用 consul, 而不是 etcd)集群的特性, 我们增加多点检测机制, 在 n 个集群的环境中, 有超过半数的检测点检测到数据库有问题, 我们就认为数据库不可访问,...
mydumper 和 mysqldump 对比使用
介绍 详细安装说明见: mydumper 如果只是备份几张表或单个库, 相比 innobackup 而言, mysqldump 和 mydumper 更为方便, 不过 mydumper 增加了相对较多的特性, 比如多线程备份, 正则匹配备份, 分组和自检等功能. 另外 mydumper 和 mysqldump 本质上是一样的导出逻辑数据, 不支持在线热备 innodb. 当然我们也可以使用...
使用 MySQL 实现搜索附近的人
背景介绍 现今地理位置功能非常普及, 在很多网站, 手机 app 等都有体现, 现实中这个功能也方便了我们的吃穿住行, 比如我们普通大众经常使用的附近的人附近的餐厅等就是基于这个功能来实现, 其可以应用到以下相关功能: 商店: 找到你当前的位置; 社交: 找到你附近的朋友; 地图: 找到附近感兴趣的地方; 从这方面来看, 如何找到当前的位置是我们的首要任务, 庆幸的是现今的很多 gps 设备可以完成该任务, 比如我们常用的手机打开 gps 功能后, 相关的 app...
id 生成器介绍
背景介绍 在一般的业务场景中, 初始的时候简单的自增数(比如MySQL 自增键)就可以很好的满足需求, 不过随着业务的发展和驱动, 尤其是在分布式的场景中, 如何生成全局的唯一 id 便成了需要慎重考虑的事情. 业务之间如何协调, 生成的序列是否还有其它需求等都需要重新设计, 下文则介绍生成唯一 id 的不同方式以及各自适用的场景. 1. twitter Snowflake 介绍 原文见: announcing-snowflake twitter 碰到的问题 twitter 使用 MySQL...
percona UDF 介绍
简介 在较新的 percona 分之版本中, 其提供了三个自定义的哈希函数, 分别为 fnv_64, fnv1a_64 和 murmur_hash, 这三个函数可以提供更快速度和更小碰撞率的哈希计算, 从这点看可以用来替换 md5, crc32 等函数, 而且由于速度快、碰撞率小的特性, 这些函数也可以作为一致性哈希函数来使用. 如何安装这三个函数详见 udf_percona_toolkit 函数介绍 大致了解这三个函数后, 再来简单说明这三个函数的相关实现. fnv 哈希算法 FNV哈希算法最早在1991年提出,...
如何有效的跟踪线上 MySQL 实例表和权限的变更
介绍 从系统管理员或 DBA 的角度来讲, 总期望将线上的各种变更限制在一个可控的范围内, 减少一些不确定的因素. 这样做有几点好处: 1. 记录线上的库表变更; 2. 对线上的库表变更有全局的了解; 3. 如果有问题, 方便回滚操作; 从这三点来看, 有很多种方式可以实现, 比如通过 migrate 等工具强制所有的操作都以统一的方式执行, 这需要开发人员做更多的配合, 所以这类工具在非规模话的业务场景中较难实现; 另外管理员或 DBA 也可以通过知识库比如 redmine...
如何使用 iptables 来进行端口转发
1. 介绍 传统的端口转发工具portproxy 、rinetd 等, 这些应用工具都通过接收并转发 tcp 数据报文实现转发端口的目的, 但是都存在或多或少的缺陷, 比如不能 tcp/udp 同时支持, 难以修改数据报文的一些路由规则等. 庆幸的是我们可以通过 linux 的 iptables 的数据包过滤规则在 kernel 层面实现端口的转发. 在 iptables 的层面, 端口转发也可以称为端口映射, 是通过NAT(地址转发)的方式来修改数据包目的地址或端口,...
memcached 内存分配及性能优化
memcached 介绍 memcached 是一个基于内存, 通过 key-value 方式访问和存储数据的工具. 一般通过缓存数据库查询和 api 调用等不经常变更的结果来减少程序直接访问数据库或 api 服务的次数, 进而提高动态 web 应用的性能; 由于 memcached 基于内存存储, 并没有持久化到硬盘中, 所以重启 memcached 或主机的操作会引起数据的丢失. 另外数据达到指定的内存值后, memcached 则采用基于...