博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019/07/09 miglefs集群配置(03)
阅读量:3928 次
发布时间:2019-05-23

本文共 8924 字,大约阅读时间需要 29 分钟。

17年就不维护的程序包,可能在centos7有很多料想不到的不兼容的地方

前面演示到了可以使用mogadm将三个mogstored节点添加到集群中
每个节点贡献一个设备,每个设备就都能识别了
在这里插入图片描述
在这里插入图片描述
**对分布式存储来说,如果存储的都是较少量的单个巨大文件,避免一个文件在一个节点上存储时,占据空间过多而导致,空间占用失衡等问题,通常是将答文件切割成多个小片,每一块大概有一个固定大小(128M,64M之类的),每一个片当作一个独立的文件来管理,而且每一片按照我们所定义的最少副本数量进行冗余,
但是文件过小的话,应该将多个小文件,打包柔和成一个文件,比如放在一个64M的容器中,把这个容器当作副本冗余时的管控,以面把每一个文件当作单位使得监控的对象过多,管理起来,在实现所谓的迁移时,也过度凌乱和麻烦。
**在这里插入图片描述
mogilefs比较适合存储海量小文件,之所以是因为mogilefs架构当中,它实现了将其元数据存放在mysql中,因此mysql存放了10000条,就表明存放了10000个文件的元数据,存1000w条就意味着有1000W文件的元数据,所以设计是用来存储海量小文件的
有些分布式存储的元数据不是放在mysql这样的存储中,而是放在内存中的,HDFS,就是如此,基于内存来存放元数据,且不说是否容易丢失,内存空间是有限的,一个文件占据几十K,一百万个就很大了,所以这种基于内存来实现文件系统管理的就不怎么适用存储数量太多的情形
HDFS存储百万级内的单个文件还是比较理想的,太多就不理想了
而mogilefs没有这样的限制,所有的元数据是在mysql数据库当中,能存多少文件,取决于数据库限制
对mogilefs来讲首先要解决的是,如何可以存大量的小文件,在多个节点上,为了方便完成副本的管理,尽可能不用单个文件为单位进行,而应该以容器为单位,这个容器在mogilefs上,不称为容器,叫做类,class,一个class可以放很多文件,其大小其实没有限制,每一个class其实是最小复制单位,意味着
第一个节点上class放了文件以后,在其他节点上,也应该有一个同类class,任何文件在第一个class存放了以后,如果第二个class是第一个class的副本,把同样文件再存都class副本一份
在这里插入图片描述
万一第二个节点宕机了,整个类就没有了,需要将类再第三个节点上启动起来,然后再冗余起来才可以
在这里插入图片描述
**再同一个目录中 ,不同文件不可以同名,因为是文件标识,所以一个目录可以理解为名称空间,namespace;名称空间代表命名的范围,对于linux主机或者windows主机来讲,每一个目录都会引入一个新的名称空间
比如再A目录下有test。txt文件,就不能再有同名的文件了,再B目录下则可以,所以每一个目录都是一个名称空间,可以再同一个名称空间下,名称是不能同名的,但是再不同的名称空间下,文件可以同名
对于linux来讲创建一个子目录太容易了
但是对于mogilefs并不是这样,它只是一个简单的存储,没有所谓的目录路径,所有文件都在一个平面上,因此像mogilefs内部存文件时,存第一个文件叫这个文件以后,其他的文件绝不能同名,因为没有子目录这一说,所有文件都不能同名,这样一来灵活性大大降低
**
在这里插入图片描述

所谓为了避免这种现状,mogilefs引入了一个新的组件叫域,domain,一个domain就相当于一个文件名称空间,

对整个分布式文件系统来讲,是一个大的名称空间,这个大名称空间所有文件都不能同名,太不灵活了,于是我们创建一个又一个的域domain,只要域的名字不相同即可,不同域的内部。,文件名是可以相同的,
每个域依然是平面结构,里面是没有层级结构的,
至少这样子,在分布式存储上,多个文件叫同一个名字也已经可行了
在这里插入图片描述
那么域和class将如何区分,域包含class,域是一个更大的范畴,而class才是用来存放文件的,class作为最小复制单元而存在的
在这里插入图片描述
一个mogilefs可以有多个domain可以存放不同文件(可以基于大小,类型来分)
在同一个domain内,文件名必须唯一,文件名在mogilefs中,称为key,可以理解为每个文件都是kv存储的空间,因此每一个文件都需要一个唯一标识
不同的域内可以相同
class 是最小复制单元
只要用于文件属性管理
定义文件存储在不同设备上的份数
在mogilefs,文件定位方式是,文件所在域+文件的key来完成 ,每个文件key称为文件的FID

存文件的时候为了可以让key重用,于是引入一个逻辑组件domain,来完成名称空间的隔离,隔离完成后,每一个名称空间内,其文件ID,所谓的key必须唯一,同时文件为了实现冗余,基于class来完成复制,文件都应该放在class内部,class复制所在何处,一个class对应的文件都在这个节点之上,定义class的份数,就相当于定义了文件副本的个数

所以下面的有些命令其实也可以理解了
mogadm domain
class
在这里插入图片描述
当我们创建完设备以后,domain,class都有默认值
add添加domain
在这里插入图片描述
每个domain内部都有默认的class,叫default,定义每一个类至少存在 mindevcount=2就是两个设备上,
意味着,每一个存进来的文件,只要存在这个类里面,就应该有两份
做实验的时候推荐用centos6

如果要实现类mogadm class

创建add
选项类型,包含哈希类型(是否进行哈希计算还是原来的明文格式),mindevcount每个类至少有几个副本,
replpolicy是复制策略
在这里插入图片描述
replpolicy,multiplehosts()每个复制策略是要在不同主机上的,这样主机损坏时,不至于数据丢失
下面几条对存储空间逻辑是没什么关系
slave创建从服务器,因为一个节点故障以后,不管怎么讲都是副本减少了,设置从服务器,一个节点坏了,能立即让从服务器顶上来,类似冗余的方式提供备用
fsck
如果文件存储半道崩溃,存储了一个不完成的文件,fsck能做文件检测和修复的
rebalance
系统运行很久会发现,三个mogilestored的节点的,有的存了百分之50的数据,另外两个加起来才存了百分之50的数据,不均衡了,可以使用rebalance,重新均衡一下
新加一个节点进来也需要rebalance
settings
设定集群的工作特性,哪些可以使用settings list 接口设定
在这里插入图片描述
协议模式是http协议,如果要交互,通过它的API交互。要想存文件,有专门的命令
上传文件 mogupload
获取文件 mogfetch
删除文件 mogdelete
看文件信息 mogfileinfo
列出文件的id moglistfids
列出文件的key moglistkeys
现在就可以使用upload来上传文件
在这里插入图片描述
这个key其实是url访问时候 的key路径,第一张图片定义为1.jpg
–file 文件是哪个文件
把本地文件路径上传,而且指定url路径是什么
指定tracker 和domain就可以查看文件 信息了
在这里插入图片描述
devcount默认放在default当中,默认只上传一个,default count 应该是两个
http:xxxxxxid这个就是我们的fid
因此要访问这个文件,通过url可以直接访问的,因为是http协议的
在这里插入图片描述
在这里插入图片描述
可以查看帮助,可以指定class,指明key
在这里插入图片描述
再上传一个图片
key也不必要一定带斜线,这个key是将来做映射时使用的,真正访问的时候和期望访问的(期望访问的比如www.baidu.com/1.jpg)
以后要带映射的话,有没有斜线就很关键了
按道理如果定义2个这个fid就会显示两个存储。centos6是没有问题的,有可能是centos7的环境问题
在这里插入图片描述
文件在存储时确实会换位置,因为有三个存储节点
在这里插入图片描述
要想下载图片到本地,可以用,mogfetch
在这里插入图片描述
现在可以用nginx来进行反代,nginx反代以后直接使用url请求,nginx会拆分需要的内容,发送给tracker,再发送给mostored来获取,看到的是一个固定的url
需要有一个特定的模块,还需要编译nginx才能实现,因为这是一个第三方模块,得自己从头编译nginx,把这个模块补丁打进去才可以
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
每一个url可以映射到cluster
在这里插入图片描述
先安装开发环境
在这里插入图片描述
接下来把node2,3也成为tracker,先把配置文件复制过去
在这里插入图片描述
启动服务
在这里插入图片描述
node1上检测i两个tracker是否ok
在这里插入图片描述
还可以三个一块给,找不到67,就找68,68找不到,找69
在这里插入图片描述

pcre处理正则表达式,openssl能够支持https

在这里插入图片描述
创建nginx用户
这个nginx包应该下载nginx。1.10。3的版本,在后面有解决安装的方案
在这里插入图片描述
在这里插入图片描述
./configure \
–prefix=/usr \ 安装路径
–sbin-path=/usr/sbin/nginx \ 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 \ 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= 添加第三方模块
make && make install
在这里插入图片描述
在这里插入图片描述
应该是新版nginx不兼容的问题
在这里插入图片描述
老版本试试
在这里插入图片描述
在这里插入图片描述
还报错换成1.4试试
在这里插入图片描述
configure只是编译时出错了
在这里插入图片描述
另外一个窗口重新编译1.10,configure生成makefile文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
安装好了
在这里插入图片描述
make 的时候忽略一个警报信息
在这里插入图片描述
如果遇到错误,可使用如下编译命令:
make CFLAGS="-pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -g"

安装好后对nginx需要做一个简单配置然后启动

在这里插入图片描述3、为nginx提供SysV init脚本:

新建文件/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 0

nginx="/usr/sbin/nginx"

prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_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 N G I N X C O N F F I L E r e t v a l = NGINX_CONF_FILE retval= NGINXCONFFILEretval=?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {

echo -n $"Stopping $prog: "
killproc p r o g − Q U I T r e t v a l = prog -QUIT retval= progQUITretval=?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {

configtest || return $?
stop
sleep 1
start
}

reload() {

configtest || return $?
echo -n $"Reloading $prog: "
killproc n g i n x − H U P R E T V A L = nginx -HUP RETVAL= nginxHUPRETVAL=?
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 2
esac
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基于nginx来反代用户请求到分布式文件系统
mogilefs_pass 如何把内容传递到后端去
在这里插入图片描述
首先反代到主机上
反代时隐藏某个首部
、反代是要不要关闭缓冲池
在这里插入图片描述
反代时只反代哪些种方法
在这里插入图片描述
mogilefs反代到哪个类哪个域
在这里插入图片描述
mogilefs反代的tracker地址是什么
upstream还可以负载均衡
在这里插入图片描述
连接发生,读取的超时时间
在这里插入图片描述
配置实例,
在这里插入图片描述
error_log logs/error.log notice;

working_directory /usr/local/nginx;

http {

include mime.types;
default_type application/octet-stream;

server {    listen       80;    #    # This location could be used to retrieve files from MogileFS.    # It is publicly available.    #    location /download/ {  上传文件可能要用download映射了        #        # Query tracker at 192.168.2.2 for a file with the key        # equal to remaining part of request URI        #        mogilefs_tracker 192.168.2.2;        mogilefs_domain example_domain;        mogilefs_pass { 隐藏一些首部            proxy_pass $mogilefs_path;            proxy_hide_header Content-Type;            proxy_buffering off;        }    }    #    # This location could be used to store or delete files in MogileFS.    # It may be configured to be accessable only from local network.    #    location /upload/ {        allow 192.168.2.0/24;        deny all;        mogilefs_tracker 192.168.2.2;        mogilefs_domain example_domain;        mogilefs_methods PUT DELETE;        mogilefs_pass {            proxy_pass $mogilefs_path;            proxy_hide_header Content-Type;            proxy_buffering off;        }    }}

}

在这里插入图片描述

在这里插入图片描述
主要是server端修改的多
像后端怎么传递,mogile_pass,可以定义class png
在这里插入图片描述
在这里插入图片描述
reload以后尝试访问一下,可能跟我们之前上传的url路径有关
在这里插入图片描述
查看日志
在这里插入图片描述
没说什么错,那就可能上传文件路径的key必须要重新指定一下
在这里插入图片描述
在这里插入图片描述
现在就可以了,nginx直接访问,能自动找到后端文件

这个配置只调用来了一个tracker,如果这个tracker坏了就调不上去了,因此可以把node2,3tracker加进来

在这里插入图片描述

多tracker定义成集群即可
首先在,http段定义一个upstream
在这里插入图片描述
在这里插入图片描述
再去访问
再去上传一个图片
在这里插入图片描述
在这里插入图片描述
现在无论各个图片上传了只有一个副本,这个个centos7上的perl环境有关系
在这里插入图片描述
nginx主机可以反代到后端主机集群,程序能调用API就能允许用户管理上传用户的,nginx主机假如只有一个,也可能进行故障,,
刚才的nginx,装两次,配置一模一样,前面的vrnish做健康状态监测向后端调度,keepalived
在这里插入图片描述
slave这一项,并没有什么作用
fsck有可能会使用,文件系统一致性监测的,命令有可能运行半天,还会影响IO,在访问量较小的时候进行,
status报告状态
如果晚上监测到白天还没结束,用户开始访问了可以使用stop
print log 可以看到过去监测结果
文件有4个, fid8个
unixtime 每个时间戳
在这里插入图片描述
在这里插入图片描述
rebalance需要做重新均衡的
test 没有定义均衡策略(基于大小,cpu占用率等,文件数,文件空间)
settings 来显示rebalance setting
可以去官方文档看看policy有哪些字符串
如果policy不让用了。可以用reset重置一下
用的时候最多偶尔用到fsck,加减节点,然后rebalance一下
其他就没什么
在这里插入图片描述

转载地址:http://pdkgn.baihongyu.com/

你可能感兴趣的文章
ar和nm命令的使用
查看>>
__func__标识符
查看>>
define小结
查看>>
C99标准更新
查看>>
c语言中的内存对齐
查看>>
BlueZ HID不安全设备连接漏洞
查看>>
指针变量的运算
查看>>
蓝牙模块在HHARM2410上的移植
查看>>
linux环境变量文件
查看>>
守护进程
查看>>
glib 中 IO Channels 理解
查看>>
[linux]警告:检测到时钟错误。您的创建可能是不完整的。
查看>>
动态库的Makefile.am编写
查看>>
蓝牙1.1、蓝牙1.2、蓝牙2.0的关键区别
查看>>
循环队列操作实现
查看>>
linux的信号
查看>>
glib 中 IO Channels 理解
查看>>
C++中extern “C”含义深层探索
查看>>
extern用法详解(转)
查看>>
如何在Linux下用C/C++语言操作数据库sqlite3
查看>>