配置最终目标
以4台服务做集群,其中2台作为tracker服务器又作为storage节点,tracker以先启动为leader,后启动为client,这个可以互换,另外两台作为纯storage节点,并分配两个group为group1与group2以下服务器说明:
192.168.10.152 tracker leader group1,storage1
192.168.10.153 tracker client group1,storage2
192.168.10.154 group2,storage1
192.168.10.155 group2,storage2
以上是最终集群配置目标
结构图:
环境及前提条件
操作系统 | 所需依赖 | 依赖说明 | 依赖顺序 | 版本 | 下载地址 |
Centos 7 | gcc | 编译c文件所需依赖 | 1 |
| yum -y install gcc |
gcc-c++ | 编译c++文件所需依赖 | 2 |
| yum -y install gcc-c++ | |
unzip | 解压zip压缩包 | 3 |
| yum -y install unzip | |
vim | Shell编辑器 | 4 |
| yum -y install vim | |
pcre pcre-devel | nginx 所需依赖 | 5 |
| yum -y install pcre pcre-devel | |
zilb zlib-devel | nginx 所需依赖 | 6 |
| yum -y install zlib zlib-devel | |
openssl openssl-devel | nginx 所需依赖 | 7 |
| yum -y install openssl openssl-devel | |
pcre | pcre 类库 | 8 | 8.00 | ||
zlib | zlib类库 | 9 | 1.2.11 | ||
openssl | openssl 类库 | 10 | 1.1.0e | ||
libfastcommon-master | fastDFS 所需依赖 | 11 | 1.0.35 | https://github.com/happyfish100/libfastcommon/archive/master.zip | |
fastdfs | fasdfs 安装包 | 12 | 5.09 | https://github.com/happyfish100/fastdfs/archive/V5.09.tar.gz | |
fast-nginx-module | nginx 的FastDFS插件 | 13 |
| https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip | |
nginx | nginx 安装包 | 14 | 1.8.1 |
安装部署
依赖顺序直接跳至8,1-7都可以使用centos的命令安装,一般不会出现错误,但一定要执行1,2,5,6,7依赖,不然会出现未知错误,下面开始需要手动安装的步骤
说明
以下操作都是在192.168.10.152机器上操作,为确保安装fasdfs不报错,为了保险起见,还是先安装pcre,zlib,openssl这三个包,安装方法基本一致,解压其tar.gz包,进入该目录,./configure & make &make install 除了openssl是./config 其他的make & make install都一致。
安装libfastcommon-master依赖包
安装完三个依赖包后,进行fasdfs安装,安装fastdfs前需要安装
unzip libfastcommon-master.zip
cd libfastcommon-master
./make.sh
./make.sh install
至此libfastcommon就已经安装成功了,但注意一下上图中红色框标注的内容,libfastcommon.so 默认安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以此处需要重新设置软链接(类似于Windows的快捷方式):
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
tar -xzf fastdfs-5.0.9.tar.gz
cd fastdfs-5.0.9/
./make.sh
./make.sh install
如果成功,则看见以 fi 结尾
安装成功后,会在etc目录下生成fdfs目录,里面是fdfs的配置文件,现在先拷贝文件
mkdir /opt/fastdfs_tracker
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data
因为先要配置tracker所以以152机器先启动tracker为例启动第一个trcker节点
vim /etc/fdfs/tracker.conf
因为tracker修改的地方不多,所以以下只列举修改的地方:
base_path=/opt/fastdfs_tracker
store_lookup=0 //一般不用配置,因为这里是为了做集群上传测试能看到分别上传到其他节点,所以设置为0,表示循环上传到goup 节点中,那么如果集群中有3个节点,则会依次上传到group1,group2,group3,group1,group2...以此循环
store_group=group1 //因为是store_lookup设置为0,则表示集群中你讲分配几个group 目前我们是设置为两个,即为goup1与group2,所以这里设置为goup1,另外153的tracker配置文件的这里则设置为group2,store_lookup也设置为0
完成后保存tracker.conf 配置文件
启动152上的tracker
/usr/bin/fdfs_trackerd/ etc/fdfs/tracker.conf
查看是否启动成功
netstat -unlpt|grep fdfs
出现对应的fdfs端口号则启动成功
查看是否报错
cat /opt/fastdfs_tracker/logs/tracker.log
出现这些log文字即表示tracker启动成功
启动153上的tracker
刚刚第5步已经提到了,153 只有store_group设置为group2以外,其他都跟152上的设置一样,配置完了启动启动结果跟152的一致
/usr/bin/fdfs_trackerd/ etc/fdfs/tracker.conf
查看端口:
netstat -unlpt|grep fdfs
出现对应的fdfs端口号则启动成功
查看日志是否报错
cat /opt/fastdfs_tracker/logs/tracker.log
ok,现在启动了两个tracker,但是还没有关联起来,也就是说还没有集群效果,下面低8步开始则配置storage,FastDFS 的核心,因为152,153都是即作为tracker又作为storage的,所以初始化文件路径的时候做了storage的操作。
配置152的storage
以152为例配置
vim /etc/fdfs/storage.conf
group_name=group1 //配置当前storage节点属于哪个group
port=23000 //配置当前group的端口号
base_path=/opt/fastdfs_storage //设置storage 存放日志的路径
store_path=/opt/fastfs_storage_data //设置storage 存储路径,如果没有设置,则使用base_path,这里的路径是指文件存储的地址,而不是日志存放的路径,因为为了区分日志的data和存储文件的data所以文件路径初始化的时候就做不同的文件
tracker_server=192.168.10.152:22122
tracker_server=192.168.10.153:22122 //配置两个tracker服务器地址,两个这直接写在下面即可,三个依次添加
配置153的storage
vim /etc/fdfs/storage.conf
group_name=group1 //配置当前storage节点属于哪个group
port=23000 //配置当前group的端口号
base_path=/opt/fastdfs_storage //设置storage 存放日志的路径
store_path=/opt/fastfs_storage_data //设置storage 存储路径,如果没有设置,则使用base_path,这里的路径是指文件存储的地址,而不是日志存放的路径,因为为了区分日志的data和存储文件的data所以文件路径初始化的时候就做不同的文件
tracker_server=192.168.10.152:22122
tracker_server=192.168.10.153:22122 //配置两个tracker服务器地址,两个这直接写在下面即可,三个依次添加
两个一模一样。。。。
启动storage
首先启动152的storage
/usr/bin/fdfs_storaged/ etc/fdfs/storage.conf
查看 端口是否启动
netstat -unlpt|grep fdfs
查看日志是否报错
cat /opt/fastdfs_storage/logs/storaged.log
因为这里我是先启动的153,所以leader为153的,先启动152的,leader则为152的
查看 152机器上的tracker日志
cat /opt/fastdfs_tracker/logs/trackerd.log
在之前的日志后面打印了选择leader的日志,这里选择153的机器为leader,同理,153的tracker也会增加日志
查看153的tracker日志:
cat /opt/fastdfs_tracker/logs/trackerd.log
153的日志最后一条跟152的不一致,因为153作为leader,则打印的为:I am new tracker leader
而152的则打印:the tracker leader is 192.168.10.153:22122
接下来配置与启动153的storage
启动跟152的一致
/usr/bin/fdfs_storaged/etc/fdfs/storage.conf
查看 端口是否启动
netstat -unlpt|grep fdfs
然后配置与启动154的storage
因为154跟155只作为单纯的storage节点,所以就不配置tracker,但是storage.conf的配置则跟152与153的不一致,下面请看配置:
vim /etc/fdfs/storage.conf
group_name=group2 //配置当前storage节点属于哪个group
port=23001 //配置当前group的端口号
不一致主要是前面2个配置,group_name与port,因为后面两个存储节点是group2的,所以只需要把端口改为23001即可
base_path=/opt/fastdfs_storage //设置storage 存放日志的路径
store_path=/opt/fastfs_storage_data //设置storage 存储路径,如果没有设置,则使用base_path,这里的路径是指文件存储的地址,而不是日志存放的路径,因为为了区分日志的data和存储文件的data所以文件路径初始化的时候就做不同的文件
tracker_server=192.168.10.152:22122
tracker_server=192.168.10.153:22122 //配置两个tracker服务器地址,两个这直接写在下面即可,三个依次添加
启动 154的storage
启动方式跟查看端口日志不再累述
最后配置与启动155的storage
vim /etc/fdfs/storage.conf
group_name=group2 //配置当前storage节点属于哪个group
port=23001 //配置当前group的端口号
不一致主要是前面2个配置,group_name与port,因为后面两个存储节点是group2的,所以只需要把端口改为23001即可
base_path=/opt/fastdfs_storage //设置storage 存放日志的路径
store_path=/opt/fastfs_storage_data //设置storage 存储路径,如果没有设置,则使用base_path,这里的路径是指文件存储的地址,而不是日志存放的路径,因为为了区分日志的data和存储文件的data所以文件路径初始化的时候就做不同的文件
tracker_server=192.168.10.152:22122
tracker_server=192.168.10.153:22122 //配置两个tracker服务器地址,两个这直接写在下面即可,三个依次添加
启动 155的storage
启动方式跟查看端口日志不再累述
目前我们依次启动了:
152 的tracker,153的tracker,152的storage,153的storage,154的storage,155的storage
现在我们来查看集群状态:
在启动stroage的任意一台机器上都可以查看集群状态:
例如:在155上查看:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
首先查看前面部分:
看这里说明了启动2个tracker由server_count=2表示,启动了2个group由group count:2表示
再查看:
这里写明group1的配置,disk total space,则为总容量,disk free space 为可用容量
再看storage1:
主要看后面这个ACTIVE
这里列出几个常见的状态:
ACTIVE表示可用状态,也就是正常的,成功的
WAIT_SYNC:等待同步,一般出现这个状态基本上是由于添加了新存储节点造成,一般正常情况下一会就会同步完成
SYNCING:同步中,添加新节点一般会在新添加的storage节点显示该状态,说明正在同步
DELETE:删除storage节点,一般删除后会显示该状态,重启tracker服务器则不再看见该状态的storage节点,删除指令为:/etc/fdfs/client.conf delete groupxx 192.168.xx.xx 这里的client.conf配置很简单,只需要配置上base_path=/opt/fastdfs_storage 与tracker_server 既可,当然tracker_server如果是集群,则写集群的所有tracker服务器
OFFLINE:离线,不能提供服务,一般是由于先启动两个tracer节点,没有启动任何节点是storage造成,解决原因就是启动storage就可以了,但是这个一般是由于配置成功过一次后关机再启动tracker没有启动storage造成的。
INIT:初始化
我们继续查看集群情况:
这里是153的storage节点,归属group1:
这里是154的stroage节点,归属到group2中去了
这里是155的stroage节点,归属到group2中去了:
到这里fastdfs的纯集群配置完成,下面我们来尝试模拟生产环境进行添加一个storage节点,并分配一个group3,把新增的storage节点归属到group3中并完成同步操作
1.添加一个storage节点
同理 我们开辟一个新的机器,ip为192.168.10.156,则只配置storage的
group_name=group3
port=23002
tracker_server=192.168.10.152:22122
tracker_server=192.168.10.152:22122
base_path与store_path0则为152,153,154,155的一致,前提需要初始化文件路径
注意:如果156之前作为storage为其他tracker的storage,则需要删除/opt/fastdfs_storage_data/data的所有数据
因为156我之前做过一个storage则需要执行 rm -rf /opt/fastdfs_storage_data/data
如果是新增加的则不需要执行这一步操作,如果不执行这一步操作,则无法同步。。。也就是会造成集群状态的group3节点的storage1位WATI_SYNC状态。
下面启动stroage
端口就不查看了,直接查看log
cat /opt/fastdfs_storage/logs/storage.log
查看到创建文件data数据后报错,tracker 153连接返回 status 2!=0
查看半天发现配置正确,日志报错,找了很多资料后没有解决,后来想了下是不是防火墙问题,果断执行关闭防火墙操作
service firewalld stop
停止防火墙
systemctl disable firewalld
禁用防火墙,完全关闭,开机不启动
再查看日志:
原来是防火墙的问题,再查看集群stroage状态:
到这里集群的添加节点配置已经达到理想状态,
如果删除节点,在上面我已近提到过直接命令操作既可
接下来我们进行测试上传文件
添测试进行文件上传
因为我们配置tracker的时候设置了上传以循环group的方式进行上传,那么分别上传3个文件,看看返回的是否是group1/M00/xxx
group2/M00/xxx
group3/M00/xxx
的方式
随便找一太机器进行上传,以152作为上传节点吧,那么配置client.conf ,
设置
base_path=/opt/fastdfs_storage
tracker_server=192.168.10.152:22122
tracker_server=192.168.10.153:22122
vim test1.txt 输入11111,保存3个分别为test1.txt test2.txt test3.txt
可以看到,group2上传失败,是不是防火墙原因呢:
关闭154上的防火墙:
再继续进行上传:
Ok上传成功!
添安装Nginx,提供http的下载
因为FastDFS 的http服务太弱,无法提供负载均衡等服务,所以需要借助nginx来进行http访问的负载
下面进行配置 nginx与fast-nginx-module
解压nginx
cd nginx
./configure --prefix=/usr/local/nginx/ --add-module=/home/downloads/fast-nginx-module/src
进行安装
解复制FastDFS目录下的文件
conf中的http.conf mime.types 两个文件到 /etc/fdfs/ 下,不然启动nginx会报错
创建软连接
ln -s /opt/fastdfs_storage_data/data/ /opt/fastdfs_storage_data/data/M00
//创建软连接的目的是为了nginx能够访问储存路径的时候能直接访问到M00的数据,
复制mod_fastdfds.conf
cp fast-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
复制fastdfs-nginx-module下的mod_fastdfds.conf 至 /etc/fastdfs/下,并编辑,编辑几个主要属性
base_store=/opt/fastdfs_storage //也就是存储日志目录
tracker_server=192.168.10.152:22122
tracker_server=192.168.10.153:22122
storage_server_port=23000 //表示当前机器的storage的端口,因为是152的机器,152的storage端口为2300,所以这里设置为23000
group_name=group1 //这里也表示当前机器storage的group名称,因为152的storage的group名称为group1,所以这里设置为group1
store_path0=/opt/fastdfs_storage_data //这里表示存储路径
group_count=3 //这里表示集群中group的数量,因为我们只开辟了3个,所以设置为3,那么以下的设置就要写3个,分别表示3个group的信息,下面分别设置了3个group的信息:
[group1]
group_name=group1
storage_server_port=2300
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group2]
group_name=group2
storage_server_port=2301
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group3]
group_name=group3
storage_server_port=2302
store_path_count=1
store_path0=/opt/fastdfs_storage_data
ok,这里的mod_fastdfs.conf 的配置已经完成,接下来最后一步就是设置nginx
配置nginx
打开ngxin的配置文件
vim /usr/local/ngxin/conf/nginx.conf
编辑3行代码:
完成,保存后启动:
/usr/local/nginx/sbin/nginx
启动成功后会有pid号:
然后查看nginx日志:
cat /usr/loca/nginx/logs/error.log
这里看到storage_server_port =23000,可能有疑问,为什么只有23000,那么23001,23002去哪里了呢?其实这里的23000表示本地机器storage的端口,如果在storage的端口为23001的机器上启动ngxin的话, 那么这里也会是23001
OK,nginx 配置启动完成,那么现在我们来看看刚刚上传的3个文件是否能通过http协议访问,打开浏览器,输入
192.168.10.152/group1/M00/00/00/wKgKmFjbH0qAG0HZAAAABTzXiJY913.txt
192.168.10.152/group2/M00/00/00/wKgKmljbH1eAQfcuAAAABj_dUtU558.txt
192.168.10.152/group3/M00/00/00/wKgKnFjbH2KAdeXPAAAABSJTpW4319.txt
结果分别是:grou1的为:
结果分别是:grou2的为:
结果group2报错,访问不了,我们查看下nginx的日志
cat /usr/local/nginx/logs/error.log
截图字太小,贴出来:
2017/03/29 11:01:57 [error] 2394#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.10.1, server: localhost, request: "GET /group2/M00/00/00/wKgKmljbH1eAQfcuAAAABj_dUtU558.txt HTTP/1.1", upstream: "http://192.168.10.154:80/group2/M00/00/00/wKgKmljbH1eAQfcuAAAABj_dUtU558.txt?redirect=1", host: "192.168.10.152"
2017/03/29 11:03:11 [error] 2394#0: *3 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.10.1, server: localhost, request: "GET /group2/M00/00/00/wKgKmljbH1eAQfcuAAAABj_dUtU558.txt HTTP/1.1", upstream: "http://192.168.10.154:80/group2/M00/00/00/wKgKmljbH1eAQfcuAAAABj_dUtU558.txt?redirect=1", host: "192.168.10.152"
日志说group2/xxx/xxx 无法upstream到154的80,忘了最后一件事件,就是所有当做stroage的节点机器都必须启动nginx做为storage负载,所以,这里除了152,153,那么剩下的154,155,156都需要启动nginx,下面则列举154与156的,155的就不累述了
配置154:
mod_fastdfs.conf 则按照152的配置来
group_name=group2
store_server_port=23001
url_have_group_name=true
group_count=3
因为154上的storage的group_name为group2,所以要设置为group2,另外,后面的跟152一致
然后nginx.conf 配置: