专栏名称: 运维帮
互联网技术分享平台,分享的力量。帮主一直坚信技术可以改变世界,从毕业到现在干了15年运维,有许多话要和你说。
目录
相关文章推荐
51好读  ›  专栏  ›  运维帮

zabbix二次开发之读写分离

运维帮  · 公众号  · 运维  · 2017-03-16 12:31

正文

请到「今天看啥」查看全文


具体实现


其实从代码去做读写分离这个事,主要是要懂它原来的实现逻辑,这个就不多说了,可以参考 zabbix前端代码浅析之登录验证全过程


关键点


主要是DBselect这个函数,zabbix里面封装了这个函数去作所有的查询操作,为我们无形中省了很多的功夫,当然也是有这个调研的前提,不然从代码上作读写分类是痴心妄想。


这部分的修改


知道了要改的地方,那改起来就很简单了。

  • 代码

if(!strpos($query,'sessions')){
                $dbc = mysql_connect($DB_S["SERVER"],$DB_S["USER"],$DB_S["PASSWORD"]) or  die(mysql_error());
                mysql_select_db($DB_S["DATABASE"],$dbc) or die(mysql_error());
                mysql_query('SET NAMES utf8',$dbc);
                $result = mysql_query($query,$dbc);
        } else {
                $result = mysql_query($query,$DB['DB']);
                }
        if(!$result){
                error('Error in query ['.$query.'] ['.mysql_error().']');
        }    
短短几行代码就可以实现功能了。

* 作了什么?

   我这里只是做了一个判断,如果sql中存在sessions的字样就走原来的主库读,否则其他的
   sql均走从库。 sessions这个库是用来记录session的,由于读写延迟的问题,直接读从库
   可能是有问题的,当然我实际测试的时候是可以通过的。


存在的坑


  • 主从读写延迟导致数据刷新有延迟







请到「今天看啥」查看全文