网站之家技术交流论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1556|回复: 0

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

[复制链接]
发表于 2013-4-24 04:56:55 | 显示全部楼层 |阅读模式
*************************************************
** 本教程基于版本:Discuz! X 2.0                                         **
*************************************************

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

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

涉及的文件:config\global_config.php

配置教程:
在 $_config = array(); 下默认已经有以下主数据库配置,不需要做改动
  1. $_config['db'][1]['dbhost']                  = 'localhost';               
  2. $_config['db'][1]['dbuser']                  = 'root';               
  3. $_config['db'][1]['dbpw']                    = 'root';               
  4. $_config['db'][1]['dbcharset']             = 'gbk';               
  5. $_config['db'][1]['pconnect']              = 0;                        
  6. $_config['db'][1]['dbname']                = 'ultrax';               
  7. $_config['db'][1]['tablepre']                = 'pre_';
复制代码
在主数据库配置下加入第二个数据库的配置
  1. $_config['db'][2]['dbhost']                  = '192.168.0.2';               
  2. $_config['db'][2]['dbuser']                  = 'root';               
  3. $_config['db'][2]['dbpw']                    = 'root';               
  4. $_config['db'][2]['dbcharset']             = 'gbk';               
  5. $_config['db'][2]['pconnect']              = 0;                        
  6. $_config['db'][2]['dbname']                = 'ultrax';               
  7. $_config['db'][2]['tablepre']                = 'pre_';
复制代码
再到 $_config['db']['map'] = array(); 下面添加部署策略
  1. $_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:
在[mysqld]下添加
  1. log-bin=mysql-bin   //开启MYSQL二进制日志
  2. server-id=1   //服务器ID不能重复
  3. binlog-do-db=dzx2  //需要做主从备份的数据库
  4. expire-logs-days = 7  //只保留7天的二进制日志,以防磁盘被日志占满
复制代码
3)在 A 服务器添加一个用于主从复制的帐号:
登陆mysql命令行,执行
  1. GRANT REPLICATION SLAVE ON *.*  TO '帐号'@'从服务器IP' IDENTIFIED BY '密码';
复制代码
例如:帐号是 rep,密码是 123,IP 是 192.168.1.3,则执行代码为
  1. GRANT REPLICATION SLAVE ON *.*  TO 'rep'@'192.168.1.3' IDENTIFIED BY '123';
复制代码
4)编辑 B 服务器的MySQL配置文件my.cnf:
[mysqld]下添加
  1. server-id=2    //服务器ID不能重复
  2. master-host=192.168.1.2  //主库A的IP
  3. master-user=rep  //刚才创建的帐号
  4. master-password=123 //密码
  5. master-port=3306  //主库的端口
  6. replicate-do-db=dzx2  //需要做复制的数据库名
  7. replicate-ignore-table=dzx2.pre_common_session  //自动跳过的表,session表没必要做复制
  8. 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 数据库,执行
  1. show slave status\G
复制代码
看是不是有两个一上一下的YES,任何一个是NO都不行。

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|网站之家技术交流论坛 ( 粤ICP备09092995号 )

GMT+8, 2024-12-22 16:44 , Processed in 0.089957 second(s), 7 queries , File On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表