nginx代理mogilefs集群实现
一、实验拓扑

二、实验环境

三、实验步骤
1.节点部署
192.168.0.3 node1 [Nginx,Tracker,Storage,Mariadb]
192.168.0.4 node2 [Tracker,Storage]
192.168.0.5 node3 [Tracker,Storage]
2.初始化工作
配置好三台服务器IP,hosts文件等网络环境,时间同步以及以下的rpm包安装
注:以下操作在三个节点都执行
#下载rpm包(附件有提供)
MogileFS-Server-2.46-2.el7.centos.noarch.rpm
MogileFS-Server-mogilefsd-2.46-2.el7.centos.noarch.rpm
MogileFS-Server-mogstored-2.46-2.el7.centos.noarch.rpm
MogileFS-Utils-2.19-1.el7.centos.noarch.rpm
perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm
perl-MogileFS-Client-1.14-1.el7.centos.noarch.rpm
perl-Perlbal-1.78-1.el6.noarch.rpm
#安装依赖环境
yum install perl-Net-Netmask perl-IO-stringy perl-Sys-Syslog perl-IO-AIO -y
#安装rpm包
yum install *.rpm -y
3.node1节点部署mariadb,mogilefsd,mogstored
3.1.node1部署Mariadb
yum install mariadb-server -y
vim /etc/my.cnf.d/server.cnf
[mysqld]
skip_name_resolve=1
innodb_file_per_table = 1
#启动mariadb
systemctl start mariadb
#连接mysql,进行以下操作
mysql
GRANT ALL ON *.* TO 'root'@'192.168.0.%' IDENTIFIED BY 'rootpass';
GRANT ALL ON mogilefs.* TO 'moguser'@'192.168.0.%' IDENTIFIED BY 'moguserpass';
CREATE DATABASE mogilefs;
FLUSH PRIVILEGES;
quit
#设定mogilefs数据库,生成数据表
mogdbsetup --dbhost=192.168.0.3 --dbuser=moguser --dbpass=moguserpass --dbname=mogilefs --dbrootpass=rootpass
#连接mysql,查看数据库是否生成
mysql -u root -h192.168.0.3 -prootpass
MariaDB [(none)]> use mogilefs;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [mogilefs]> SHOW TABLES;
+----------------------+
| Tables_in_mogilefs |
+----------------------+
| 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 |
+----------------------+
17 rows in set (0.00 sec)
3.2node1配置mogilefsd
vim /etc/mogilefs/mogilefsd.conf
db_dsn = DBI:mysql:mogilefs:host=192.168.0.3
db_user = moguser
db_pass = moguserpass
listen = 0.0.0.0:7001
3.3启动mogilefsd
[root@master ~]# service mogilefsd start
Starting mogilefsd (via systemctl): [ OK ]
[root@master ~]# ss -tln
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 50 *:3306 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 128 *:7001 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
3.4配置storage(推荐所有节点都配置)
#创建存放文件的目录
mkdir /data/mogilefs/dev1 -pv
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/mogilefs’
mkdir: created directory ‘/data/mogilefs/dev1’
vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogilefs/
#修改目录的权限
chown mogilefs.mogilefs /data/mogilefs/ -R
#启动mogstored
[root@master ~]# service mogstored start
Starting mogstored (via systemctl): [ OK ]
4.node2、node3节点部署mogstored操作
4.1node2操作
[root@slave ~]# mkdir /data/mogilefs/dev2 -pv
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/mogilefs’
mkdir: created directory ‘/data/mogilefs/dev2’
vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogilefs/
#修改目录的权限
chown mogilefs.mogilefs /data/mogilefs/ -R
#启动mogstored
[root@slave ~]# service mogstored start
Starting mogstored (via systemctl): [ OK ]
4.2node3操作
[root@localhost ~]# mkdir /data/mogilefs/dev3 -pv
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/mogilefs’
mkdir: created directory ‘/data/mogilefs/dev3’
vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogilefs
#修改目录的权限
chown mogilefs.mogilefs /data/mogilefs/ -R
#启动mogstored
[root@localhost ~]# service mogstored start
Starting mogstored (via systemctl): [ OK ]
5.node1配置操作
5.1.配置mogilefsd
#添加主机
mogadm --trackers=192.168.0.3:7001 host add node1 --ip=192.168.0.3 --status=alive
mogadm --trackers=192.168.0.3:7001 host add node2 --ip=192.168.0.4 --status=alive
mogadm --trackers=192.168.0.3:7001 host add node3 --ip=192.168.0.5 --status=alive
#查看主机状态
[root@master ~]# mogadm host list
node1 [1]: alive
IP: 192.168.0.3:7500
node2 [2]: alive
IP: 192.168.0.4:7500
node3 [3]: alive
IP: 192.168.0.5:7500
#查看设备(设备为空)
mogadm device list
node1 [1]: alive
used(G) free(G) total(G) weight(%)
node2 [2]: alive
used(G) free(G) total(G) weight(%)
node3 [3]: alive
used(G) free(G) total(G) weight(%)
#添加设备
mogadm device add node1 1
mogadm device add node2 2
mogadm device add node3 3
#再次查看设备
[root@master ~]# mogadm device list
node1 [1]: alive
used(G) free(G) total(G) weight(%)
dev1: alive 1.389 8.602 9.990 100
node2 [2]: alive
used(G) free(G) total(G) weight(%)
dev2: alive 1.254 8.736 9.990 100
node3 [3]: alive
used(G) free(G) total(G) weight(%)
dev3: alive 1.150 8.840 9.990 100
#查看设备的状态
[root@master ~]# mogadm check
Checking trackers...
127.0.0.1:7001 ... OK
Checking hosts...
[ 1] node1 ... OK
[ 2] node2 ... OK
[ 3] node3 ... OK
Checking devices...
host device size(G) used(G) free(G) use% ob state I/O%
---- ------------ ---------- ---------- ---------- ------ ---------- -----
[ 1] dev1 9.990 1.389 8.601 13.91% writeable N/A
[ 2] dev2 9.990 1.254 8.736 12.56% writeable N/A
[ 3] dev3 9.990 1.151 8.840 11.52% writeable N/A
---- ------------ ---------- ---------- ---------- ------
total: 29.971 3.795 26.176 12.66%
#查看域(目前为空)
[root@master ~]# mogadm domain list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
#创建域
[root@master ~]# mogadm domain add p_w_picpaths
[root@master ~]# mogadm domain add files
[root@master ~]# mogadm domain list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
files default 2 MultipleHosts() NONE
p_w_picpaths default 2 MultipleHosts() NONE
#查看类
[root@master ~]# mogadm class list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
files default 2 MultipleHosts() NONE
p_w_picpaths default 2 MultipleHosts() NONE
#在p_w_picpaths域中添加一个类jpeg
[root@master ~]# mogadm class add p_w_picpaths jpeg --mindevcount=2 --replpolicy="MultipleHosts(2)"
#再次查看类
[root@master ~]# mogadm class list
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
files default 2 MultipleHosts() NONE
p_w_picpaths default 2 MultipleHosts() NONE
p_w_picpaths jpeg 2 MultipleHosts(2) NONE
6.上传文件/图片测试
#在linu主机中找几张图片
find / -name "*.jpg" -exec cp {} /tmp/ \;
#上传图片(图片格式写错了,囧)
mogupload --tracker=192.168.0.3:7001 --domain=p_w_picpaths --key='1.gpg' --file='/tmp/morning.jpg' --class=jpeg
#上传图片
mogupload --tracker=192.168.0.3:7001 --domain=p_w_picpaths --key='1.jpg' --file='/tmp/day.jpg' --class=jpeg
#查看图片的信息
[root@master tmp]# mogfileinfo --tracker=192.168.0.3:7001 --domain=p_w_picpaths --key='1.jpg'
- file: 1.jpg
class: jpeg
devcount: 1
domain: p_w_picpaths
fid: 3
key: 1.jpg
length: 961243
- http://192.168.0.3:7500/dev1/0/000/000/0000000003.fid
[root@master tmp]# mogfileinfo --tracker=192.168.0.3:7001 --domain=p_w_picpaths --key='1.gpg'
- file: 1.gpg
class: jpeg
devcount: 1
domain: p_w_picpaths
fid: 2
key: 1.gpg
length: 980265
-
#上传文件
mogupload --trackers=192.168.0.3 --domain=files --key='/fstab.txt' --file=/etc/fstab
#查看文件
[root@master tmp]# mogfileinfo --trackers=192.168.0.3 --domain=files --key='/fstab.txt'
- file: /fstab.txt
class: default
devcount: 1
domain: files
fid: 4
key: /fstab.txt
length: 595
-
#访问测试(在浏览器中输入)
http://192.168.0.3:7500/dev1/0/000/000/0000000003.fid
http://192.168.0.5:7500/dev3/0/000/000/0000000002.fid



(ps:可以看出,访问的地址实在反人类,其实我们可以通过加入其他的模块解决这种办法,在下面会介绍这个模块)
#删除文件
mogdelete --tracker=192.168.0.3:7001 --domain=p_w_picpaths --key='1.jpg'
mogdelete --tracker=192.168.0.3:7001 --domain=p_w_picpaths --key='1.gpg'
mogdelete --tracker=192.168.0.3:7001 --domain=files --key='/fstab.txt'
7.配置nginx
nginx 的mogilefs模块的官方文档地址:http://www.grid.net.ru/nginx/mogilefs.en.html
#下载nginx_mogilefs模块
wget http://www.grid.net.ru/nginx/download/nginx_mogilefs_module-1.0.4.tar.gz
tar xvf nginx_mogilefs_module-1.0.4.tar.gz
mv nginx_mogilefs_module-1.0.4 /usr/local/ cd /usr/local/src
wget
#安装nginx依赖环境包
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
useradd -r nginx
tar xvf nginx-1.10.3.tar.gz
cd nginx-1.10.3
#编译安装
./configure --with-pcre --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --add-module=/usr/local/nginx_mogilefs_module-1.0.4
make && make install
#编译之后出现报错
make[1]: *** [objs/addon/nginx_mogilefs_module-1.0.4/ngx_http_mogilefs_module.o] Error 1
make[1]: Leaving directory `/usr/local/src/nginx-1.10.3'
make: *** [build] Error 2
解决办法:
vim objs/Makefile
#把-Werror删除掉
#再次安装,成功
make && make install
#配置nginx环境变量
vi /etc/profile.d/nginx.sh
export PATH="$PATH:/usr/local/nginx/sbin"
#重新加载
. /etc/profile.d/nginx.sh
#查看环境变量
[root@master ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin
#接下来,编辑nginx配置文件
cd /usr/local/nginx/conf/
vi nginx.conf
#加入的配置段
upstream trackers {
server 192.168.0.3:7001 weight=1;
server 192.168.0.4:7001 weight=1;
server 192.168.0.5:7001 weight=1;
check interval=1000 rise=2 fall=5 timeout=1000;
}
location /p_w_picpaths/ {
mogilefs_tracker trackers;
mogilefs_domain p_w_picpaths;
mogilefs_methods GET;
mogilefs_noverify on;
mogilefs_pass {
proxy_pass $mogilefs_path;
proxy_hide_header Content-type;
proxy_buffering off;
}
}
#检查并启动nginx
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@master conf]# nginx
#上传图片
mogupload --trackers=192.168.0.3 --domain=p_w_picpaths --key='1.jpg' --file='/tmp/day.jpg' --class=jpeg
#浏览器访问测试
http://192.168.0.3/p_w_picpaths/1.jpg

8.将三个节点都配置成tracker
#将mogilefsd.conf文件拷贝到其他的节点
[root@master conf]# scp /etc/mogilefs/mogilefsd.conf node2:/etc/mogilefs/
mogilefsd.conf 100% 1465 1.4KB/s 00:00
[root@master conf]# scp /etc/mogilefs/mogilefsd.conf node3:/etc/mogilefs/
root@node3's password:
mogilefsd.conf 100% 1465 1.4KB/s 00:00
#启动node2、node3的mogilefsd
[root@slave ~]# service mogilefsd start
Starting mogilefsd (via systemctl): [ OK ]
[root@localhost ~]# service mogilefsd start
Starting mogilefsd (via systemctl): [ OK ]
#测试是否成为tracker
[root@master conf]# moglistkeys --trackers=192.168.0.3:7001 --domain=p_w_picpaths
1.jpg
[root@master conf]# moglistkeys --trackers=192.168.0.4:7001 --domain=p_w_picpaths
1.jpg
[root@master conf]# moglistkeys --trackers=192.168.0.5:7001 --domain=p_w_picpaths
1.jpg
三个节点都可以查看内容列表,由此证明三个节点都是tracker。
Ctrl+Enter 发布
发布
取消