搭建过程参考了 http://www.bubuko.com/infodetail-2225032.html
具体每步搭建过程如下
安装(搭建至少需要两台机器,mysql可安装任意一台机器上)
perl的cpanm安装 (无bug)(将mogilefsd和mogstored安装在一起)
mysql(需要一台机器安装了mysql执行以下步骤)
create user "ww"@"192.168.131.%" identified by "Swy123456@";
grant all on *.* to"ww"@"192.168.131.%";
create database mogilefs;
create user "moguser"@"192.168.131.%" identified by "mogpass";
grant all on mogilefs.* to"moguser"@"192.168.131.%";
flush privileges;
以下安装步骤若没有特殊说明则两台机器都要执行
yum -y install perl-DBD-mysql perl-App-cpanminus 安装依赖
cpanm App::cpanminus
cpanm IO::AIO
cpanm IO::WrapTie
cpanm Danga::Socket
cpanm MogileFS::Server
cpanm MogileFS::Client
cpanm MogileFS::Utils
重复以上操作,避免下载不全
mogdbsetup --dbhost=192.168.131.156 --dbname="mogilefs" --dbrootuser="ww" --dbrootpass="Swy123456@" --dbuser="moguser" --dbpass="mogpass" (初始化数据库会刷新数据库不是第一次的话慎用,只需一个节点做)
wget https://cpan.metacpan.org/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz
tar -xf Sys-Syscall-0.23.tar.gz 不降级的话,会在运行时的log里面出现crash信息,并且无法完成devcount的冗余
rm -rf /usr/local/share/perl5/Sys/Syscall.pm
cp -rf Sys-Syscall-0.23/lib/Sys/Syscall.pm /usr/local/share/perl5/Sys/
grep -E "VERSION\s" /usr/local/share/perl5/Sys/Syscall.pm
mkdir /etc/mogilefs
groupadd -r mogilefs
useradd -r -g mogilefs -d /home/mogilefs -s /bin/bash -m mogilefs
vim /etc/mogilefs/mogilefsd.conf
daemonize = 1
pidfile = /home/mogilefs/mogilefsd.pid
db_dsn = DBI:mysql:mogilefs:host=192.168.131.156 数据库名字和ip
db_user = moguser 授权的用户和密码
db_pass = mogpass
listen = 0.0.0.0:7001
query_jobs = 5 查询线程数
delete_jobs = 1
replicate_jobs = 5
reaper_jobs = 1
vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogilefs/
mkdir -pv /data/mogilefs/dev1 下一个mogstored节点为dev2
chown -R mogilefs.mogilefs /data/mogilefs/
mogdbsetup --dbhost=192.168.131.156 --dbname="mogilefs" --dbrootuser="ww" --dbrootpass="Swy123456@" --dbuser="moguser" --dbpass="mogpass"
vim /etc/rc.d/init.d/mogilefsd (注意pid和定义为中文的单引号,下面的stop也是中文单引号,和mogstored里面不同,改了启动不了程序)
#!/bin/bash
#
# mogilefsd Startup script for the MogileFS tracker
#chkconfig: 2345 80 90
#description:auto_run
# processname: mogilefsd
# config: /etc/mogilefs/mogilefsd.conf
# pidfile: /home/mogilefs/mogilefsd.pid
# Source function library
. /etc/rc.d/init.d/functions
lockfile=${LOCKFILE-/var/lock/subsys/mogilefsd}
RETVAL=0
pidfile=‘/home/mogilefs/mogilefsd.pid‘
start() {
ulimit -n 65535
echo -n $"Starting mogilefsd"
su - mogilefs -c "/usr/local/bin/mogilefsd -c /etc/mogilefs/mogilefsd.conf --daemon" &> /dev/null
RETVAL=$?
[ $RETVAL = 0 ] && success && touch ${lockfile} && pidof /usr/local/bin/mogilefsd > $pidfile || failure
echo
return $RETVAL
}
stop() {
echo -n $"Stopping mogilefsd"
netstat -nlp|grep "mogilefsd"|grep -v grep|awk ‘{print $7}‘ |awk -F"/" ‘{print $1}‘|xargs kill -9
RETVAL=$?
[ $RETVAL = 0 ] && success && rm -f ${lockfile} || failure
echo
}
reload() {
echo -n $"Reloading mogilefsd: "
killall mogilefsd -HUP
RETVAL=$?
[ $RETVAL = 0 ] && success || failure
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status mogilefsd
RETVAL=$?
;;
restart)
stop
sleep 1
start
;;
reload)
reload
;;
*)
echo $"Usage: mogilefsd {start|stop|restart|reload|status}"
exit 1
esac
exit $RETVAL
vim /etc/rc.d/init.d/mogstored (注意pid和configfile的定义为双引号)
#!/bin/bash
#
#chkconfig: 2345 80 90
#description:auto_run
# processname: mogstored
# config: /etc/mogilefs/mogstored.conf
# pidfile: /home/mogilefs/mogstored.pid
# Source function library
. /etc/rc.d/init.d/functions
lockfile=${LOCKFILE-/var/lock/subsys/mogstored}
RETVAL=0
configfile="/etc/mogilefs/mogstored.conf"
pidfile="/home/mogilefs/mogstored.pid"
prog=$(which mogstored)
start() {
ulimit -n 65535
echo -n $"Starting mogstored"
su - mogilefs -c "$prog -c $configfile --daemon" &> /dev/null
RETVAL=$?
[ $RETVAL = 0 ] && success && touch ${lockfile} && echo $(pidof mogstored) > $pidfile || failure
echo
return $RETVAL
}
stop() {
echo -n $"Stopping mogstored"
netstat -nlp|grep "mogstored"|grep -v grep|awk '{print $7}' |awk -F"/" '{print $1}'|xargs kill -9
RETVAL=$?
[ $RETVAL = 0 ] && success && rm -f ${lockfile} ${pidfile} || failure
echo
}
reload() {
echo -n $"Reloading mogstored: "
killall mogstored -HUP
RETVAL=$?
[ $RETVAL = 0 ] && success || failure
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status mogilefsd
RETVAL=$?
;;
restart)
stop
sleep 1
start
;;
reload)
reload
;;
*)
echo $"Usage: mogilefsd {start|stop|restart|reload|status}"
exit 1
esac
exit $RETVAL
chmod a+x /etc/rc.d/init.d/mogilefsd
chmod a+x /etc/rc.d/init.d/mogstored
ln -s /usr/local/bin/mogstored /usr/bin/mogstored
systemctl daemon-reload
systemctl start mogilefsd
systemctl start mogstored
chkconfig --add mogilefsd
chkconfig --add mogstored 安装完成
测试命令可参考开头引用的文章
nginx充当mogilfs代理(nginx1.6.3以后版本make会出错,不包括1.6.3)
wget http://www.grid.net.ru/nginx/download/nginx_mogilefs_module-1.0.4.tar.gz
tar -xf nginx_mogilefs_module-1.0.4.tar.gz
yum -y install pcre-devel openssl-devel zlib-devel
useradd -r nginx
tar -xf nginx-1.6.3.tar.gz
cd nginx-1.6.3/
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_dav_module --with-http_stub_status_module --with-file-aio --add-module=../nginx_mogilefs_module-1.0.4
vim objs/Makefile
CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g
修改为 CFLAGS = -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -g
make
make install
cp -rf /usr/local/nginx/sbin/nginx /usr/sbin/
vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
vim /etc/nginx/nginx.conf
upstream trackers {
server 192.168.131.156:7001;
server 192.168.131.157:7001;
}
location ~* /images { (images后加不加斜线取决于上传时key前面是否有斜线,有则不加,没有则加)
mogilefs_tracker trackers; 可以用负载均衡
mogilefs_domain images; domain名字
mogilefs_methods GET;
mogilefs_noverify on; 是否不做校验
mogilefs_pass {
proxy_pass $mogilefs_path; 这个变量可以在反代时让nginx构建出一个mogilefs的请求报文发给后端的tracker主机
proxy_hide_header Content-Type; 隐藏Content-Type
proxy_buffering off; 不做缓存
}
}
systemctl start nginx.service (通过http://192.168.131.152/images/ww.png访问图片,自动进行key对应fid的映射)
批量查找并上传文件脚本(上传后的文件名就是上传时的文件名)
vim UploadFile.sh
#!/bin/bash
ip=192.168.131.157
domain=images
class=jpg
find /root/a -name "*.txt" > /root/pwd.txt 要查找的文件类型
sed -r 's/(.*\/)(.*)/\2/' /root/pwd.txt > /root/name.txt
count=`cat /root/pwd.txt |wc -l`
i=1
while true
do
if [ $i -gt $count ];then
break
fi
file=`sed -n ''$i'p' /root/pwd.txt`
key=`sed -n ''$i'p' /root/name.txt`
mogupload --trackers=$ip --domain=$domain --class=$class --key=/$key --file=$file
sleep 2
mogfileinfo --trackers=$ip --domain=$domain --key=/$key 显示结果可以去掉
let i++
done