公司使用了3台linux服务器安装了3个redis服务器,1个master,2个slave
用另外3台安装了3个哨兵,程序通过哨兵操作master
但程序运行过程中,发送短信模块,使用了redis对同一手机号进行了防止频繁操作、防止多次操作等拦截管理。短信先保存到数据库中,然后由定时器每10秒发送一次,但偶尔就会出现延迟发送,有时延迟1~2xi小时,导致最后发送失败,且拦截中,同一号码最多一天请求成功5次的设置,却出现请求成功了几十次(41次)的情况,存储到数据库的也有41条记录。
排查程序逻辑,并未发现什么问题
最后核查了linux服务器的系统时间,发现几台redis哨兵服务器与master的时间有一定差距(多的相差几分钟)。为保证时间统一,我将6台时间都修改为基本一致(相差1秒以内)。之后再继续观察短信延迟问题。
最后排查是程序访问数据库时,数据库服务器响应较慢造成。数据库备份时会锁表,这种情况更加造成程序访问卡顿,甚至长时间不响应