随着互联网的发展,软件更新速度越来越快,但是很多博客尽管软件安装的版本随着软件的更新而更新,但是软件的配置一直参考前人的博客而停留在最初版的配置上,可能某一些配置已经随着版本的更新而完善,不再需要做无用功,所以本篇博客配置以本人自己理解的方式进行配置,尽量删除老旧版本中的无用配置文件,能力有限,不完善的地方还请指出来,多谢!
新建虚拟机,安装Centos7系统,网上教程很多,不再赘述!
Centos 7 系统root用户下新建管理员用户:bdc
1.1 新建普通用户 bdc:adduser bdc
1.2 修改用户密码:passwd bdc
1.3 为bdc用户赋予 root 权限,编辑文件:vi /etc/sudoers
,找到下面一行,并在 root 下添加一行,如下所示:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
bdc ALL=(ALL) ALL
修改完毕后保存退出,则该 bdc 用户就为管理员用户了,可以使用 sudo 命令获取管理员权限。
补充:在编辑 /etc/sudoers 文件后,无法保存:
查看文件权限:ll /etc/sudoers
发现文件为只读文件(r 权限)
为文件添加写权限:chmod +w /etc/sudoers
再次编辑 /etc/sudoers 文件,然后保存退出。
1.4 切换到bdc用户:su bdc
1.5 进入bdc用户目录:cd ~
2.1 bdc用户下编辑文件:sudo vi /etc/sysconfig/network
,在文件中输入如下代码:
NETWORKING=yes
HOSTNAME=bdcTracker
保存并退出,然后在命令行界面输入:sudo hostname bdcTracker
,确认修改生效。
最后,修改静态主机名,编辑文件:sudo vi /etc/hostname
,在编辑器输入新主机名:bdcTracker
,保存并退出。
重启终端后,输入:hostname
,即可查看修改结果。
默认情况下,网络是关闭的,无法访问互联网,需要手动开启。
查看IP地址信息,打开终端窗口:输入 ifconfig
命令,或输入 ip addr
命令,发现 ens33 没有 inet 这个属性,即网卡未启动。
启动网卡,编辑文件:sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33
,找到代码 ONBOOT=no,并将这里的 no 改为 yes,保存退出。
重启网络服务:sudo service network restart
查看IP地址:命令行输入ifconfig
,ens33 网卡下的 inet 属性值即为IP地址,此时可以进行网络访问。
当你安装CentOS7服务器版本的时候,系统默认是不会安装GUI的图形界面程序,这个需要手动安装CentOS7 Gnome GUI包。
yum 可以以程序组的模式来安装成套的软件包,支持的软件包可以通过:yum grouplist
查询到。
4.1 查询支持的软件包:sudo yum grouplist
4.2 安装Gnome包:sudo yum -y groupinstall "GNOME Desktop" "Graphical Administration Tools"
4.3 启动桌面:sudo startx
4.4 更新系统运行级别,以桌面形式启动:sudo systemctl set-default graphical.target
4.5 查看系统运行级别:systemctl get-default
,返回值与上面设置值一致,则设置成功
4.6 重启机器,完成一下配置:reboot
FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。
Tracker Server:跟踪服务器,主要做任务调度工作,起到负载均衡的作用;负责管理所有的 Storage server和 group,每个 Storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。Tracker需要管理的元信息很少,会全部存储在内存中;另外Tracker上的元信息都是由Storage汇报的信息生成的,本身不需要持久化任何数据,这样使得Tracker非常容易扩展,直接增加Tracker机器即可扩展为Tracker cluster来服务,cluster里每个Tracker之间是完全对等的,所有的Tracker都接受Stroage的心跳信息,生成元数据信息来提供读写服务。
Storage Server:存储服务器,主要提供存储容量和存储备份服务;以 group 为单位,每个 group 内可以有多台 Storage server,数据互为备份。以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内Storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内的其他机器,使得恢复时间会很长。
Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
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,最后根据以上的信息生成文件名存储文件。
写文件时,客户端将文件写至group内一个Storage server即认为写文件成功,Storage server写完文件后,会由后台线程将文件同步至同group内其他的Storage server。
每个Storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,Storage会记录向group内其他Storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。
Storage的同步进度会作为元数据的一部分汇报到Tracker上,Tracke在选择读Storage的时候会以同步进度作为参考。
客户端upload file成功后,会拿到一个Storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。跟upload file一样,在download file时客户端可以选择任意Tracker server。Client发送download请求给某个Tracker,必须带上文件名信息,Tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个Storage用来服务读请求。
FastDFS开发者的GitHub地址为:https://github.com/happyfish100
打开上述链接,我们点击fastdfs–>release,发现最新版的FastDFS为2017年上传的V5.11,接下来我们来安装最新版的FastDFS。
在安装前,我们新建一个目录,用来存储所有下载文件:mkdir ~/download
,进入download目录完成接下来操作:cd ~/download
libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,是FastDFS的基础环境,安装即可 。
1.1 下载 libfastcommon 压缩包:wget https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz
1.2 解压 libfastcommon 压缩包:tar -zxvf V1.0.36.tar.gz
1.3 进入解压目录编译安装:
cd libfastcommon-1.0.36/
编译:./make.sh
在上面这步中报错:gcc: 未找到命令,即没有gcc命令,那就安装gcc命令:sudo yum -y install gcc gcc-c++
,然后重新编译。
安装:sudo ./make.sh install
2.1 下载FastDFS压缩包:wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
2.2 解压:tar -zxvf V5.11.tar.gz
2.3 进入解压目录编译安装:
cd fastdfs-5.11/
编译:./make.sh
安装:sudo ./make.sh install
2.4 查看安装后的相应文件与目录
2.4.1 服务脚本:ll /etc/init.d/ | grep fdfs
2.4.2 配置文件(这四个是开发者给的样例配置文件):ll /etc/fdfs/
2.4.3 命令工具:ll /usr/bin/ | grep fdfs
首先,将 /etc/fdfs/目录下开发者给的样例配置文件复制并重命名:
进入目录:cd /etc/fdfs/
复制文件:
sudo cp client.conf.sample client.conf
sudo cp storage.conf.sample storage.conf
sudo cp tracker.conf.sample tracker.conf
sudo cp storage_ids.conf.sample storage_ids.conf
1. 编辑配置文件:sudo gedit tracker.conf
2. 修改配置文件:其余的默认即可
配置文件是否不生效,false 为生效,不变即可:
disabled=false
提供服务的端口,不变即可:
port=22122
Tracker 数据和日志目录地址,该目录必须手动创建:
base_path=/home/bdc/data/fastdfs/tracker
HTTP 服务端口,修改为80:
http.server_port=80
3. 创建tracker基础数据目录,即base_path对应的目录
mkdir -p /home/bdc/data/fastdfs/tracker
4. 防火墙中打开跟踪端口(默认的22122):
sudo firewall-cmd --permanent --zone=public --add-port=22122/tcp
5. 重启防火墙:
sudo firewall-cmd --reload
6. 查看防火墙中开启的端口:
sudo firewall-cmd --list-port
7. 启动Tracker,初次成功启动,会在 /home/bdc/data/fastdfs/ (配置的base_path)下创建 data、logs 两个目录。
sudo service fdfs_trackerd start
8. 查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则算是Tracker服务安装启动成功。
sudo netstat -ntlp | grep 22122
或 sudo lsof -i:22122
9. 关闭Tracker命令:
sudo service fdfs_trackerd stop
10. 设置Tracker开机启动
sudo chkconfig --add fdfs_trackerd
11. 查看开机启动任务:
sudo chkconfig --list
sudo gedit storage.conf
disabled=false
group_name=group1
port=23000
heart_beat_interval=30
base_path=/home/bdc/data/fastdfs/storage
store_path_count=1
store_path0=/home/bdc/data/fastdfs/storage
subdir_count_per_path=256
tracker_server=bdcTracker:22122
sync_start_time=00:00
sync_end_time=23:59
http.server_port=80
mkdir -p /home/bdc/data/fastdfs/storage
sudo firewall-cmd --permanent --zone=public --add-port=23000/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-port
sudo vim /etc/hosts
192.168.105.133 bdcTracker
sudo service fdfs_storaged start
sudo netstat -ntlp | grep 23000
或 sudo lsof -i:23000
或sudo netstat -ntlp | grep fdfs
sudo service fdfs_storaged stop
fdfs_monitor /etc/fdfs/storage.conf
sudo chkconfig fdfs_storaged on
sudo gedit client.conf
base_path=/home/bdc/data/fastdfs/client
tracker_server=bdcTracker:22122
http.tracker_server_port=80
mkdir -p /home/bdc/data/fastdfs/client
fdfs_upload_file /etc/fdfs/client.conf /home/bdc/图片/02.jpg
ll /home/bdc/data/fastdfs/storage/data/00/00
1) gcc准备:安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,查看是否安装gcc:
yum list installed | grep gcc
如果没有gcc环境,需要安装gcc,执行命令安装:
sudo yum -y install gcc gcc-c++
2) PCRE准备:PCRE是一个Perl库,包括 Perl 兼容的正则表达式库。nginx的http模块使用PCRE来解析正则表达式,所以需要在Linux上安装PCRE库,执行安装命令:
sudo yum -y install pcre pcre-devel
3) zlib准备:zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库,运行安装命令:
sudo yum -y install zlib zlib-devel
4) openssl准备:OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。运行安装命令:
sudo yum -y install openssl openssl-devel
目前版本的FastDFS还不支持http访问文件,所以要想通过http来访问已经上传成功的文件,需要安装Nginx支持;Nginx只需要安装到StorageServer所在的服务器即可,用于支持http访问文件。
1. 下载Nginx:
wget https://nginx.org/download/nginx-1.14.0.tar.gz
2. 解压
tar -zxvf nginx-1.14.0.tar.gz
3. 进入解压目录编译安装:
3.1 进入目录:
cd nginx-1.14.0
3.2 配置Nginx:启用 openssl密码库,并使用当前用户启动nginx,其余默认即可
./configure --with-http_ssl_module --user=bdc
3.3 编译 Nginx:
make
3.4 安装:
sudo make install
3.5 创建软链接(类似快捷方式),并启动 Nginx:
sudo ln -s /usr/local/nginx/sbin/nginx /usr/bin/
sudo nginx
其他命令:
sudo nginx -s stop
sudo nginx -s reload
3.6 查看是否启动成功:
sudo netstat -anp | grep nginx
3.7 设置nginx开机启动
sudo vim /etc/rc.local
添加下面一行:
/usr/local/nginx/sbin/nginx
然后更改文件权限
sudo chmod 744 /etc/rc.d/rc.local
3.8 查看nginx的版本及模块
nginx -V
3.9 访问刚刚上传的图片
1)修改nginx.conf配置
编辑文件:sudo gedit /usr/local/nginx/conf/nginx.conf
注:原配置文件中有很多注释掉的内容,这里不再粘贴,,并且需要改动的地方已经加注释标示出来了
#修改nginx启动用户,和系统启动用户一致,nginx默认启动用户为nobody,在nginx安装的时候已经指定为bdc用户
user bdc;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
#侦听端口
listen 80;
server_name localhost;
#修改映射地址,将http中的地址/group1/M00/映射为系统实际地址/home/bdc/data/fastdfs/storage/data/
location /group1/M00/ {
alias /home/bdc/data/fastdfs/storage/data/;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
重启nginx:sudo nginx -s reload
访问文件:
方式一:http://bdc:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg
注意这里可能出现问题:Centos7自带的最初版火狐浏览器解析上面地址的时候可能解析为一个目录,即:http://bdctracker:8081/group1/M00/00/00/wKhphFrhIVuADqfzAASB-wpUaac425.jpg/
这种形式,导致访问不到文件,问题出在wKhphFrhIVuADqfzAASB-wpUaac425.jpg
这个位置,把文件和访问地址的后缀名改为.jpeg
就可以访问到,具体原因不太清楚,不过谷歌浏览器或者更新后的火狐浏览器又不会出现问题,按上面地址又可以访问到文件,学艺不精,不再研究。。。。
方式二:wget http://bdc:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg
,可以获取到文件则nginx配置成功。
FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制, 数据同步有延迟的问题。
假设 Tracker 服务器将文件上传到了 Stroage1,上传成功后文件 ID已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储 Stroage2,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 Stroage2 上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
1) 下载 fastdfs-nginx-module
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip
2) 解压
unzip master.zip
3) 停止nginx服务
sudo nginx -s stop
4) nginx添加fastdfs-nginx-module模块重新编译安装
进入nginx解压目录
cd nginx-1.14.0/
nginx配置fastdfs-nginx-module模块
./configure --with-http_ssl_module --user=bdc --add-module=../fastdfs-nginx-module-master/src/
编译安装
make && sudo make install
5) 查看Nginx的模块
nginx -V
若有下面配置则证明模块添加成功:
configure arguments: --add-module=../fastdfs-nginx-module-master/src/
6) 修改配置文件1
复制 fastdfs-nginx-module 源码中的配置文件mod_fastdfs.conf,并修改配置
sudo cp ~/download/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
编辑mod_fastdfs.conf文件:
sudo gedit /etc/fdfs/mod_fastdfs.conf
修改如下配置,其余默认即可:
#连接超时时间
connect_timeout=15
# TrackerServer的IP和端口
tracker_server=bdcTracker:22122
# StorageServer端口
storage_server_port=23000
# 如果文件ID的uri中包含group分组信息,则要设置为true
url_have_group_name = true
# Storage配置的store_path0路径,必须和storage.conf中的一致
store_path0=/home/bdc/data/fastdfs/storage
7) 修改配置文件2
复制 FastDFS 源码中的配置文件到/etc/fdfs 目录:
cd ~/download/fastdfs-5.11/conf/
sudo cp anti-steal.jpg http.conf mime.types /etc/fdfs/
8) 修改配置文件3
修改nginx的配置文件nginx.conf,修改下面配置,其它不变:
sudo gedit /usr/local/nginx/conf/nginx.conf
#location /group1/M00/ {
#alias /home/bdc/data/fastdfs/storage/data/;
#}
#添加fastdfs-nginx-module模块
location ~/group([0-9])/M00/ {
ngx_fastdfs_module;
}
注意:
1) nginx.conf 配置中的 listen 80端口值要与/etc/fdfs/storage.conf中的http.server_port=80 (前面配置为80了)端口值相对应;如果改成其它端口,则需要统一,同时在防火墙中打开该端口。
2) location 的配置,在集群模式中,有多个group,所以这里以正则的方式配置,如果是单一节点可以只配置指定group。
9) 启动Nginx
sudo nginx
打印类似如下信息,则配置成功:
ngx_http_fastdfs_set pid=119826
10) http访问
能获取到文件,则nginx配置成功;注意和前面中直接使用nginx路由访问不同的是,这里配置 fastdfs-nginx-module 模块,可以重定向文件链接到源服务器取文件。
http://bdc:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg
wget http://bdc:80/group1/M00/00/00/wKhphVrwGUmAduGXAAHjhVtVRZw426.jpg
好了,到此FastDFS单节点安装配置成功,接下来我们使用Java操作FastDFS实现文件上传和下载,最后将单节点模式改为集群模式