二十一周作业

1、搭建redis,实现redis的复制管理

测试环境:

所有机器均为centos7.6

Redis主:172.16.100.151  port:6379

Redis从:172.16.100.155  port:6379

Redis哨兵:172.16.100.156  port:6379

1.安装redis

为了方便,采用yum安装的方式

Yum list |grep redis

如果有则直接yum安装

如果没有则替换epel源

Yum install epel-release

Yum install redis

Yum安装redis的默认配置文件位置为/etc/redis.conf

Systemctl start redis   启动redis

Systemctl enable redis   允许开机启动

2.配置redis主从复制

编辑redis主库(172.16.100.151)配置文件

Vim /etc/redis.conf

修改内容:

找到bind,修改为

注意:实际生产环节尽量不要写0.0.0.0,写具体ip

输入redis-cli进入redis,并设置redis密码

在redis命令行中输入config set requirepass 密码

修改完毕后重启redis

编辑redis从库(172.16.100.155)配置文件

Vim /etc/redis.conf

修改内容:

找到slaveof一行,修改为

Slaveof 172.16.100.151 6379 #主库地址和端口

Masterauth redis主库刚才设置的密码

同样修改bind一行为:

Bind 0.0.0.0  #为了后续建立哨兵redis能监听到此slave机,实际生产中需要写哨兵机IP

重启redis

查看效果如下

在主库redis命令行输入auth 密码进行验证,然后输入info查看可见

二十一周作业_第1张图片

在从库redis命令行输入info可见

二十一周作业_第2张图片

Redis主从配置成功

补充说明:

Redis主从配置错误常见原因

查看日志文件(默认位置/var/log/redis/redis.conf)有具体信息

Redis主从出现错误首先检查info信息,从库上的master_link_status:参数是否为up

若为down则说明主从sync为成功,需要检查以下内容:

防火墙端口放行

主从机互ping

主库配置文件bind项是否可以监听到从库

(日志报错内容为sync失败)

主库是否设置了密码或保护模式,从库配置文件slaveof后是否有配置主库权限masterauth

(日志报错内容为# Error reply to PING from master: '-DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect')

3.配置redis哨兵功能

在redis哨兵机172.16.100.156上配置

修改/etc/redis.conf文件

将daemonize no改为daemonize yes,表示允许后台执行,方便后续测试

修改/etc/sentinel.conf文件

注意:初次配置,不需要打开#sentinel monitor mymaster注释,因为后几行有默认当台服务器为主服务器

原配置:sentinel monitor mymaster 127.0.0.1 6379 2 通过这句来修改为:

sentinel monitor mymaster  172.16.100.151  6379  1   #主服务器名称 IP 端口号 选举次数(redis集群服务器不多时可以配置成1)

修改下一行:sentinel auth-pass mymaster redis主库密码 # 第一个参数mymaster为主节点名称(在上面monitor定义的)

修改心跳检测 5000毫秒(默认为30秒,按需修改)

sentinel down-after-milliseconds mymaster 5000

sentinel parallel-syncs mymaster 2 --- 指定了在执行故障转移时,最多可以有多少个从Redis实例在同步新的主实例,在从Redis实例较多的情况下这个数字越小,同步的时间越长,完成故障转移所需的时间就越长

启动哨兵模式(cd到redis安装根目录下启动,因为需要运行redis-server)(需要redis在启动状态)

#Sentinel.conf使用绝对路径或相对路径都OK,能找到就行

#--sentinel &这一项必不可少

./redis-server sentinel.conf --sentinel &

查看进程sentinel是否存在,端口号26379是否正常

4.测试

查看redis哨兵日志(172.16.100.156)

tail /var/log/redis/sentinel.log

说明:

出现sentinel id 说明进程启动成功

Monitor master mymaster 172.16.100.151 6379 quorum 1表示已经对mymaster进行监控

+sdown slave一行说明slave变为down或无法访问slave的redis库,原因为slave库的配置文件bind一项未修改,将slave库配置文件bind一项修改为0.0.0.0后日志出现-sdown slave表示连接成功

哨兵模式配置,启动成功

2、搭建mogilefs,与nginx做整合

MofileFS是一个开源的分布式文件系统,用于组件分布式文件集群。其主要特性包括:应用层组件、无单点故障、自动文件复制(复制单位不是文件而是class类)、传输中使用http协议,基于域的简单命名方式、具有比RAID更好的可靠性

MogileFS由3个部分组成:

  第1个部分:是server端,包括mogilefsd和mogstored两个程序。前者即是mogilefsd的tracker,它将一些全局信息保存在数据库里,例如站点domain,class,host等。后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份请求。在安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。

  第2个部分 :是utils(工具集),主要是MogileFS的一些管理工具,例如mogadm等。

  第3个部分 :是客户端API,目前只有Perl API(MogileFS.pm)、PHP,用这个模块可以编写客户端程序,实现文件的备份管理功能,提供MogileFS.pm。

测试环境:

  trackers节点:172.16.100.152

  storage节点1:172.16.100.152

  DB节点:172.16.100.152

  storage节点2:172.16.100.153

安装过程:

yum -y install ntpdate && ntpdate ntp1.aliyun.com   #时间必须要同步,不然使用cpanm安装Mogilefs会fail

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

或直接yum install -y epel-release    #安装epel源

setenforce 0 && service iptables stop   #因这是测试环境,需要关闭防火墙和selinux

yum -y install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO   #安装mogilefs关联安装包

yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes

Yum -y install perl-Sys-Syscall (不推荐,yum安装版本为0.25,存在bug,文章后面有说明,建议直接wget后编译0.23版本,或yum安装后替换为0.23版本,具体方法见问题处理)

wget http://xrl.us/cpanm -O /usr/bin/cpanm && chmod +x /usr/bin/cpanm    #下载cpanm

cpanm MogileFS::Server    #安装mogilefs server

cpanm MogileFS::Utils  #安装管理工具

cpanm MogileFS::Client

cpanm IO::AIO

安装mysql,负责存储trackers元数据。

授权root用户:

  mysql> grant all on *.* to 'root'@'172.16.100.%' identified by 'xxxxxx';

创建mogiles数据库:

  mysql> create database mogilefs;

授权访问mogiles数据用户:

  mysql> grant all on mogilefs.* to 'moguser'@'172.16.100.%' identified by 'xxxxxx';

刷新数据库系统权限相关表:

  mysql> flush privileges;

添加启动脚本并添加用户

mogilefsd不会以root运行,需要创建non-root用户:

  useradd mogilefs

添加mogilefsd启动脚本,赋予755权限:

  #!/bin/sh

  #

  # mogilefsd    Startup script for the MogileFS tracker

  #

  # chkconfig: - 85 15

  # description: MogileFS tracker

  # processname: mogilefsd

  # config: /etc/mogilefs/mogilefs.conf

  # pidfile: /var/run/mogilefsd.pid

  # Source function library.

  . /etc/init.d/functions

  # Check that networking is up.

  . /etc/sysconfig/network

  # Check that networking is up.

  [ "$NETWORKING" = "no" ] && exit 0

  mogilefsd="/usr/local/bin/mogilefsd"

  MOGILEFS_CONF_FILE="/etc/mogilefs/mogilefs.conf"

  SUDO_USER=mogile

  lockfile=/var/lock/subsys/mogilefsd

  start() {

     echo -n $"Starting mogilefsd: "

  #         sudo -u $SUDO_USER $mogilefsd -c $MOGILEFS_CONF_FILE --daemon --no_schema_check

     daemon --user $SUDO_USER $mogilefsd -c $MOGILEFS_CONF_FILE --daemon

     retval=$?

     echo

     [ $retval = 0 ] && touch ${lockfile}

     return $retval

  }

  stop() {

     echo -n $"Stopping $prog: "

     killproc mogilefsd

     retval=$?

     echo

     [ $retval = 0 ] && rm -f ${lockfile}

     return $retval

  }

  reload() {

    echo -n $"Reloading mogilefsd: "

    killproc mogilefsd -HUP

    retval=$?

    echo

  }

  # See how we were called.

  case "$1" in

     start)

     start

     ;;

     stop)

     stop

     ;;

     status)

     status mogilefsd

     retval=$?

     ;;

     restart)

     stop

     start

     ;;

     reload)

     reload

     ;;

     *)

     echo $"Usage: mogilefsd {start|stop|restart|reload|status}"

     exit 1

  esac

  exit $retval

配置trackers节点:

1,添加running目录:

  [root@localhost ~]# mkdir -pv /var/run/mogilefsd

  [root@localhost ~]# chown -R mogilefs.mogilefs /var/run/mogilefsd

2,使用mogdbsetup初始化数据库:(此处如果不指定数据库,则会删除所有数据库并全部自动初始化,此处操作需谨慎)

     [root@localhost ~]# mogdbsetup --dbhost=172.16.100.152 --dbrootpass='xxxxxx' --dbuser='moguser' --dbpass='xxxxxx'

进入数据库,查看mogilefs库内容

二十一周作业_第3张图片

为tracker添加mogilefsd配置文件

mkdir /etc/mogilefs

cd /etc/mogilefs

vim mogilefsd.conf  #创建配置文件,修改内容如下

daemonize = 1              #是否在后台以守护进程运行

pidfile = /var/run/mogilefsd/mogilefsd.pid

db_dsn = DBI:mysql:mogilefs:host=172.16.100.152;port=3306;mysql_connect_timeout=5  #连接数据库的信息 ,host地址如果tracker在本机默认安装位置则可以直接用localhost,用其他ip时注意数据库中用户的授权

db_user = moguser          #数据库上的用户名,不是在linux系统创建的mogilefs用户!

db_pass = XXXXXX          #数据库中该用户名对应的密码

listen = 0.0.0.0:7001      #监听的地址和端口

conf_port = 7001            #配置接口

query_jobs = 10            #用于查询的进程数 可调大  看需求

delete_jobs = 1            #用于删除操作的进程数 可调大  看需求

replicate_jobs = 5          #用于复制的进程数 可调大  看需求

reaper_jobs = 1            #用于回收资源的进程数 可调大  看需求

启动mogilefsd-tracker进程:

使用编写的脚本

或直接输入

su - mogilefs -c "mogilefsd -c /etc/mogilefs/mogilefsd.conf --daemon"

(使用创建的普通用户mogilefs权限)

部署Storage Nodes

yum -y install make gcc unzip perl perl-CPAN perl-YAML perl-Time-HiRes  perl-DBD-MySQL

cpanm MogileFS::Server    #安装mogilefs server

cpanm MogileFS::Utils  #安装管理工具

创建配置文件存放文件夹

mkdir /etc/mogilefs/

创建mogilefs所需用户

useradd -r  mogilefs

创建存储节点配置文件

vim /etc/mogilefs/mogstored.conf

内容为:

maxconns = 10000  #最大并发连接数

httplisten = 0.0.0.0:7500  #http监听的地址

mgmtlisten = 0.0.0.0:7501  #管理接口监听地址

docroot =/data/mogilefs/data    #用于存储的目录

创建存储目录并修改权限

Mkdir -pv /data/mogilefs/data

chown -R mogilefs.mogilefs /data/mogilefs/

启动mogilefs存储进程

su - mogilefs -c "mogstored -c /etc/mogilefs/mogstored.conf --daemon"

在tracker节点上测试track是否正常

mogadm  --trackers=172.16.100.152:7001 check

为trackers添加mysql信息

Vim /home/mogilefs/mogilefs.conf

内容为:

--db_dsn="DBI:mysql:mogilefs:host=172.16.100.152"

--db_user="moguser"   #注意是数据库的用户,不是linux上的mogilefs用户

--db_pass="xxxxxx"    #数据库用户对应密码

--verbose 

--stats="devices,files"

在tracker上添加存储节点

mogadm  --trackers=172.16.100.152:7001 host add node1 --ip=172.16.100.152 --status=alive

mogadm  --trackers=172.16.100.152:7001 host add node2 --ip=172.16.100.153 --status=alive

为存储节点添加设备

Mogadm --trackers=172.16.100.152:7001 device add node1 001  #编号不可重复

Mogadm --trackers=172.16.100.152:7001 device add node2 002

Mogadm --trackers=172.16.100.152:7001 device list  #显示所有设备

二十一周作业_第4张图片

创建对应设备dev

二十一周作业_第5张图片

创建domain

Mogadm --trackers=172.16.100.152:7001 domain add files #在存储节点上创建一个名为files的domain

Mogadm --trackers=172.16.100.1152:7001 domain list  #查看存储节点上的domain名单

测试mogilefs的上传和存储功能

mogupload  --trackers=172.16.100.152:7001 --domain=files --key='/shellscripts' --file='/data/download/mogilefs.sh'   #把当前机器的/data/download目录下的mogilefs.sh上传到存储节点的files domain中,设置key为/shellscripts下

查看files domain下的key列表

查看指定文件信息

Mogfileinfo #查看参数指定的文件的信息

Mogfileinfo --trackers=172.16.100.152:7001 --domain=files --key=’/shellscripts’

二十一周作业_第6张图片

通过访问给定http地址可以查看文件已经上传成功

二十一周作业_第7张图片

此时发现虽然domain上设置了mindevcount为2,但文件上传之后仍然只在一个dev中存在,说明两台mogstored没同步成功

原因:截止2019.4.11,perl-Sys-Syscall-0.25版本仍会导致mogstored无法同步,需要降级为0.23版本

解决办法:tar -zxvf Sys-Syscall-0.23

cp -f Sys-Syscall-0.23/lib/Sys/Syscall.pm /usr/local/share/perl5/Sys/

通过如下命令查看模块版本是否已经替换为0.23版本:

grep -E "VERSION\s" /usr/local/share/perl5/Sys/Syscall.pm

确认版本正确后重启mogilefsd,mogstored所有节点,mysql服务

重新上传文件发现同步OK

问题集:

1.多存储节点时,有些存储节点无法启动,显示无法连接数据库

首先确认端口、配置文件中mysql用户,密码,用户在数据库对应IP上是否有授权,授权是否刷新权限

其次确认mysql的配置文件my.cnf中是否有限制最大连接数或最大连接用户,如果没有则有可能为超过了最大连接限制,mysql默认一个账号只能由一个IP登陆

设置mysql 的max_user_connection,重启mysql

2.无法启动trackers?

确认端口策略

确认配置文件

确认mogilefs配置文件中的pid存放文件夹存在

确认/user/bin下有可执行mogilefsd

确认mogilefs运行目录/var/run/mogilefsd存在且属主属组为mogilefs用户

mkdir -pv /var/run/mogilefsd

chown -R mogilefs.mogilefs /var/run/mogilefsd

3.mogilefsd启动成功,trackers正常,设备正常,mogstored节点都正常,但上传文件未同步

原因是yum 安装的perl-Sys-Syscall为0.25版本,截止2019.4.11为止仍存在bug会导致mogstored之间无法互相同步

解决办法为:

tar -zxvf Sys-Syscall-0.23

cp -f Sys-Syscall-0.23/lib/Sys/Syscall.pm /usr/local/share/perl5/Sys/

通过如下命令查看模块版本是否已经替换为0.23版本:

grep -E "VERSION\s" /usr/local/share/perl5/Sys/Syscall.pm

确认版本正确后重启mogilefsd,mogstored所有节点,mysql服务

至此mogilefs安装配置完毕

使用nginx代理mogilefs

测试环境:

Nginx:   172.16.100.151

Mogilefs trackers:   172.16.100.152:7001

Mogilefs stored:   172.16.100.152, 172.16.100.153

Mogilefs mysql:   172.16.100.152:3306

安装nginx并配置

采用nginx版本与参数说明

补充说明:添加第三方模块nginx_mogilefs_module

下载地址http://www.grid.net.ru/nginx/mogilefs.en.html

解压缩对应tar.gz包

Nginx编译参数:

./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/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/nginx_mogilefs_module-1.0.4 #指明第三方模块的位置即可

Make

如果已经安装过nginx,则不要执行make install,而是在make之后用obj/nginx文件替换原nginx目录sbin下的nginx执行文件(替换前先备份)

到sbin目录下执行nginx -V即可查看是否成功加载模块

Nginx配置文件

加入负载模块(虽然没有但加上以便以后测试):

upstream mogilefs {

        server 172.16.100.152:7001;

           }

加入location定义:

location  /p_w_picpaths/ {

    mogilefs_tracker mogilefs;  #对应上面负载名称

    mogilefs_domain files;   #mogilefs stored使用的domain名称

    mogilefs_methods GET;

        mogilefs_noverify on;

    mogilefs_pass {

        proxy_pass $mogilefs_path;

proxy_hide_header Content-Type;

proxy_buffering off;

           }

}

保存修改,nginx -t测试无误后即可启动nginx

测试nginx代理mogilefs

上传文件

(注意上传的key最好加浏览器可以显示的格式,如果不加入格式有可能页面会自动进入下载而不是显示;比如此处key写作--key=’/test’时会因为无法识别而直接下载)


3、搭建fastdfs

搭建fastdfs过程参考自:https://www.cnblogs.com/chiangchou/p/fastdfs.html

1、简介

FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

  Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

  Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

二十一周作业_第8张图片

2、FastDFS的存储策略

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

3、FastDFS的上传过程

FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以客户端上传时可以选择任意一个Tracker。

当Tracker收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的group,当选定了group后就要决定给客户端分配group中的哪一个storage server。当分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录。然后为文件分配一个fileid,最后根据以上的信息生成文件名存储文件。

二十一周作业_第9张图片

4、FastDFS的文件同步

写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。

每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上,tracke在选择读storage的时候会以同步进度作为参考。

5、FastDFS的文件下载

客户端uploadfile成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。

二十一周作业_第10张图片

跟upload file一样,在downloadfile时客户端可以选择任意tracker server。tracker发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。

Fastdfs安装过程

环境准备:

Trackers:172.16.100.152

Stored节点:172.16.100.152   172.16.100.153

下载安装 libfastcommon(trackers和stored都需要安装)

libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境,安装即可 。

下载libfastcommon

# wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz

 解压

# tar -zxvf V1.0.7.tar.gz

# cd libfastcommon-1.0.7

 编译、安装

# ./make.sh

# ./make.sh install

 libfastcommon.so 安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接。

# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

下载安装FastDFS(trackers和stored都需要安装,只是启动不同)

下载FastDFS

# wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz

 解压

# tar -zxvf V5.05.tar.gz

# cd fastdfs-5.05

 编译、安装

# ./make.sh

# ./make.sh install

 默认安装方式安装后的相应文件与目录

  A、服务脚本:

/etc/init.d/fdfs_storaged

/etc/init.d/fdfs_tracker

  B、配置文件(这三个是作者给的样例配置文件) :

/etc/fdfs/client.conf.sample

/etc/fdfs/storage.conf.sample

/etc/fdfs/tracker.conf.sample

  C、命令工具在 /usr/bin/ 目录下:

复制代码

fdfs_appender_test

fdfs_appender_test1

fdfs_append_file

fdfs_crc32

fdfs_delete_file

fdfs_download_file

fdfs_file_info

fdfs_monitor

fdfs_storaged

fdfs_test

fdfs_test1

fdfs_trackerd

fdfs_upload_appender

fdfs_upload_file

stop.sh

restart.sh

复制代码

 FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin, 但实际命令安装在 /usr/bin/ 下。

  两种方式:

   一是修改FastDFS 服务脚本中相应的命令路径,也就是把 /etc/init.d/fdfs_storaged 和 /etc/init.d/fdfs_tracker 两个脚本中的 /usr/local/bin 修改成 /usr/bin。

    # vim fdfs_trackerd

    使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin

    # vim fdfs_storaged

    使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin

二十一周作业_第11张图片

二是建立 /usr/bin 到 /usr/local/bin 的软链接

# ln -s /usr/bin/fdfs_trackerd   /usr/local/bin

# ln -s /usr/bin/fdfs_storaged   /usr/local/bin

# ln -s /usr/bin/stop.sh         /usr/local/bin

# ln -s /usr/bin/restart.sh      /usr/local/bin

配置FastDFS跟踪器(Tracker)

配置文件详细说明参考:FastDFS 配置文件详解

进入 /etc/fdfs,复制 FastDFS 跟踪器样例配置文件 tracker.conf.sample,并重命名为 tracker.conf。

# cd /etc/fdfs

# cp tracker.conf.sample tracker.conf

# vim tracker.conf

编辑tracker.conf ,这里只列需要重点关注的,其它的一般默认即可。

# 配置文件是否不生效,false 为生效

disabled=false

# 提供服务的端口

port=22122

# Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)

base_path=/data/fasfdfs/tracker

# HTTP 服务端口

http.server_port=80

编辑完毕保存

创建tracker基础数据目录,即base_path对应的目录

# mkdir -p /data/fastdfs/tracker

启动Tracker

初次成功启动,会在 /data/fdfsdfs/tracker/ (配置的base_path)下创建 data、logs 两个目录。

可以用这种方式启动

# /etc/init.d/fdfs_trackerd start

也可以用这种方式启动,前提是上面创建了软链接,后面都用这种方式

# service fdfs_trackerd start

查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则算是Tracker服务安装成功。

关闭Tracker命令:

# service fdfs_trackerd stop

设置Tracker开机启动

# chkconfig fdfs_trackerd on

或者:

# vim /etc/rc.d/rc.local

加入配置:

/etc/init.d/fdfs_trackerd start

tracker server 目录及文件结构

Tracker服务启动成功后,会在base_path下创建data、logs两个目录。目录结构如下:

${base_path}

  |__data

  |   |__storage_groups.dat:存储分组信息

  |   |__storage_servers.dat:存储服务器列表

  |__logs

  |   |__trackerd.log: tracker server 日志文件

配置 FastDFS 存储 (Storage节点)

进入 /etc/fdfs 目录,复制 FastDFS 存储器样例配置文件 storage.conf.sample,并重命名为 storage.conf

# cd /etc/fdfs

# cp storage.conf.sample storage.conf

# vim storage.conf

② 编辑storage.conf

这里只列出需要重点关注的部分,其它的一般默认即可,可以按需修改。

复制代码

# 配置文件是否不生效,false 为生效

disabled=false

# 指定此 storage server 所在 组(卷)

group_name=group1

# storage server 服务端口

port=23000

# 心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)

heart_beat_interval=30

# Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)

base_path=/data/fastdfs/storage

# 存放文件时 storage server 支持多个路径。这里配置存放文件的基路径数目,通常只配一个目录。

store_path_count=1

# 逐一配置 store_path_count 个路径,索引号基于 0。

# 如果不配置 store_path0,那它就和 base_path 对应的路径一样。

store_path0=/data/fastdfs/file

# FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。

# 如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录。

subdir_count_per_path=256

# tracker_server 的列表 ,会主动连接 tracker_server

# 有多个 tracker server 时,每个 tracker server 写一行

tracker_server=file.ljzsg.com:22122

# 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。

sync_start_time=00:00

sync_end_time=23:59

# 访问端口

http.server_port=80

创建Storage基础数据目录,对应base_path目录

# mkdir -p /data/fastdfs/storage

# 这是配置的store_path0路径

# mkdir -p /data/fastdfs/file

启动 Storage

启动Storage前确保Tracker是启动的。初次启动成功,会在 /ljzsg/fastdfs/storage 目录下创建 data、 logs 两个目录。

可以用这种方式启动

# /etc/init.d/fdfs_storaged start

也可以用这种方式,后面都用这种

# service fdfs_storaged start

查看 Storage 是否成功启动,23000 端口正在被监听,就算 Storage 启动成功。

# netstat -unltp|grep fdfs

关闭Storage命令:

# service fdfs_storaged stop

查看Storage和Tracker是否在通信:

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

设置 Storage 开机启动

# chkconfig fdfs_storaged on

或者:

# vim /etc/rc.d/rc.local

加入配置:

/etc/init.d/fdfs_storaged start

Storage 目录结构

同 Tracker,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息。

在 store_path0 目录下,创建了N*N个子目录:

二十一周作业_第12张图片

文件上传功能测试

修改 Tracker 服务器中的客户端配置文件

# cd /etc/fdfs

# cp client.conf.sample client.conf

# vim client.conf

修改如下配置即可,其它默认。

# Client 的数据和日志目录

base_path=/data/fastdfs/client

# Tracker端口

tracker_server=172.16.100.152:22122

上传测试

上传文件

返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

二十一周作业_第13张图片

你可能感兴趣的:(二十一周作业)