magento读写分离

Magento系统加速 – MySQL读写分离

Magento使用EAV模型,所以对数据库来说,读操作往往比较大,可以使用读写分离技术有效解决这个问题。所谓读写分离,简单来说就是所有写操作,在A服务器上完成,所有写操作到B服务器上完成,A和B服务器实现主从复制。

A和B数据库服务器实现主从复制,MySQL提供了内置支持。可以把读压力水平分解(多个从库)。MySQL主从复制可以参考:http://www.vfeelit.com/353.html

Magento程序本身对读写分离提供了内置支持,可以为每个模块都指定读写适配器,如果没有指定就使用默认的读写适配器,而默认的读写适配器又是使用安装时的适配器。

比如模块名叫eav,那么可以在配置文件中指定eav_write和eav_read适配器,如果没有指定就使用系统默认的default_write和default_read,而default_write和default_read通过use节点指定它实际使用default_setup配置的适配器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# app/etc/local.xml
     < global >
         < resources >
             < db >
                 < table_prefix > <![CDATA[]]> </ table_prefix >
             </ db >
             < default_setup >
                 < connection >
                     < host > <![CDATA[192.168.1.10]]> </ host >
                     < username > <![CDATA[magento]]> </ username >
                     < password > <![CDATA[root]]> </ password >
                     < dbname > <![CDATA[magento]]> </ dbname >
                     < initStatements > <![CDATA[SET NAMES utf8]]> </ initStatements >
                     < model > <![CDATA[mysql4]]> </ model >
                     < type > <![CDATA[pdo_mysql]]> </ type >
                     < pdoType > <![CDATA[]]> </ pdoType >
                     < active >1</ active >
                 </ connection >
             </ default_setup >
         </ resources >
     </ global >

默认的读写适配器是放置在app/etc/config.xml中的:

1
2
3
4
5
6
7
8
9
10
< default_write >
     < connection >
         < use >default_setup</ use >
     </ connection >
</ default_write >
< default_read >
     < connection >
         < use >default_setup</ use >
     </ connection >
</ default_read >

默认它使用use节点指定使用default_setup适配器,所以我们修改这两个配置就可以实现读写分离:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
< default_write >
     < connection >
         < host > <![CDATA[192.168.1.10]]> </ host >
         < username > <![CDATA[magento]]> </ username >
         < password > <![CDATA[root]]> </ password >
         < dbname > <![CDATA[magento]]> </ dbname >
         < initStatements > <![CDATA[SET NAMES utf8]]> </ initStatements >
         < model > <![CDATA[mysql4]]> </ model >
         < type > <![CDATA[pdo_mysql]]> </ type >
         < pdoType > <![CDATA[]]> </ pdoType >
         < active >1</ active >
     </ connection >
</ default_write >
< default_read >
     < connection >
         < host > <![CDATA[192.168.1.20]]> </ host >
         < username > <![CDATA[magento]]> </ username >
         < password > <![CDATA[root]]> </ password >
         < dbname > <![CDATA[magento]]> </ dbname >
         < initStatements > <![CDATA[SET NAMES utf8]]> </ initStatements >
         < model > <![CDATA[mysql4]]> </ model >
         < type > <![CDATA[pdo_mysql]]> </ type >
         < pdoType > <![CDATA[]]> </ pdoType >
         < active >1</ active >
     </ connection >
</ default_read >

读操作全部到达192.168.1.20服务器,写操作全部在192.168.1.10进行。注意,不要在local.xml中修改这个配置。虽然local.xml的配置最优先,但是默认配置有use节点,只要有use节点,就使用use节点的适配器,所以需要在config.xml中直接修改(不要出现use节点)。

每个模块都可以指定自己的读写适配器,如果没有指定就使用默认的配置。这个为读压力的水平分解提供了内置支持。比如某个模块的读操作非常频繁,可以读定向到单独到一个服务器中。通过指定读写适配器,还可以为模块指定使用另一个库等等。

注意,读写分离时,由于采用了MySQL的主从复制,复制的数据库库决不能进行插入更新这种操作(否则可能导致从库无法同步),实际上,程序可能无法百分百保证初始化一个读适配器后不进行更新操作,所以,为了防止这个情况,只给读适配器这个用户Select权限,就能从数据库级别杜绝这个情况发生。

Magento读写分离权限控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值