FastDfs分布式文件系统安装

工作原理

20180729180636880

FastDFS服务端有2个角色 分别是tracker( 调度器 ) 和 storage(存储节点)。

tracker负责调度和负载均衡,tracker负责管理所有的storage 和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。并不需要存储文件的索引信息,client 通过文件id 就可以获取存储信息,所有tracker服务器是对等的,可以随时增减而不影响已有服务。

文件id含义:

image
image-20210201142531889

Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。group 只能通过增加磁盘扩容,无法通过增加机器扩容。

image

负载均衡

选择存储group:

  1. Round robin,所有的group间轮询
  2. Specified group,指定某一个确定的group
  3. Load balance,剩余存储空间多多group优先

选择storage server:

  1. Round robin,在group内的所有storage间轮询
  2. First server ordered by ip,按ip排序
  3. First server ordered by priority,按优先级排序(优先级在storage上配置)

选择storage path:

storage将会为文件分配一个数据存储目录,支持如下规则:

  1. Round robin,多个存储目录间轮询
  2. 剩余存储空间最多的优先

文件同步:

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

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

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

存在的问题

  • 当storage的某块磁盘故障时,只能换存磁盘,然后手动恢复数据;
  • 存储空间受限于单机存储inode数量

安装

https://github.com/happyfish100/fastdfs/wiki#%E5%AE%89%E8%A3%85fastdfs

cd /usr/local/src

## 安装依赖
sudo aptitude install git gcc g++ make automake autoconf libtool pcre2-utils libpcre2-dev zlib1g zlib1g-dev openssl libssh-dev wget vim
sudo aptitude install libpcre3 libpcre3-dev

## 安装fastdfs的common包
sudo git clone https://github.com/happyfish100/libfastcommon.git --depth 1
cd libfastcommon
sudo ./make.sh && sudo ./make.sh install
cd ..

## fastdfs
sudo git clone https://github.com/happyfish100/fastdfs.git --depth 1
cd fastdfs
sudo ./make.sh && sudo ./make.sh install
#供nginx访问使用的配置
cp /usr/local/src/fastdfs/conf/http.conf /etc/fdfs/
cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/
cd ..

## 安装 nginx 及相关模块
sudo git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1
sudo cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
sudo wget http://nginx.org/download/nginx-1.15.4.tar.gz && sudo tar -zxvf nginx-1.15.4.tar.gz
cd nginx-1.15.4/

sudo ./configure --prefix=/usr/local/nginx
sudo make && sudo make install

sudo ./configure --prefix=/usr/local/nginx  --add-module=/usr/local/src/fastdfs-nginx-module/src/
sudo make && sudo make install
cd ..

## 防火墙
sudo aptitude install ufw
sudo ufw enable
sudo ufw allow 23000 22122 8888 22

配置

vim /etc/fdfs/tracker.conf
port=22122  # tracker服务器端口(默认22122,一般不修改)
base_path=/home/dfs  # 存储日志和数据的根目录

vim /etc/fdfs/storage.conf
#需要修改的内容如下
port=23000  # storage服务端口(默认23000,一般不修改)
base_path=/home/dfs  # 数据和日志文件存储根目录
store_path0=/home/dfs  # 第一个存储目录
tracker_server=192.168.52.1:22122  # tracker服务器IP和端口

vim /etc/fdfs/client.conf
#需要修改的内容如下
base_path=/home/dfs
tracker_server=192.168.52.1:22122    #tracker服务器IP和端口
#保存后测试,返回ID表示成功 如:group1/M00/00/00/xx.tar.gz
fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz

vim /etc/fdfs/mod_fastdfs.conf
#需要修改的内容如下
tracker_server=192.168.52.1:22122  #tracker服务器IP和端口
url_have_group_name=true
store_path0=/home/dfs
#配置nginx.config
vim /usr/local/nginx/conf/nginx.conf
#添加如下配置
server {
    listen       8888;    ## 该端口为storage.conf中的http.server_port相同
    server_name  localhost;
    location ~/group[0-9]/ {
        ngx_fastdfs_module;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
    root   html;
    }
}
#测试下载,用外部浏览器访问刚才已传过的nginx安装包,引用返回的ID
http://192.168.52.1:8888/group1/M00/00/00/wKgAQ1pysxmAaqhAAA76tz-dVgg.tar.gz

你可能感兴趣的:(FastDfs分布式文件系统安装)