我已经自己建了网站:请大家到我的网站看贴子.
http://www.playits.cn
Mogile安装实践
安装环境 虚拟机 VMWARE 安装 86_64-redhat-linux AS5 gcc 版本 4.1.2 20070626 (Red Hat 4.1.2-14) 安装步骤 获得 MogileFS 由于我的安装环境无法上外网 , 故先下载到本地机器上 , 再 Ftp 到虚拟机上安装 . 下载 svn-1.4.5-setup.exe(window 版 ) 建本地目录 mogilefs-src svn checkout http://code.sixapart.com/svn/mogilefs/trunk 安装 Database 下载 mysql-5.1.22-rc.tar.tar 并上传到 虚拟机 . shell> groupadd mysql
shell> useradd -g mysql mysql
shell> gunzip < mysql-VERSION.tar.gz | tar -xvf -
shell> cd mysql-VERSION
shell> ./configure --prefix=/usr/local/mysql
shell> make
shell> make install
shell> cp support-files/my-medium.cnf /etc/my.cnf
shell> cd /usr/local/mysql
shell> bin/mysql_install_db --user=mysql
shell> chown -R root .
shell> chown -R mysql var
shell> chgrp -R mysql .
shell> bin/mysqld_safe --user=mysql &
或者你用.rpm的包来安装都可以,总之就是要安装正确,并且可以用就行了.
启动mysql,输入下面命令创建MogileFS需要的databse(其实我在安装过程中发现,下面这步可以不用做,后面的命令会自动创建).
# mysql
mysql> CREATE DATABASE mogilefs;
mysql> GRANT ALL ON mogilefs.* TO 'mogile'@'%';
mysql> SET PASSWORD FOR 'mogile'@'%' = OLD_PASSWORD( 'sekrit' );
mysql> FLUSH PRIVILEGES;
mysql> quit
安装 Trackers and Storage Servers
就是把下载下来的MogileFS源码上传到虚拟机上了,我是放在/home/zhoucw目录下面,输入
# cd trunk/server/
# perl Makefile.PL
这个时候,系统会提醒你要先安装如下包,我的提示是这样的:
Warning: prerequisite Danga::Socket 1.56 not found.
Warning: prerequisite Gearman::Client 1.07 not found.
Warning: prerequisite Gearman::Client::Async 0.93 not
Warning: prerequisite Gearman::Server 1.08 not found.
Warning: prerequisite Net::Netmask 0 not found.
Warning: prerequisite Perlbal 1.53 not found.
Warning: prerequisite Sys::Syscall 0.22 not found.
那就尽量找一样的版本来装,不要只讨苦事.到http://danga.com/dist/去下载,如果在安装上面包的过程,系统什么东西的话,都到 http://cpan.org/去找吧.基本都有.
对了,你的perl版本很关键,一定要用perl5.8.8,我开始就是用的perl5.8.0没有安装成功.
tar -xzvf Sys-Syscall-0.22.tar.tar
rpm –ivh perl-IO-AIO-2.51-1.el5.rf.x86_64.rpm
# make
# make test
# make install
如果在make test出现文件路径找不到的错误的话,可以不用理会,继续安装就是了.
接下来我安装了一些工具,其实这不是必须的,不过为了测试用,还是装一下.
# cd trunk/utils/
# perl Makefile.PL
# make
# make test
# make install
如果碰到包没有安装的问题,都可以参照上面步骤的方法解决.我会把要用到的包都放上去.
如果一切顺利,MogileFS安装就结束了.
配置系统
数据库的配置
在 ' trunk/server' 目录下面有个工具叫 'mogdbsetup' ,用它可以自动配置数据库.我虚拟机的IP地址是 192.200.1.104
#mogdbsetup --dbhost=192.200.1.104 --dbname=mogilefs --dbuser=mogile --dbpassword=sekrit
出现确认提示的时候,就填 y.
Tracker配置
新建文件 /etc/mogilefs/mogilefsd.conf.,文件内容,
db_dsn DBI:mysql:mogilefs
db_user mogile
db_pass sekrit
conf_port 6001
listener_jobs 5
db_dsn指向的是你数据库的位置,如果你数据库不在同一个机器上,请改为:
db_dsn DBI:mysql:mogilefs:mogiledb.yourdomain.com
mogiledb.yourdomain.com是你机器的名,用ip地址应该也可以吧.
由于mogilefsd不能用root用户启动.所以添加mogile用户.
# adduser mogile
在配置下面以前先启动 trackers server.
# su mogile
mogilefsd -c /etc/mogilefs/mogilefsd.conf –daemon
Storage Server 配置 建个存放文件的目录
# mkdir /var/mogdata
生成配置文件 at /etc/mogilefs/mogstored.conf内容是
httplisten=0.0.0.0:7500
mgmtlisten=0.0.0.0:7501
docroot=/var/mogdata
用 'mogadm'工具将 storage server 加到数据库中.
# mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=192.200.1.104:6001 host add mogilestorage --ip=192.200.1.104 --port=7500 --status=alive
由于我是在一台机器上配,故 trackers的地址和ip地址是一样的,你们在配的时候要根据实际情况来.
用下面命令来检测是否成功.
mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=192.200.1.104:6001 host list
加入一个设备到你的storage server.
mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=192.200.1.104:6001 device add mogilestorage 1
用下面命令来检测是否成功.
mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=192.200.1.104:6001 device list
在存放文件的目录下面在建个目录
# mkdir -p /var/mogdata/dev1
运行MogileFS
启动 storage server
# mogstored –daemon
这里可能需要打一个包
perl-IO-AIO-2.51-1.el5.rf.x86_64.rpm
启动 Trackers(上面已经启动了,就不用再起了)
su mogile
mogilefsd -c /etc/mogilefs/mogilefsd.conf –daemon
查看你所有的服务都起来没有
ps -ef | grep mogilefsd,
ps -ef | grep mogstored
大功告成.
测试阶段
生成domain
# mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=192.200.1.104:6001 domain add testdomain
加一个 class 到domain
mogadm --lib=/usr/lib/perl5/5.8.8 --trackers=192.200.1.104:6001 class add testdomain testclass
写一个perl文件试一下test.pl
use MogileFS::Client;
my $mogfs = MogileFS::Client->new(domain => 'testdomain',
hosts => ['192.200.8.111:6001'],
root =>'/var/mogdata',);
my $fh = $mogfs->new_file("file_key", "testclass");
die $fh unless $fh->print($mogfs->readonly);
my $content = "test_file.exe";
@num = $mogfs->store_content("file_key","testclass",$content);
print "@num \n";
my $file_contents = $mogfs->get_file_data("file_key");
print "$file_contents \n";
#$mogfs->delete("file_key");
$fh->print($file_contents);
@urls = $mogfs->get_paths("file_key");
print "@urls \n";
die $mogfs->errstr unless $fh->close;
返回的内容是
[root@TESTZHOU MFSC]# perl test.PL
13
SCALAR(0x740d9f0)
http://192.200.8.111:7500/dev1/0/000/000/0000000032.fid
~
Mysql复制配置
-
假定你 ip:192.200.1.104, 想要创建用户名为 repl 的一个账户,从服务器可以使用该账户从你的域内的任何主机使用密码 slavepass 来访问主服务器。要创建该 账户,可使用 GRANT 语句:
-
mysql> GRANT REPLICATION SLAVE ON *.*
-
->TO 'repl'@'%' IDENTIFIED BY 'slavepass';
-
-
在主服务器上执行 FLUSH TABLES WITH READ LOCK 语句来刷新表 , 同时阻止写操作 . :
-
mysql> FLUSH TABLES WITH READ LOCK ;
-
创建快照最简单的途径是使用归档程序对主服务器上的数据目录中的数据库进行二进制备份。要使用 tar 来创建包括所有数据库的归档文件,进入主服务器的数据目录,然后执行命令
-
shell> tar -cvf /tmp/mysql-snapshot.tar .
-
然后将归档文件复制到从服务器的 /tmp 目录。
-
在从服务器上,进入数据库的数据目录,并使用下述命令解压缩归档文件:
-
shell> tar -xvf /tmp/mysql-snapshot.tar
-
-
当 FLUSH TABLES WITH READ LOCK 所置读锁定有效时 ( 这就是刚刚所说不要退出 mysql 提示符的原因 ) ,读取主服务器上当前的二进制日志名和偏移量值 , 直接输入命令 SHOW MASTER STATUS.
-
mysql > SHOW MASTER STATUS;
-
-
File 列显示日志名,而 Position 显示偏移量。在该例子中,二进制日志值为 mysql-bin.000045 偏移量为 947 。记录该值。以后设置从服务器时需要使用这些值。它们表示复制坐标,告诉从服务器应从该点开始从主服务器上进行更新。
-
取得快照并记录日志名和偏移量后,可以在主服务器上重新启用写活动:
-
mysql> UNLOCK TABLES ;
-
-
确保主服务器上 my.cnf 文件的 [mysqld] 部分包括一个 log-bin 选项。该部分还应有一个 server-id=Master_id 选项,其中 master_id 必须为 1 到 232–1 之间的一个正整数值。例如:
-
[mysqld]
-
log-bin=mysql-bin
-
server-id=1
-
-
停止从服务器
-
-
其 my.cnf 文件中添加下面的行:
-
[mysqld]
-
server-id=slave_id
-
slave_id 值同 Master_id 值一样,必须为 1 到 232–1 之间的一个正整数值。并且,从服务器的 ID 必须与主服务器的 ID 不相同。例如:
-
[mysqld]
-
server-id=2
-
如果设置多个从服务器,每个从服务器必须有一个唯一的 server-id 值,必须与主服务器的以及其它从服务器的不相同。
-
注意 : 这里的设置与上面的有很大不同 . 其实默认的 my.cnf 中已经有相应的设置 , 前面已经说过 , 对于主服务器基本不用修改 , 对于从服务器 , 修改也很简单 .( 其实文件中说的满清楚的 ,E 文好的应该没问题 )
-
必须将主服务器打开的那两个选项注释掉
-
# Replication Master Server (default)
-
# binary logging is required for replication
-
# log-bin=mysql-bin
-
# required unique id between 1 and 2^32 - 1
-
# defaults to 1 if master-host is not set
-
# but will not function as a master if omitted
-
# server-id = 1
-
然后把从服务器的对应的选项打开
-
# Replication Slave (comment out master section to use this)
-
……( 省略 )
-
# required unique id between 2 and 2^32 - 1
-
# (and different from the master)
-
# defaults to 2 if master-host is set
-
# but will not function as a slave if omitted
-
server-id = 2 ( 对于多个从服务器 , 就依此类推 ,2,3,4…)
-
-
. 启动从服务器。
-
mysqld_safe --user=mysql &
-
-
在从服务器上执行下面的语句:
-
mysql> CHANGE MASTER TO
-
-> MASTER_HOST='192.200.1.104',
-
// 写主服务器的名称或者 IP
-
-> MASTER_USER='repl',
-
// 写用来复制的帐号 , 前面说明过我直接用的 root
-
-> MASTER_PASSWORD=' slavepass ',
-
// 复制帐号的密码 , 这里就是指 root 的密码
-
-> MASTER_LOG_FILE=' mysql-bin.000008 ',
-
// 之前记录的日志名
-
-> MASTER_LOG_POS= 106;
-
// 之前记录的偏移量
-
启动从服务器线程:
-
mysql> START SLAVE ;
-
执行这些程序后,从服务器应连接主服务器,并补充自从快照以来发生的任何更新。
-
-
在从服务器上查看
-
mysql> SHOW SLAVE STATUS\G
-