叮叮 发表于 2013-4-24 04:56:55

X2配置文件config_global.php配置详解

*************************************************
** 本教程基于版本:Discuz! X 2.0                                       **
*************************************************

在站点运营中,站长们遇到的最揪心问题莫过于站点不稳定,速度慢,甚至宕机。Discuz! X 2.0 为站长们想到了这一点,提供了多个负载均衡以及缓存加速的功能。站长们不需要修改代码,只需要在配置文件里面修改修改就能启用和配置相关功能。

一、数据库分布式部署
该功能可以把数据库表分开部署到多个数据库上,比如把读写频繁的 session 表部署到第二台服务器,避免影响主数据库运行。

涉及的文件:config\global_config.php

配置教程:
在 $_config = array(); 下默认已经有以下主数据库配置,不需要做改动$_config['db']['dbhost']                  = 'localhost';               
$_config['db']['dbuser']                  = 'root';               
$_config['db']['dbpw']                  = 'root';               
$_config['db']['dbcharset']             = 'gbk';               
$_config['db']['pconnect']            = 0;                        
$_config['db']['dbname']                = 'ultrax';               
$_config['db']['tablepre']                = 'pre_';
在主数据库配置下加入第二个数据库的配置$_config['db']['dbhost']                  = '192.168.0.2';               
$_config['db']['dbuser']                  = 'root';               
$_config['db']['dbpw']                  = 'root';               
$_config['db']['dbcharset']             = 'gbk';               
$_config['db']['pconnect']            = 0;                        
$_config['db']['dbname']                = 'ultrax';               
$_config['db']['tablepre']                = 'pre_';
再到 $_config['db']['map'] = array(); 下面添加部署策略$_config['db']['map']['common_session'] = 2;这样,可以把 ession 给部署到第二个数据库上了。同理,需要把会员表 common_member 也拿出来到独立的一台服务器上的话,只需要在主数据库配置下面添加第三个数据库配置,然后在 $_config['db']['map'] = array(); 下添加部署策略 $_config['db']['map']['common_member'] = 3; 就可以了。

二、读写分离,多从库只读
对于访问量巨大的论坛,数据库在负担大量读取操作的同时,还要负担大量更新和新写入操作。MySQL数据库在这样的运行条件下很容易产生锁表现象,运行速度大大降低,严重的时候还会把数据库卡死。通过设置读写分离,把读取操作平衡的摊到多个从库上,保证主库在频繁写入的同时,论坛访问依然正常。

1、在MySQL数据库上设置主从备份,可以多个从库,也可以只要1个从库,这里的例子使用1个从库。
MySQL主从复制操作步骤:(例如:A 是主库 IP 是192.168.1.2,B 是从库 IP 是 192.168.1.3,实际情况以实际为准)
1)A、B 两台服务器版本必须差不多,比如都是 5.0 或者都是 5.1 最好,切记不要用MySQL4和MySQL5混用。
2)编辑 A 服务器的MySQL配置文件my.cnf:
在下添加log-bin=mysql-bin   //开启MYSQL二进制日志
server-id=1   //服务器ID不能重复
binlog-do-db=dzx2//需要做主从备份的数据库
expire-logs-days = 7//只保留7天的二进制日志,以防磁盘被日志占满
3)在 A 服务器添加一个用于主从复制的帐号:
登陆mysql命令行,执行GRANT REPLICATION SLAVE ON *.*TO '帐号'@'从服务器IP' IDENTIFIED BY '密码';
例如:帐号是 rep,密码是 123,IP 是 192.168.1.3,则执行代码为GRANT REPLICATION SLAVE ON *.*TO 'rep'@'192.168.1.3' IDENTIFIED BY '123';4)编辑 B 服务器的MySQL配置文件my.cnf:
下添加server-id=2    //服务器ID不能重复
master-host=192.168.1.2//主库A的IP
master-user=rep//刚才创建的帐号
master-password=123 //密码
master-port=3306//主库的端口
replicate-do-db=dzx2//需要做复制的数据库名
replicate-ignore-table=dzx2.pre_common_session//自动跳过的表,session表没必要做复制
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396//自动跳过的错误代码,以防复制出错被中断5)停止 A、B 两个数据库,把 A 的 Discuz! X 2.0 的数据库数据复制一份到 B 服务器的数据库目录,可以直接复制数据,也可以SQL导出导入,需要注意MySQL权限。
6)复制好了后,先启动 A 数据库,再启动 B 数据库。查看是不是正常同步的办法:登录 B 数据库,执行show slave status\G看是不是有两个一上一下的YES,任何一个是NO都不行。

2、设置配置 Discuz! X 的 config\gloabl_config.php 文件:
在 $_config['db']['slave'] = array(); 下添加从库配置:$_config['db']['slave']['1']['dbhost'] = '192.168.1.2';
$_config['db']['slave']['1']['dbuser'] = 'root';
$_config['db']['slave']['1']['dbpw'] = 'comsenz';
$_config['db']['slave']['1']['dbcharset'] = 'gbk';
$_config['db']['slave']['1']['pconnect'] = '0';
$_config['db']['slave']['1']['dbname'] = 'dzx2';
$_config['db']['slave']['1']['tablepre'] = 'pre_';
上面是从库的例子,如果有多个还可以加多个从库,比如:$_config['db']['slave']['2']['dbhost'] = '192.168.1.3;
$_config['db']['slave']['2']['dbuser'] = 'root';
$_config['db']['slave']['2']['dbpw'] = 'comsenz';
$_config['db']['slave']['2']['dbcharset'] = 'gbk';
$_config['db']['slave']['2']['pconnect'] = '0';
$_config['db']['slave']['2']['dbname'] = 'dzx2';
$_config['db']['slave']['2']['tablepre'] = 'pre_';在 $_config['db']['common'] = array(); 下添加$_config['db']['common']['slave_except_table'] = 'common_session, common_member';
设置 session 和 member 表不去从库读,这两个表也没必要去从库读。特别是 session 表更新非常快,会对从库造成一定压力。

页: [1]
查看完整版本: X2配置文件config_global.php配置详解