本文主要是介绍[zabbix/Session terminated, re-login, please],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现公司监控用的是zabbix,数据库采用的也是它的老搭档MySQL主从同步,一台主在服务,另一台做备,只读,看起来很正常,一切进展很顺利。
因为服务器比较多,历史记录,图形数据保存较大,导致某周末的一天在服务的主zabbix的磁盘打满了。。。。!!!
- 导致线上zabbix直接不可用
- 从无法读取主binlog日志文件,直接报错1236错误代码
- 迅速清理一下不需要的文件,让生产环境服务器正常运行。
既然是磁盘不够了,不可能再去扩容,应该从清除历史记录以及缩减表空间那里去下手,我相信读这篇文章的你,遇到的问题肯定也是和我的操作一样导致的:
- 启用备,将主服务关闭,停止主从,缩减表空间
- 备上线,主数据库缩减,锁库,备份导出
- 主再次上线,备导入新的数据,进行从新主从同步
- -
当我启用备的时候,发现了一个致命的鬼问题:
提示我会话终端从新登陆,我每一次重复反复的登录都是这样,而且错误账号密码是登陆不上的,我用的正式超级管理员登录上出现的问题
查了一些文档,大概是这个意思
如果你获取不到session,那么会提示你让你重新登录
这时候登录上的是游客访问模式 guest
他没有任何权限,而且数据库中sessions表中userid字段为2
正是因为它为2 代表游客模式,会将你的用户改为guest
`
这些session 是我最近登录出现的,userid全部是2 代表是游客模式
导致了现在后端zabbix数据可以采集的到,但是你前端没法展示,因为你是游客模式
试着更改userid为1,发现不行
查询超级管理员id发现并不是2
好了,说了这么多,我是没找到解决办法,在我眼里这应该是个bug,或者哪里丢失数据。
为了尽快上线,不能再拖了,找到了临时解决办法:
至少目前翻过很多帖子并没有找到类似这个问题的解决办法
公司采用的是vpn方式连接zabbix,做了iptables限制,因此这个方法确实可行。毕竟是临时做备、
修改前端php配置文件找到验证user以及session那一步骤,注释判断user
vi /data/zabbix/include/classes/api/service/CUser.php 1187 $userInfo = DBfetch(DBselect(
1188 'SELECT u.userid,u.autologout,s.lastaccess'.
1189 ' FROM sessions s,users u'.
1190 ' WHERE s.sessionid='.zbx_dbstr($sessionid).
1191 ' AND s.status='.ZBX_SESSION_ACTIVE.
1192 ' AND s.userid=u.userid'. #注释这一行,不让它验证
1193 ' AND (s.lastaccess+u.autologout>'.$time.' OR u.autologout=0)'
1194 ));
再次访问,是没有问题的,但是这个弊端非常危险:
如果你是公网访问,而且你还没有防火墙限制,你会发现你更改完之后,任意账号密码,随便输入都可以进入你的zabbix!至少我找不到目前这个问题的解决办法,眼下就是尽快处理一下我的主服务,缩短数据表,更改前一定要做访问限制!!!
感谢这篇文章,让我明白他的处理逻辑:
https://www.cnblogs.com/JaSonS-toy/p/4939805.html
这篇关于[zabbix/Session terminated, re-login, please]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!