配置最终目标

以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

以上是最终集群配置目标

 

结构图:

centos7连接docker pgsql_集群


环境及前提条件




操作系统

所需依赖

依赖说明

依赖顺序

版本

下载地址

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

https://ftp.pcre.org/pub/pcre/pcre-8.00.tar.gz

zlib

zlib类库

9

1.2.11

http://www.zlib.net/zlib-1.2.11.tar.gz

openssl

openssl 类库

10

1.1.0e

https://www.openssl.org/source/openssl-1.1.0e.tar.gz

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

http://nginx.org/download/nginx-1.8.1.tar.gz

 

 

 

 

 




安装部署



依赖顺序直接跳至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



centos7连接docker pgsql_上传_02


至此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





如果成功,则看见以

centos7连接docker pgsql_nginx_03


安装成功后,会在etc目录下生成fdfs目录,里面是fdfs的配置文件,现在先拷贝文件



centos7连接docker pgsql_FastDFS_04



centos7连接docker pgsql_FastDFS_05



初始化文件路径

为要配置FastDFS,所以也要创建写入日志与data的地方,创建目录:




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

完成后保存tracker.conf 配置文件

启动152上的tracker

/usr/bin/fdfs_trackerd/ etc/fdfs/tracker.conf

查看是否启动成功

netstat -unlpt|grep fdfs


centos7连接docker pgsql_nginx_06


出现对应的fdfs端口号则启动成功

查看是否报错

cat /opt/fastdfs_tracker/logs/tracker.log




centos7连接docker pgsql_集群_07


出现这些log文字即表示tracker启动成功

启动153上的tracker


刚刚第5步已经提到了,153 只有store_group设置为group2以外,其他都跟152上的设置一样,配置完了启动启动结果跟152的一致

/usr/bin/fdfs_trackerd/ etc/fdfs/tracker.conf

查看端口:

netstat -unlpt|grep fdfs

centos7连接docker pgsql_FastDFS_08

出现对应的fdfs端口号则启动成功

查看日志是否报错

cat /opt/fastdfs_tracker/logs/tracker.log



centos7连接docker pgsql_FastDFS_09


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

store_path=/opt/fastfs_storage_data

tracker_server=192.168.10.152:22122

tracker_server=192.168.10.153:22122

配置153的storage

vim /etc/fdfs/storage.conf

group_name=group1 //配置当前storage节点属于哪个group

port=23000 //配置当前group的端口号

base_path=/opt/fastdfs_storage

store_path=/opt/fastfs_storage_data

tracker_server=192.168.10.152:22122

tracker_server=192.168.10.153:22122

两个一模一样。。。。


启动storage



首先启动152的storage

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

查看 端口是否启动

netstat -unlpt|grep fdfs



centos7连接docker pgsql_集群_10



查看日志是否报错

cat /opt/fastdfs_storage/logs/storaged.log


centos7连接docker pgsql_Centos7_11


因为这里我是先启动的153,所以leader为153的,先启动152的,leader则为152的

查看

cat /opt/fastdfs_tracker/logs/trackerd.log




centos7连接docker pgsql_FastDFS_12


在之前的日志后面打印了选择leader的日志,这里选择153的机器为leader,同理,153的tracker也会增加日志

查看153的tracker日志:

cat /opt/fastdfs_tracker/logs/trackerd.log



centos7连接docker pgsql_FastDFS_13

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


centos7连接docker pgsql_nginx_14


然后配置与启动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

store_path=/opt/fastfs_storage_data

tracker_server=192.168.10.152:22122

tracker_server=192.168.10.153:22122

启动

启动方式跟查看端口日志不再累述

最后配置与启动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

store_path=/opt/fastfs_storage_data

tracker_server=192.168.10.152:22122

tracker_server=192.168.10.153:22122

启动

启动方式跟查看端口日志不再累述

目前我们依次启动了:

152 的tracker,153的tracker,152的storage,153的storage,154的storage,155的storage

现在我们来查看集群状态:

在启动stroage的任意一台机器上都可以查看集群状态:

例如:在155上查看:

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

首先查看前面部分:


centos7连接docker pgsql_集群_15


看这里说明了启动2个tracker由server_count=2表示,启动了2个group由group count:2表示

再查看:


centos7连接docker pgsql_上传_16


这里写明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:


centos7连接docker pgsql_上传_17


这里是154的stroage节点,归属到group2中去了


centos7连接docker pgsql_FastDFS_18


这里是155的stroage节点,归属到group2中去了:


centos7连接docker pgsql_Centos7_19


到这里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




centos7连接docker pgsql_集群_20


查看到创建文件data数据后报错,tracker 153连接返回 status 2!=0

查看半天发现配置正确,日志报错,找了很多资料后没有解决,后来想了下是不是防火墙问题,果断执行关闭防火墙操作

service firewalld stop

停止防火墙


centos7连接docker pgsql_FastDFS_21


systemctl disable firewalld



禁用防火墙,完全关闭,开机不启动

centos7连接docker pgsql_Centos7_22

再查看日志:



centos7连接docker pgsql_FastDFS_23


原来是防火墙的问题,再查看集群stroage状态:



centos7连接docker pgsql_nginx_24


到这里集群的添加节点配置已经达到理想状态,

如果删除节点,在上面我已近提到过直接命令操作既可

接下来我们进行测试上传文件

添测试进行文件上传

因为我们配置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



centos7连接docker pgsql_Centos7_25



可以看到,group2上传失败,是不是防火墙原因呢:

关闭154上的防火墙:

再继续进行上传:

centos7连接docker pgsql_上传_26

Ok上传成功!


添安装Nginx,提供http的下载

因为FastDFS 的http服务太弱,无法提供负载均衡等服务,所以需要借助nginx来进行http访问的负载

下面进行配置

解压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行代码:

centos7连接docker pgsql_FastDFS_27

完成,保存后启动:

/usr/local/nginx/sbin/nginx

启动成功后会有pid号:



centos7连接docker pgsql_上传_28




然后查看nginx日志:

cat /usr/loca/nginx/logs/error.log





centos7连接docker pgsql_nginx_29




这里看到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的为:



centos7连接docker pgsql_集群_30



结果分别是:grou2的为:



centos7连接docker pgsql_FastDFS_31



结果group2报错,访问不了,我们查看下nginx的日志

cat /usr/local/nginx/logs/error.log




centos7连接docker pgsql_集群_32


截图字太小,贴出来:

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 配置:



centos7连接docker pgsql_Centos7_33




156的配置完成后启动nginx

然后再来访问:

192.168.10.152/group2/M00/00/00/wKgKmljbH1eAQfcuAAAABj_dUtU558.txt

192.168.10.152/group3/M00/00/00/wKgKnFjbH2KAdeXPAAAABSJTpW4319.txt

查看结果:group2

centos7连接docker pgsql_集群_34


ok没问题!

查看结果group3



centos7连接docker pgsql_Centos7_35



总结

FastDFS的集群配置到目前为止已经完全结束了,完成了安装依赖,配置,添加节点,数据同步,上传测试,下载测试,下载负载均衡等功能,遇到防火墙等问题,都给出了解决方法