快速实现wordpress迁移到RadonDB上( 二 )


  1. {
  2. "backends" : [
  3. {
  4. "name" : "backend1" ,
  5. "address" : "192.168.0.2:3307" ,
  6. "user" : "wubx" ,
  7. "password" : "wubxwubx" ,
  8. "database" : "" ,
  9. "charset" : "utf8" ,
  10. "max-connections" : 1024 ,
  11. "role" : 0
  12.  
  13. {
  14. "name" : "192.168.0.2:3306" ,
  15. "address" : "192.168.0.2:3306" ,
  16. "user" : "wubx" ,
  17. "password" : "wubxwubx" ,
  18. "database" : "" ,
  19. "charset" : "utf8" ,
  20. "max-connections" : 1024 ,
  21. "role" : 1
  22. }
  23. ]
  24. }
从上面配置上可以看到:192.168.0.2:3306也直接挂载了Radon下面 。从上面的配置中,可以看到: 192.168.0.2:3306 在Radon中成为一个IP:PORT的后端存储节点,另外Role:1 表示是一个attach上来的节点 。
通过radon-meta对应库下的表分布对应关系查看:
  1. cat bin / radon - meta / wubx / wp_users . json
  2. {
  3. "name" : "wp_users" ,
  4. "slots-readonly" : 0 ,
  5. "blocks-readonly" : 0 ,
  6. "shardtype" : "SINGLE" ,
  7. "shardkey" : "" ,
  8. "partitions" : [
  9. {
  10. "table" : "wp_users" ,
  11. "segment" : "" ,
  12. "backend" : "192.168.0.2:3306" ,
  13. "listvalue" : ""
  14. }
  15. ]
  16. }
这里Single表即是没进行分库分表 。所有的库都位于192.168.0.2:3306这个端口下wubx库下 。架构如下:
快速实现wordpress迁移到RadonDB上

文章插图
现在把wordpress中配wp_config.php的配置从原来的3306连接指3316(radon)端口,可以发现,也可以正常对外提供服务了 。Radon中遇到Single表的情况下是把SQL透明下发到后达 。所在这里Radon更相当于一个TCP的代理层,主要可以启到“连接池”,审计等相关功能 。接下来,我们可以看看Radon带来的福利了,例如:审计,透明自动拆分,并行执行,分布式事务 等功能了 。
利用wordpress体验Radon的透明分库分表
我们知道wordpress最大表是wpposts这个内容表,当我们Blog积累的内容足够多的情况下,该表也许会成为一个瓶颈 。这里我们对wpposts表做一次从single表到拆分表的转换:
  1. MySQL > RADON RESHARD wp_posts to new_wp_posts ;
  2. MySQL > alter table wp_posts rename wp_post_bak ;
  3. MySQL > alter table new_wp_posts rename to wp_posts ;
首先利用Radon reshard 把原来一个非拆分表,变成一个新的拆分表,这里有一个不错的设计,该操作完,也不会把wp_posts表删除,这是一个不错的设计 。后面利用改表名后,再来看看业务运行情况 。现在的架构如下 :
快速实现wordpress迁移到RadonDB上

文章插图
做完以上动作Wordpress白页了,内容页显示不出来,从Radon的报错日志(radon.log)中发现Radon还没支持 SQLCALCFOUNDROWS 这个函数 。所以可以通过,查询源码中:
快速实现wordpress迁移到RadonDB上

文章插图
主要处理和wpdb->posts这个查询有关found_rows就可以,处理办法:
  1. if ( ! $q [ 'no_found_rows' ] && ! empty ( $limits ) )
  2. $found_rows = 'SQL_CALC_FOUND_ROWS' ;
  3. $found_rows = '' ;
再来确认:Blog又可以工作了 。因为wordpress的分页用到了SQLCALCFOUNDROWS这个功能,所以唯一不爽的地方,没分页了 。
快速实现wordpress迁移到RadonDB上

文章插图
再来看一下wpposts表在后端节点的分布情况:
cat bin/radon-meta/wubx/wp_posts.json
  1. {
  2. "name" : "wp_posts" ,
  3. "slots-readonly" : 4096 ,
  4. "blocks-readonly" : 64 ,
  5. "shardtype" : "HASH" ,
  6. "shardkey" : "ID" ,
  7. "partitions" : [
  8. {
  9. "table" : "wp_posts_0000" ,
  10. "segment" : "0-64" ,
  11. "backend" : "backend1" ,
  12. "listvalue" : ""
  13.  
  14. ...
  15. {
  16. "table" : "wp_posts_0031" ,
  17. "segment" : "1984-2048" ,
  18. "backend" : "backend1" ,
  19. "listvalue" : ""

  20. 推荐阅读