1, 系统环境
1.1, 操作系统
Gentoo 2007.0 with portage snapshot 20081022, update world in 2008.10.22
1.2, 服务器列表
修改/etc/hosts,加入下面的机器名和IP对应
数据库和track服务器: M-Gentoo IP:10.129.62.243
存储服务器01: S-Gentoo-01 IP:10.129.62.244
存储服务器02: S-Gentoo-02 IP:10.129.62.241
2, 解锁gentoo portage中安装mogilefs所需要的包
echo =dev-perl/mogilefs-server-2.20 ~x86 >> /etc/portage/package.keywords
echo =dev-perl/Danga-Socket-1.59 ~x86 >> /etc/portage/package.keywords
echo =dev-perl/IO-AIO-3.07 ~x86 >> /etc/portage/package.keywords
echo =dev-perl/Gearman-Server-1.09-r1 ~x86 >> /etc/portage/package.keywords
echo =dev-perl/Gearman-1.09 ~x86 >> /etc/portage/package.keywords
echo =dev-perl/Gearman-Client-Async-0.94 ~x86 >> /etc/portage/package.keywords
echo =dev-perl/Perlbal-1.72 ~x86 >> /etc/portage/package.keywords
echo =dev-perl/MogileFS-Utils-2.13 ~x86 >> /etc/portage/package.keywords
echo =dev-perl/MogileFS-Client-1.08 ~x86 >> /etc/portage/package.keywords
3, 安装
USE=”mysql” emerge mogile-server MogileFS-Client MogileFS-Utils
这个过程会将关联的包全部装好
4, 配置
4.1, 数据库
建立数据库
mogdbsetup –dbname=mogilefs –dbuser mogile –dbpass mogile
4.2, tracker
修改tracker服务器配置文件/etc/mogilefs/mogilefsd.conf
db_dsn = DBI:mysql:mogilefs
db_user = mogile
db_pass = mogile
4.3, storage server
修改storage服务器的配置文件/etc/mogilefs/mogstorage.conf
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /var/mogdata
server = perlbal
5, start server
M-Gentoo: /etc/init.d/mogilefsd start
S-Gentoo-01: /etc/init.d/mogstored start
S-Gentoo-02: /etc/init.d/mogstored start
6, 在tracker中注册存储服务器
mogadm –trackers=M-Gentoo:7001 host add S-Gentoo-01 -status=alive
mogadm –trackers=M-Gentoo:7001 host add S-Gentoo-02 -status=alive
7, 添加设备
建立保存文件的目录,分别在S-Gentoo-01和S-Gentoo-02中的/var/mogdata/下建立dev1和dev2的目录,并在tracker中添加这些device:
mogadm –trackers=M-Gentoo:7001 device add S-Gentoo-01 1 –status=alive
mogadm –trackers=M-Gentoo:7001 device add S-Gentoo-02 2 –status=alive
察看device: mogadm –trackers=M-Gentoo:7001 device list
8, 添加domain和class
增加一个domain: mogadm –trackers=M-Gentoo:7001 domain add project
增加一个class并且设定replication为2份: mogadm –trackers=M-Gentoo:7001 class add project class01 –mindevcount=2
9,测试
http://capoune.net/mogilef... 这里提供的php的module在php 5.2.6上面不work,所以改用http://www.sbw.org/File_Mo...提供的pear的包进行测试.
pear的File_Mogile的类需要Validate的支持,分别下载安装之:
wget http://www.sbw.org/File_Mo...
wget http://download.pear.php.n...
pear install Validate-0.8.1.tgz
pear install File_Mogile-0.0.7.tgz
<?php require_once('File/Mogile.php'); $hosts = array('127.0.0.1:7001'); $domain = 'project'; $class = 'class01'; $key = 'file_storage'; //这个为文件的唯一标识! $mogile = new File_Mogile($hosts, $domain,array('socketTimeout' => 0.01,'streamTimeout' =>1.0,'commandTimeout' => 4,)); $mogile->storeData($key, $class, 'I am the walrus.' . "\n"); $paths = $mogile->getPaths($key); var_dump($paths); ?>参考:
http://capoune.net/mogilef...
转自 http://i.19830102.com/arch...
#emerge --sync //升级整个portage目录
#emerge portage //如果不是最新的portage,需要按提示执行此操作
#emerge python //如果不是最新的python,需要按提示执行此操作
#/usr/sbin/update-python //执行完emerge python后执行此操作
#emerge -avuDN world //按照 /var/lib/portage/world 文件下的包,重新构建整个系统
参数说明: --ask (-a) 控制Portage显示它要更新的软件包列表,并让您决定是否继续更新
--verbose (-v) 在屏幕上输出完整的文件列表
--update (-u) 更新包的最佳版本
--deep (-D) 更新系统中的每个软件包
--newuse (-N) USE标记变更后,要使Portage检查USE标记的变动是否导致
需要安装新的软件包或者将现有的包重新编译
#emerge -av --depclean //清除不需要(孤立)的软件包
#revdep-rebuild //gentoolkit包里面的一个软件,用来检查系统的依赖关系是否都满足,
自动安装没有满足关系的包
#dispatch-conf //更新系统的配置文件
#emerge -e world //本地重新编译整个系统,USE标记变化不大时不需执行
参数说明: --emptytree (-e)
实时检测HTTPD连接数:
watch -n 1 -d "pgrep httpd|wc -l"
ps -ef | grep httpd | wc -l
返回结果示例:
1388
表示Apache能够处理1388个并发请求,这个值Apache可根据负载情况自动调整,我这组服务器中每台的峰值曾达到过2002。
安装memcached @ CentOS
* memcached homepage:
http://www.danga.com/memca...
yum install memcached
chkconfig memcached on
service memcached start
vi /etc/sysconfig/memcached
# set listening host to localhost
OPTIONS="-l 127.0.0.1"
If you use a different version of php from the one in official CentOS repo, you need to compile the php memcache extension (php-pecl-memcache) by yourself. Just download the source rpm from the CentOS Extras repository and build it.
下面的代码主要是伪静态的实现,搜索引擎喜欢
大家经常看到别的站的URL是这样的吧?
http://www.xxx.com/module/...
或者
http://xx.com/module/show/... 带扩展名的
或者
http://xx.com/module/show/...
这样的吧
今天我就是公布下这种方法的实现,并独立出最简单的代码
函数如下,没封装成类,主要是没必要,用函数能方便些
/**
* 获得友好的URL访问
*
* @accesspublic
* @return array
*/
function getQueryString(){
$_SGETS = explode("/",substr($_SERVER['PATH_INFO'],1));
$_SLEN = count($_SGETS);
$_SGET = $_GET;
for($i=0;$i<$_SLEN;$i+=2){
if(!empty($_SGETS[$i]) && !empty($_SGETS[$i+1])) $_SGET[$_SGETS[$i]]=$_SGETS[$i+1];
}
$_SGET['m'] = !empty($_SGET['m']) && is_string($_SGET['m']) ? trim($_SGET['m']).'Action' : 'indexAction';
$_SGET['a'] = !empty($_SGET['a']) && is_string($_SGET['a']) ? trim($_SGET['a']) : 'run';
return $_SGET;
}
/**
* 生成链接URL
*
* @accesspublic
* @param array $arr
* @return string
*/
function setUrl($arr){
global $Global;
$queryString='';
if($Global['urlmode']==2){
foreach($arr as $k=> $v){
$queryString.=$k.'/'.$v.'/';
}
}
$queryString.=$Global['urlsuffix'];
return $queryString;
}
?>
$_GET= getQueryString();
?>
http://www.xxx.com/index.p... 这样的
中间多了个index.php 为此我们要把他去掉,只好重写
但是有些文件 又不希望这样,比如 样式 图片,那就放条件里
建立一个 .htaccess文件
RewriteEngine on
RewriteCond $1 !^(index\.php|css|pics|themes|js|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
现在OK了,赶快去测试吧
<?php
$_GET= getQueryString();
print_r($_GET);
?>





