第一步:安装MogileFS软件
我们前面提到,它是由三部分组成,所以三个组件都得安装上,并且每个节点都做MogileFS和Mogstored;
在这里先说此次的基本布局,192.168.8.39上安装nginx,192.168.8.40上安装MariaDB数据库,192.168.8.41和192.168.8.43上都安装了MogileFS和Mogstored,8.41和8.43都共同使用8.40上的MariaDB数据库,nginx做为前端接收用户请求并负载均衡到后端两个节点上
在8.41上的安装和配置过程,修改好配置文件之后复制一份相同的配置文件到8.43节点上,因为它们的配置参数都是一样的: 在 8.41 和8.43 分别安装 mofilefs和mofstored服务# yum install -y epel-release# yum install -y perl-Net-Netmask perl-IO-AIO# yum localinstall -y MogileFS-Server-2.46-2.el6.noarch.rpm MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm MogileFS-Utils-2.19-1.el6.noarch.rpm Perlbal-1.78-1.el6.noarch.rpm Perlbal-doc-1.78-1.el6.noarch.rpm perl-MogileFS-Client-1.14-1.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Perlbal-1.78-1.el6.noarch.rpm# 安装好之后修改配置文件,只需要修改以下几项就可以了 # mysql指使用的数据库是什么,MariaDB也是写mysql;mogdb指数据库名;host=192.168.8.40指定安装数据的地址
# vim /etc/mogilefs/mogilefsd.confdb_dsn = DBI:mysql:mogdb:host=192.168.8.40db_user = moguser # 指登录mogdb数据所使用的用户名db_pass = mogpass # 登录mogdb数据所使用密码listen = 0.0.0.0:7001 # 0.0.0.0表示监听所有地址# 再编辑mogstored.conf这个配置文件maxconns = 10000httplisten = 0.0.0.0:7500mgmtlisten = 0.0.0.0:7501docroot = /dfs/mogdata # 把这项改一个特定的目录,以便存储数据,为提升系统性能最好是一个独立分区# mkdir -pv /dfs/mogdata/dev1 # 创建修改的docroot目录# chown -R mogilefs.mogilefs /dfs/mogdata/dev1 # 修改属主属组# chown -R mogilefs.mogilefs /var/run/mogilefsd/# cd /etc/mogilefs# scp mogilefsd.conf mogstored.conf root@192.168.8.43:/etc/mogilefs/ # 复制修改好的配置文件到node2的mogilefs目录下,覆盖即可,两个节点都安装配置好之后先不要启动服务,数据库还没有安装在8.43上的安装和配置,这里的配置文件由node1上复制过来就可以了;
# mkdir -pv /dfs/mogdata/dev2 # 创建修改的docroot目录# chown -R mogilefs.mogilefs /var/run/mogilefsd/# chown -R mogilefs.mogilefs /dfs/mogdata/dev2 # 修改属主属组
第二步:安装nginx和MariaDB
这里安装Nginx需要编译安装,因为他需要装载第三方模块才可以使用mogilefs,MariaDB安装这里就不再说明了;
在8.39节点上的安装步骤: # 解决依赖关系# yum -y groupinstall "Development Tools" "Server Platform Development"# yum -y install openssl-devel pcre-devel# groupadd -r nginx# useradd -r -g nginx nginx# tar xf nginx-1.4.7.tar.gz下载nginx-mogilefs-module-master.zip 地址:https://github.com/vkholodkov/nginx-mogilefs-module # unzip nginx-mogilefs-module-master.zip # cd nginx-1.4.7 # ls auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
# ./configure \ --prefix=/usr \ --sbin-path=/usr/sbin/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/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_flv_module \ --with-http_stub_status_module \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/tmp/nginx/client/ \ --http-proxy-temp-path=/var/tmp/nginx/proxy/ \ --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \ --http-scgi-temp-path=/var/tmp/nginx/scgi \ --with-pcre \ --with-debug \ --add-module=/root/nginx-mogilefs-module-master # 这里要指定编译的模块# make && make install# 这里MariaDB安装过程不再说明了,可以参数前面的博文 centos6.5下编译安装mariadb-10.0.20:http://blog.csdn.net/reblue520/article/details/50562099 编译安装好之后就可以可以启动MariaDB和去配置Nginx的相关配置了,还要给nginx提供一个服务脚本; # service mysqld start # vim /etc/rc.d/init.d/nginx
#!/bin/sh## nginx - this script starts and stops the nginx daemon## chkconfig: - 85 15 # description: Nginx is an HTTP(S) server, HTTP(S) reverse \# proxy and IMAP/POP3 proxy server# processname: nginx# config: /etc/nginx/nginx.conf# config: /etc/sysconfig/nginx# pidfile: /var/run/nginx.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/sbin/nginx"prog=$(basename $nginx)NGINX_CONF_FILE="/etc/nginx/nginx.conf"[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginxlockfile=/var/lock/subsys/nginxmake_dirs() { # make required directories user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done}start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs echo -n $"Starting $prog: " daemon $nginx -c $NGINX_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval}stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval}restart() { configtest || return $? stop sleep 1 start}reload() { configtest || return $? echo -n $"Reloading $prog: " killproc $nginx -HUP RETVAL=$? echo}force_reload() { restart}configtest() { $nginx -t -c $NGINX_CONF_FILE}rh_status() { status $prog}rh_status_q() { rh_status >/dev/null 2>&1}case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; reload) rh_status_q || exit 7 $1 ;; force-reload) force_reload ;; status) rh_status ;; condrestart|try-restart) rh_status_q || exit 0 ;; *) echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}" exit 2esac
测试访问一下nginx的页面:
# chmod +x /etc/init.d/nginx# vim /etc/profile.d/nginx.shexport PATH=/usr/sbin/nginx:$PATH# . /etc/profile.d/nginx.sh# service nginx start# ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:38573 *:* LISTEN 0 128 :::111 :::* LISTEN 0 128 *:111 *:* LISTEN 0 128 *:80 *:* LISTEN 0 128 :::22 :::*
第三步:连接上数据库,给两个用户授权:
# mysql -uroot -pMariaDB [(none)]> GRANT ALL ON *.* TO 'root'@'192.168.%.%' IDENTIFIED BY 'mysqlpass';MariaDB [(none)]> GRANT ALL ON mogdb.* TO 'moguser'@'192.168.%.%' IDENTIFIED BY 'mogpass';MariaDB [(none)]> FLUSH PRIVILEGES;
第四步:再到两个节点上初始化数据库,在其中一个上设置即可:
# mogdbsetup --dbhost=192.168.8.40 --dbport=3306 --dbname=mogdb --dbrootuser=root --dbrootpass=mysqlpass --dbuser=moguser --dbpass=mogpass --yes # 可以再回到8.40上验证一下生成的数据库MariaDB [(none)]> use mogdbDatabase changedMariaDB [mogdb]> show tables;+----------------------+| Tables_in_mogdb |+----------------------+| checksum || class || device || domain || file || file_on || file_on_corrupt || file_to_delete || file_to_delete2 || file_to_delete_later || file_to_queue || file_to_replicate || fsck_log || host || server_settings || tempfile || unreachable_fids |+----------------------+
第五步:在两个节点的其中一个上添加主机:
将两个节点的mogilefsd和mogstored服务都启动起来# service mogilefsd start# service mogstored start# ss -tnlState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:7500 *:* LISTEN 0 128 *:7501 *:* LISTEN 0 128 :::111 :::* LISTEN 0 128 *:111 *:* LISTEN 0 128 :::22 :::* LISTEN 0 128 *:22 *:* LISTEN 0 128 127.0.0.1:631 *:* LISTEN 0 128 ::1:631 :::* LISTEN 0 128 *:7001 *:* LISTEN 0 100 ::1:25 :::* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:42848 *:* LISTEN 0 128 :::56905 :::*# 添加主机
# mogadm --trackers=192.168.8.41:7001 host add 192.168.8.41 --ip=192.168.8.41 --status=alive# mogadm --trackers=192.168.8.41:7001 host add 192.168.8.43 --ip=192.168.8.43 --status=alive# mogadm --trackers=192.168.8.41:7001 host list192.168.8.41 [1]: alive IP: 192.168.8.41:7500192.168.8.43 [2]: alive IP: 192.168.8.43:7500
# 再添加设备# mogadm --trackers=192.168.8.41:7001 device add 192.168.8.41 1# mogadm --trackers=192.168.8.41:7001 device add 192.168.8.43 2# mogadm --trackers=192.168.8.41:7001 device list192.168.8.41 [1]: alive used(G) free(G) total(G) weight(%) dev1: alive 0.000 0.000 0.000 100192.168.8.43 [2]: alive used(G) free(G) total(G) weight(%) dev2: alive 0.000 0.000 0.000 100# 添加域# mogadm --trackers=192.168.8.41:7001 domain add images# mogadm --trackers=192.168.8.41:7001 domain add files# mogadm --trackers=192.168.8.41:7001 domain add html# mogadm --trackers=192.168.8.41:7001 domain list domain class mindevcount replpolicy hashtype-------------------- -------------------- ------------- ------------ ------- files default 2 MultipleHosts() NONE html default 2 MultipleHosts() NONE images default 2 MultipleHosts() NONE # 添加类# mogadm --trackers=192.168.8.41:7001 class add images class0 --mindevcount=2# mogadm --trackers=192.168.8.41:7001 class list domain class mindevcount replpolicy hashtype-------------------- -------------------- ------------- ------------ ------- files default 2 MultipleHosts() NONE html default 2 MultipleHosts() NONE images class0 2 MultipleHosts() NONE images default 2 MultipleHosts() NONE# 上传几张图片和测试的页面上去
# mkdir -pv /var/www/htmlmkdir: created directory `/var/www'mkdir: created directory `/var/www/html'# vim /var/www/html/index.html可以复制这个地址在页面上测试一下,这里是每上传一个文件就都会在两个节点是都存一份,如果节点多的话它会根据定义的devcount自己选择节点存储几份,这样在一个节点掉了也可以在别的节点在有相同的资源可用;www.chinasoft.com
# mogupload --trackers=192.168.8.41:7001 --domain=images --key='1.png' --file='/usr/share/backgrounds/default_1920x1200.png' # mogupload --trackers=192.168.8.41:7001 --domain=images --key='2.png' --file='/usr/share/backgrounds/wallpaper-six-2560x1240.png' # mogupload --trackers=192.168.8.41:7001 --domain=images --key='/images/3.png' --file='/usr/share/backgrounds/centos_wallpaper_01_1920x1200.png' # mogupload --trackers=192.168.8.41:7001 --domain=html --key='/files/index.html' --file='/var/www/html/index.html'# mogupload --trackers=192.168.8.41:7001 --domain=files --key='/files/index.html' --file='/var/www/html/index.html'# moglistkeys --trackers=192.168.8.41:7001 --domain=images/images/3.png1.png2.png# moglistkeys --trackers=192.168.8.43:7001 --domain=images/images/3.png1.png2.png# mogfileinfo --trackers=192.168.8.41:7001 --domain=images --key='/images/3.png'- file: /images/3.png class: default devcount: 2 domain: images fid: 5 key: /images/3.png length: 202652 - http://192.168.8.41:7500/dev1/0/000/000/0000000005.fid - http://192.168.8.43:7500/dev2/0/000/000/0000000005.fid
第六步:在前端的Nginx上配置访问控制,修改配置文件:
# vim /etc/nginx/nginx.confupstream mogcluster { server 192.168.8.41:7001; server 192.168.8.43:7001; } server { location / { root html; index index.html index.htm; } listen 80; server_name www.chinasoft.com; location /images/ { mogilefs_tracker mogcluster; mogilefs_domain images; mogilefs_pass { proxy_pass $mogilefs_path; proxy_hide_header Content-Type; proxy_buffering off; } } location ~* ^(/files/.*)$ { mogilefs_tracker mogcluster; mogilefs_domain files; mogilefs_pass $1 { proxy_pass $mogilefs_path; proxy_hide_header Content-Type; proxy_buffering off; } }然后在页面上测试访问刚才上传的文件以及图片: 总结: 最后还可以测试一下把一个节点mogstoed服务关闭,试着访问一下看另外正常工作的节点可不可以正常提供服务。