安装步骤以下
1:须要先安装MySql,这个前面的课程已经有了
2:安装MySql的开发包devel,下载了MySQL-devel-5.5.25-1.rhel5.i386.rpm,安装:
rpm -ivh MySQL-devel-5.5.25-1.rhel5.i386.rpm
3:安装MySql的share包,下载了MySQL-shared-5.6.19-1.rhel5.i386.rpm,安装:
rpm -ivh MySQL-shared-5.6.19-1.rhel5.i386.rpm
安装后可使用rpm -qa|grep -i mysql 来查看安装的包
4:须要有Perl的环境,服务器已经自带了5.8.8版本的
5:安装CPANMinus
wget http://xrl.us/cpanm --no-check-certificate -O /sbin/cpanm node
注 -o 后面是安装目录mysql
chmod +x /sbin/cpanmios
【注】:若是这一步报错没安装完成 提示mysql_confi找不到sql
报错mysql_config 说明配置文件有问题 数据库
执行 vim /etc/profilevim
在最后面添加mysql_config的环境变量服务器
Mysql_HOME为 本身mysql安装的路径app
基本配置步骤以下:负载均衡
1:在MySql数据库中建立MogileFS要使用的数据库和用户名less
a.
CREATE DATABASE MogileFs DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
b.
grant all privileges on MogileFs.* to 'mogile'@'%' identified by 'mogile';
c.
FLUSH PRIVILEGES;
【注】若是b)受权失败执行如下两条SQL 再执行FLUSH PRIVILEGES;
INSERT INTO `mysql`.`user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `Event_priv`, `Trigger_priv`, `Create_tablespace_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`, `plugin`, `authentication_string`, `password_expired`) VALUES ('%', 'mogile', '*A1F1B2A7F3B2C124AE91B424477A6AC49A3D6C4B', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '', '', '', '0', '0', '0', '0', 'mysql_native_password', '', 'N'); |
cd usr/local/bin/
在usr/local/bin/目录下修改mogdbsetup文件配置数据库 (若是没有使用find -name mogdbsetup 查询)
rm mogdbsetup
nano mogilefsd.conf
#!/usr/bin/perl # Rename binary in process list to make init scripts saner my %args = ( my $opt_help; usage() usage() if $opt_help; # Be nice about what the default admin user is called. sub usage { Options: Default Description --dbhost= localhost hostname or IP to database server. --dbport= dbd default port number to database server. --dbname= mogilefs database name to create/upgrade. --dbrootuser= root Database administrator username. Only needed --dbrootpass= <blank> Database administrator password. Only needed --dbuser= mogile Regular database user to create and/or use --dbpass= <blank> You should change this, especially if your --type= MySQL Which MogileFS::Store implementation to use. --yes Run without questions. USAGE my $sclass = "MogileFS::Store::$dbtype"; foreach my $plugin (split /\s*,\s*/, $plugins) { confirm("This will attempt to setup or upgrade your MogileFS database.\nIt won't destroy existing data.\nRun with --help for more information. Run with --yes to shut up these prompts.\n\nContinue?", 0); $sclass->on_status(\&status); MogileFS::Config->load_config; my $sto = $sclass->new_from_mogdbsetup( $sto->setup_database my $latestver = MogileFS::Store->latest_schema_version;
############################################################################ sub confirm { return 1 if $opt_yes; print "\n$q $deftext: "; sub status { |
chmod 777 mogdbsetup
【注】:须要把mogdbsetup中的内容修改成本身的
mogdbsetup
--dbhost=localhost
--dbname=MogileFs
--dbuser=mogile
--dbpass=mogile
也就是说装完server以后就有mogdbsetup
mogdbsetup --dbhost=localhost --dbname=MogileFs --dbuser=mogile --dbpass=mogile
检查本身数据库表结构是否初始化完成
【注】
1) Failed to load MogileFs::Store::MySQL xxx.perl5 at/usr/local/share/perle/MogileFS/Mysql.pm line 5
解决办法:yum -y install perl-DBD-MySQL # 安装DBI组件
2) Failed to connect to DBI:mysql:mysql Cont connect to local MySQL servver through socket '/tmp/mysql.sock'
解决办法:
在/var/lib创建mysql目录,进入目录软链接
ln -fs /tmp/mysql.sock mysql.sock
3) 若是报不能链接或X表不存在 ,请先检查数据库是否建立成功, 数据库权限时候建立成功,把命令改成
mogdbsetup --dbhost=10.240.30.18 --dbname=MogileFs --dbuser=mogile --dbpass=mogile
4)
nano mogilefsd.conf
基本内容以下:
# Database connection information db_dsn = DBI:mysql:MogileFs:host=127.0.0.1;port=3306;mysql_connect_timeout=5 db_user = mogile db_pass = mogile # IP:PORT to listen on for MogileFS client requests listen = 0.0.0.0:7001 # Optional, if you don't define the port above. conf_port = 7001 # Number of query workers to start by default. query_jobs = 10 # Number of delete workers to start by default. delete_jobs = 1 # Number of replicate workers to start by default. replicate_jobs = 5 # Number of reaper workers to start by default. # (you don't usually need to increase this) reaper_jobs = 1 |
而后【Ctrl + Y】 y
【Ctrl + X】而后输入mogilefsd.conf 【回车】
adduser mogile
su mogile
mogilefsd -c /usr/common/mogilefs/mogilefsd.conf --daemon
【注】:Store.pm line 388 说明数据库链接失败 须要检查三个地方
1)检查数据库表是否初始化成功
2)检查mogilefsd.conf文件的数据库配置信息是否正确
3)检查mysql是否正常
可ps看看mogilefsd的进程
测试:ps -ef |grep mogilefsd
终止服务:
pkill mogilefsd
在/usr/common/mogilefs配置存储节点,建立一个storage.conf文件,内容以下:
nano storage.conf
maxconns = 1000 docroot=/data/shopping/mogilefs/mogilefsdata/ |
数据存在什么根路径是由docroot来设置的 ,目录结构须要本身去建立
mkdir -p /data/shopping/mogilefs/mogilefsdata/
启动存储节点,这个能够用root用户
mogstored -c /usr/common/mogilefs/storage.conf --daemon
说明没有建立目录/data/crm/mogilefs/mogilefsdata/dev1/ 的目录结构都要建立
测试:ps -ef | grep mogst
中止:pkill mogstored
这样就安装完毕!
咱们先看下面的图
各角色和服务之间都是基于套接字来进行通讯的,就服务自己就没有耦合性,因此能够在服务器设备有限的场景下运行多种服务或角色.
下面多了几个存储节点,他们都是单独的,便宜的,多硬盘的机器.每一个机器下面有多个分区,能够用来存放这个存储系统的数据的"device".下面咱们来详细讲讲:
存储主机(节点)
这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增长这些机器.
设备(device)
一个存储节点,以就是上面的主机,能够有多个 device, 就是用来存放文件的目录(比较挂载的目录),每一个设备都有一个设备 id,须要在 mogstored 的配置文件中的 docroot 配置的项目 指定的目录下面建立相应的设备的目录,目录名为 $docroot/dev$id,设备是不能删除的.只能将其设备的状态的值置为dead,当一个设备 dead 以后,就真的 dead了,里面的数据也没法恢复了,且这个dead了的设备的 id 也不能再用.
从上面咱们能够见到,整个 MogileFS 分几个小的部分,全部文件的操做,都是经过 Key 来取的.一个 Key 对应一个 MogileFS 中的文件.在这个中,有几个东西咱们须要知道,就是域,和类的做用.
域(domain)
在一个 MogileFS 中,能够有多个域,用来存放不一样的文件,好比,不一样大小的文件,不一样类型的文件.在上图中全部 alive 的"设备"是一个大的总体,造成一个统一的存储空间,里面的数据能够根据 "域" domain 和类 class 来分类管理,属于同一个 domain,即便是属于不一样的class,文件的key也必须是惟一的.不一样域的 key 才能重复
类(class)
在一个域中,能够有多个类,主要是用来控制复制单元的,类是用来作属性管理的,类是比域 domain 低一个级别,能够定义一个文件存储在不一样 device 中的份数.一个文件必须经过 domain,class 和 key 才能找出来.咱们能够给不一样的重要程度的文件,不一样热度的文件,来分别用类来控制份数.
[root@localhost mogilefs]# mogadm --trackers=192.168.119.129:7001 host add shopping1 --ip 192.168.119.129 --port=7500 --status=alive
mogadm --trackers=112.124.66.244:7001 host add shopping1--ip 112.124.66.244 --port=7500 --status=alive
添加完以后数据库host表中将会多一条数据
若是想修改MogileFS中主机的信息,必定要加上状态--status=alive,否则不能修改
mogadm host modify storage_node_name --ip=192.168.119.129 --status=alive
【注】修改时不要在数据库中直接修改,及时修改为功MogileFs也不会生效
检查节点:
[root@localhost mogilefs]# mogadm host list
--------------------
mogadm -trackers=192.168.119.129:7001 check
2)添加存储设备到Storeage节点
mogadm device add shopping1 dev1
使用下面的语句来检查“设备”信息
mogadm device list
若是要标记设备失效,能够用下面的语句
mogadm device mark shopping1 dev1 dead
要恢复的话,再一次add 设备就行了
【注】:Device ID是惟一的,一旦建立将没法删除,只能mark为dead。因此,若是你某个磁盘坏了,你mark为dead, 后来又修好了,那么你必须从新格式化并命名为新的device id, 不支持将device从dead变为
alive.
mogadm domain add imgage
检查“域”,显示存在的域:
mogadm domain list
mogadm class add image img --mindevcount=2
检查“类”:
mogadm class list
若是建立时域的名字建立错了,能够在数据库中直接修改domain表的namespace字段响应的值。
检查整个系统:mogadm --trackers=192.168.119.129:7001 check
上传文件:
cd usr/local/bin/
mogtool inject <file_name> <key_name> --trackers=192.168.119.129:7001 -
-domain=<domain_name> --class=<class_name>
Eg:
mogtool inject logo2.png logo --trackers=192.168.119.129:7001 --domain=image --class=img
下载文件:
mogtool extract <key_name> <file_name> --trackers=192.168.119.129:7001
--domain=<domain_name> --class=<class_name>
Eg:
mogtool extract logo logo.png --trackers=192.168.119.129:7001 --domain=image --class=img
若是文件超过64M,mogtool会自动按照64M分割块
上传大文件:
mogtool inject --bigfile <file_name> <key_name> --
trackers=192.168.119.129:7001 --domain=<domain_name> --class=<class_name>
下载大文件:
mogtool extract --bigfile <key_name> <file_name> --
trackers=192.168.119.129:7001 --domain=<domain_name> --class=<class_name>
上传文件2:
./mogupload --trackers=192.168.119.129:7001 --domain=image --class=img --key='log' --file='logo.png'
下载文件2:
./mogfetch --trackers=192.168.119.129:7001 --domain=image --class=img --key='log' --file='tttt'
./mogstats --config=/usr/common/mogilefs/mogilefsd.conf
--config=/ 后面跟此节点的mogilefs的配置文件
./mogstats --config=/usr/common/mogilefs/mogilefsd.conf --stats="devices"
仅显示某个devices的信息, --stats可选值: devices,files,all
1) 应用程序请求写入一个文件,tracker接受到这个请求,会调用“create_open”。
2) Tracker 作一些负载均衡的处理,决定应该去访问那些机器,而后给应用程序一些可用的机器位置。
3) 应用程序写到其中的一个机器,若是写失败,会从新尝试并写到另外一个机器。
4) 应用程序经过“create_close”告诉tracker文件写到哪里去了。
5) Tracker经过数据库将该名称和域名的空间关联。
6) Tracker在后台开始复制文件,以知足该文件类别设定的复制规则。
7) 应用程序经过“get_paths”请求domain+key(key默认为“filename”)文件,tracker基于每一位置的I/O繁忙状况,返回该文件可用的完整URLs地址列表。
8) 应用程序而后按顺序尝试这些URL地址,(tracker持续监测主机和设备的状态,所以不会返回死连接,默认状况下对返回列表中的第一个元素作双重检查)。
存储节点的做用
首先是用来存储文件,其次须要对存储节点的信息作维护查询,包括:
1) 检查在该存储节点上的文件状态,须要遍历存储的目录
2) 检查存储节点上的磁盘空间使用状况(DiskUsage)
3) 检查本地设备上的每个存储文件的大小(FIDSizes)
4) 检查设备的繁忙程度(IOState)
5) 提供Http服务作命令控制,并提供前面几种的查询,基本命令以下:
size uri:检查一个uri地址的文件大小,返回文件size
watch:检查设备的繁忙程度(iostat)
fid_size start end raw_devs:检查一系列设备上存储的文件的大小,返回信息多行
device fid size:检查某个设备上 fid的文件大小
6) 文件类型xxx.fid