我正在构建一个基于Ejabberd的推送系统,但在MYSQL上存在性能问题(4个节点作为集群,40万用户在线)。
我尝试将Redis添加为离线消息/广播消息的cahce系统。一切顺利,除非广播开始。
这似乎是一个网络问题,因为我发现了以下错误:
Mnesia重载:{mnesia_tm,message_queue_len,[24017,34957]}
mnesia_event获得{inconsistent_database,running_partitioned_network
意外的信息:{mnesia_tm,'ejabberd2 @ push204.com',{dirty_res,ok}}
来自mysql的大量超时(我们仍然使用mysql来存储用户信息)
模拟器从< 0.18659.61>替换的丢弃消息。至< 0.15551.115>在该节点(2)的旧化身(1)
更糟糕的是,4个ejabberd节点中有一个没有响应并崩溃。
广播策略是向在线用户发送消息,然后将离线用户列表缓存到redis。 峰值消息可以达到每5分钟500k(我们统计5分钟内的数字) Redis中的数据大约为5GB。用户总数约为700万。 Redis客户端是eredis-pool(我想这个问题可能是由redis客户端造成的)
有没有人可以就故障排除提出一些建议?