1. ttserver图片分离方案
1.1. 简介
使用nginx + Tokyo Tyrant进行存储的方案
nginx的NginxHttpMemcachedModule有个很牛X的特性,可以使用url作为memcache的key进行资源访问。
使用内存做存储有两个缺点,一是有容量限制,二是不能永久存储。因此我们使用 Tokyo Tyrant 做存储方案。
只要在进行图片存储时,将url作为key,将图片存储到Tokyo Tyrant
Tokyo Tyrant是Tokyo Cabinet的网络接口,可以使用memcached一样的协议。同memcache相比,Tokyo Cabinet可以将资源存放在硬盘中
注意:ttserver方案的缺点为,Tokyo Tyrant在存储超过20G的时候会出现不稳定现象,因此不推荐
1.2. 配置
1.2.1. 图片存储服务器, Tokyo Tyrant的安装配置
安装Tokyo Tyrant
#资源地址 wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.47.tar.gz wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz
安装Tokyo Cabinet
tar zxvf tokyocabinet-1.4.47.tar.gz cd tokyocabinet-1.4.47 sudo ./configure sudo make sudo make install
安装Tokyo Tyrant
tar zxvf tokyotyrant-1.1.41.tar.gz cd tokyotyrant-1.1.41 sudo ./configure sudo make sudo make install
参考文档:http://www.ttlsa.com/ttserver/install-ttserver-on-linux/
注意 因为tt可以无密码进行操作,并且在tt中存储了挂件的php文件, 因此需要在防火墙配置,保证tt服务器的安全性
启动ttservctl
#安装完成之后启动文件 默认在 /usr/local/sbin/ttservctl ttservctl start
1.2.2. 图片调用服务配置,安装nginx,并且在加入memc-nginx-module模块
memc-nginx-module模块下载
下载地址:https://github.com/agentzh/memc-nginx-module 已安装git可以执行:git clone https://github.com/agentzh/memc-nginx-module.git
nginx编译加载memc-nginx-module 因为Nginx并不支持模块动态加载,所以要安装新的模块,必须重新编译Nginx
wget http://nginx.org/download/nginx-1.4.7.tar.gz tar zxvf nginx-1.4.7.tar.gz cd nginx-1.4.7 ./configure --prefix=/usr/local/nginx --add-module=/path_to_memc-nginx-module(memc-nginx-modul模块下载的文件地址) make && make install
nginx安装成功后,nginx.conf 配置中加入以下部分配置
upstream tt_server1{ #配置一个tt服务器组 server localhost:1978; #ttserver的地址和启动端口 } server { listen 80; server_name localhost; location / { set $memcached_key $uri; memcached_pass tt_server1; } }
1.2.3. web服务器配置
php安装memcached扩展
phpinfo检查php是否安装了memcache扩展,如果没有安装这安装扩展,则进行安装
命令仅供参考: /usr/local/php/bin/pecl install memcache vim /usr/local/php/php.ini extension=memcache.so
修改B2B2C中的conifig/storager.php配置
<?php /** * ShopEx licence * * @copyright Copyright (c) 2005-2012 ShopEx Technologies Inc. (http://www.shopex.cn) * @license http://ecos.shopex.cn/ ShopEx License */ return array( /* |-------------------------------------------------------------------------- | 默认storage处理类 |-------------------------------------------------------------------------- | | 默认storage处理方式 | 目前支持 ttprosystem | base_storage_filesystem | 对应原系统: KVSTORE_STORAGE | */ 'default' => 'ttprosystem', //'default' => 'filesystem', /* |-------------------------------------------------------------------------- | mongodb配置 |-------------------------------------------------------------------------- | | hosts 支持多实例. 目前只支持 192.168.0.230:11211 风格的写法 | "mongodb:///tmp/mongo-27017.sock" 两种风格 | options MongoClient::__construct 第二个参数 An array of options for the | connection */ 'ttprosystem' => array( 'hosts' => array( '192.168.51.96:1978', //'192.168.0.231:11211', ), ), /* |-------------------------------------------------------------------------- | 图片映象站地址 |-------------------------------------------------------------------------- | | 图片资源映像站地址,可以配置多个图片服务器,上传图片的时候随机分配 | */ 'host_mirrors_img' => array( 'http://img2.example.com',//图片调用服务器的域名或者IP //'http://img1.example.com',//图片调用服务器的域名或者IP ) );
1.3. 数据迁移 将本地的图片存储到Tokyo Tyrait中
修改b2b2c/script/storage/ttserver.sh中的图片存储服务地址
#storage存储服务器地址,修改为Tokyo Tyrant 部署的地址和端口 host=127.0.0.1 #ttserver端口 port=1978
执行b2b2c/script/storage/init.sh
#!/bin/bash source $(cd `dirname $0`; pwd)/ttserver.sh #默认将public/images/下的图片都存储到Tokyo Tyrant 中,也可以根据需求自定义目录存储 if [ x$1 = x ] then src=$root/public/images else src=$1 fi