我是靠谱客的博主 动人大米,最近开发中收集的这篇文章主要介绍Keepalived+Nginx+FastDFS实现最简单的文件服务器的高可用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们用四台服务器做测试,IP分别为

虚拟IP(VIP):192.168.1.210

tracker1:192.168.1.211

tracker2:192.168.1.212

storage1:192.168.1.213

storage2:192.168.1.214

下面是我们的简单的构架图,通过访问虚拟IP192.168.1.210,来实现文件服务器的读写,此方案最大的容灾程度是一台tracker和一台storage同时宕机。

我提前在四台电脑上做了RSA的登陆所以SCP不需要密码,如果需要的话可以去查看我的另外一篇博客http://blog.csdn.net/goodmylove/article/details/78182905

这里列一下我们要用到的软件版本,

FastDFS_V5.05.tar.gz

fastdfs-nginx-module_v1.19.zip

libfastcommon-master.zip

nginx-1.13.0.tar.gz

这几个除了NGINX,别的三个软件是互相对应的,更换其他版本的话可能会出问题,下面是我用的这几个软件的CSDN下载链接,设置了1积分,如果没有积分可以给我留邮箱我发给你。

http://download.csdn.net/download/goodmylove/10012510

我们先创建一个目录专门放软件

mkdir /home/software
cd /home/software
怎么上传软件我就不说了,,各有各的办法,放进去就可以。
[root@localhost software]# ll
total 1416
-rw-r--r-- 1 root root  20439 Oct  9 15:48 fastdfs-nginx-module_v1.19.zip
-rw-r--r-- 1 root root 336001 Oct  9 15:48 FastDFS_V5.05.tar.gz
-rw-r--r-- 1 root root 106203 Oct  9 15:48 libfastcommon-master.zip
-rw-r--r-- 1 root root 982592 Oct  9 15:48 nginx-1.13.0.tar.gz
[root@localhost software]# scp 

将这几个软件复制给其他机器

[root@localhost software]# scp * 192.168.1.212:/home/software/
fastdfs-nginx-module_v1.19.zip                                                                                                        100%   20KB  20.0KB/s   00:00    
FastDFS_V5.05.tar.gz                                                                                                                  100%  328KB 328.1KB/s   00:00    
libfastcommon-master.zip                                                                                                              100%  104KB 103.7KB/s   00:00    
nginx-1.13.0.tar.gz                                                                                                                   100%  960KB 959.6KB/s   00:00    
[root@localhost software]# scp * 192.168.1.213:/home/software/
fastdfs-nginx-module_v1.19.zip                                                                                                        100%   20KB  20.0KB/s   00:00    
FastDFS_V5.05.tar.gz                                                                                                                  100%  328KB 328.1KB/s   00:00    
libfastcommon-master.zip                                                                                                              100%  104KB 103.7KB/s   00:00    
nginx-1.13.0.tar.gz                                                                                                                   100%  960KB 959.6KB/s   00:00    
[root@localhost software]# scp * 192.168.1.214:/home/software/
fastdfs-nginx-module_v1.19.zip                                                                                                        100%   20KB  20.0KB/s   00:00    
FastDFS_V5.05.tar.gz                                                                                                                  100%  328KB 328.1KB/s   00:00    
libfastcommon-master.zip                                                                                                              100%  104KB 103.7KB/s   00:00    
nginx-1.13.0.tar.gz                                                                                                                   100%  960KB 959.6KB/s   00:00    
[root@localhost software]# 
四台服务器上都执行
安装依赖环境
yum install make cmake gcc gcc-c++ -y
解压并进入libfastcommon-master
unzip libfastcommon-master.zip
cd libfastcommon-master
编译
./make.sh
编译完成
cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -c -o fast_timer.o fast_timer.c  
cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -c -o process_ctrl.o process_ctrl.c  
cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -c -o fast_mblock.o fast_mblock.c  
cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -c -o connection_pool.o connection_pool.c  
cc -Wall -D_FILE_OFFSET_BITS=64 -g -DDEBUG_FLAG -c -o fast_mpool.o fast_mpool.c  
ar rcs libfastcommon.a hash.o chain.o shared_func.o ini_file_reader.o logger.o sockopt.o base64.o sched_thread.o http_func.o md5.o pthread_func.o local_ip_func.o avl_tree.o ioevent.o ioevent_loop.o fast_task_queue.o fast_timer.o process_ctrl.o fast_mblock.o connection_pool.o fast_mpool.o
[root@localhost libfastcommon-master]# 
安装
./make.sh install
安装完成
[root@localhost libfastcommon-master]# ./make.sh install
mkdir -p /usr/lib64
install -m 755 libfastcommon.so /usr/lib64
mkdir -p /usr/include/fastcommon
install -m 644 common_define.h hash.h chain.h logger.h base64.h shared_func.h pthread_func.h ini_file_reader.h _os_define.h sockopt.h sched_thread.h http_func.h md5.h local_ip_func.h avl_tree.h ioevent.h ioevent_loop.h fast_task_queue.h fast_timer.h process_ctrl.h fast_mblock.h connection_pool.h fast_mpool.h /usr/include/fastcommon
[root@localhost libfastcommon-master]# 
返回上级目录
cd ../
解压fastdfs
tar -zxvf FastDFS_V5.05.tar.gz
进入解压目录
cd fastdfs-5.05
编译和安装
./make.sh
./make.sh install
完成
cp -f ../common/fdfs_define.h ../common/fdfs_global.h ../common/mime_file_parser.h ../common/fdfs_http_shared.h ../tracker/tracker_types.h ../tracker/tracker_proto.h ../tracker/fdfs_shared_func.h ../storage/trunk_mgr/trunk_shared.h tracker_client.h storage_client.h storage_client1.h client_func.h client_global.h fdfs_client.h /usr/include/fastdfs
if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/client.conf /etc/fdfs/client.conf.sample; fi
[root@localhost fastdfs-5.05]# 
添加系统服务
mv /etc/init.d/fdfs_trackerd /etc/init.d/trackerd
mv /etc/init.d/fdfs_storaged /etc/init.d/storaged

修改/etc/init.d/trackerd和storaged

vim /etc/init.d/trackerd

将打开文件中的所有/usr/local/bin替换成/usr/bin,一次性替换的方式为输入冒号: %s+/usr/local/bin+/usr/bin,回车后保存退出。如


vim /etc/init.d/storaged
同样 将打开文件中的所有/usr/local/bin替换成/usr/bin,一次性替换的方式为输入冒号: %s+/usr/local/bin+/usr/bin,回车后保存退出
所有服务器同样的配置到此结束。接下来我们单独配置两台tracker

在所有tracker上操作

复制tracker配置文件

cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

修改tracker配置文件

vim /etc/fdfs/tracker.conf

修改如下内容

base_path=/home/fastdfs/tracker
保存退出

增加相应路径

mkdir -p /home/fastdfs/tracker
防火墙放开22122端口
vim /etc/sysconfig/iptables
在-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT下面增加一行
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
保存退出,重启iptables
service iptables restart

复制client配置文件

cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

修改

vim /etc/fdfs/client.conf

修改下面配置文件

base_path=/home/fastdfs/tracker
tracker_server=192.168.1.211:22122
tracker_server=192.168.1.212:22122

启动tracker服务
service trackerd start
查看是否存在trackerd进程
ps -ef|grep trackerd
[root@localhost fastdfs-5.05]# ps -ef|grep trackerd
root 3558 1 0 16:17 ? 00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root 3576 2038 0 16:17 pts/0 00:00:00 grep trackerd
[root@localhost fastdfs-5.05]# 
添加trackerd服务开机自启动
chkconfig trackerd on
tracker配置暂时结束,接下来配置storage
在所有storage上操作
复制storage配置文件
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
修改
vim /etc/fdfs/storage.conf
修改的内容如下
base_path=/home/fastdfs/storage
store_path0=/home/fastdfs/storage
tracker_server=192.168.1.211:22122
tracker_server=192.168.1.212:22122
添加目录
mkdir -p /home/fastdfs/storage
防火墙放开23000和8888端口
vim /etc/sysconfig/iptables
在-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT下面添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
保存退出,重启防火墙
service iptables restart
启动storage
service storaged start
查看storaged进程
ps -ef|grep storaged
添加storaged服务开机自启动
chkconfig storaged on
storage配置完成,接下来在所有tracker服务器上重启tracker,
service trackerd restart
如果执行完命令shell串口没退出,直接敲回车就可以。
在所有storage服务器上重启storage
service storaged restart
如果执行完命令shell串口没退出,直接敲回车就可以。
查看一下storage的日志
cat /home/fastdfs/storage/logs/storaged.log
[2017-10-09 16:37:52] INFO - file: storage_func.c, line: 254, tracker_client_ip: 192.168.1.213, my_server_id_str: 192.168.1.213, g_server_id_in_filename: -721311552
[2017-10-09 16:37:52] INFO - local_host_ip_count: 3, 127.0.0.1 192.168.1.213 192.168.122.1
[2017-10-09 16:37:52] INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server 192.168.1.211:22122, as a tracker client, my ip is 192.168.1.213
[2017-10-09 16:37:52] INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server 192.168.1.212:22122, as a tracker client, my ip is 192.168.1.213
[2017-10-09 16:37:52] INFO - file: tracker_client_thread.c, line: 1235, tracker server 192.168.1.212:22122, set tracker leader: 192.168.1.212:22122
[2017-10-09 16:37:52] INFO - file: storage_sync.c, line: 2698, successfully connect to storage server 192.168.1.214:23000
从日志可以第三四行可以看出,这台storage成功连接了两台tracker192.168.1.211和192.168.1.212.从第五行可以看出,在两个tracker的选举中192.168.1.212被选举为leader.从第六行可以看出,这台storage已经成功连接上了另外一台storage192.168.1.214。
接下来我们尝试关闭掉192.168.1.212现在的leader,看192.168.1.211能不能成为新的leader
在被选举为leader的192.168.1.212上执行
service trackerd stop
然后继续查看这台storage的日志
[2017-10-09 16:45:22] ERROR - file: tracker_client_thread.c, line: 1120, tracker server 192.168.1.212:22122, recv data fail, errno: 107, error info: Transport endpoint is not connected.
[2017-10-09 16:45:22] INFO - file: tracker_client_thread.c, line: 1235, tracker server 192.168.1.211:22122, set tracker leader: 192.168.1.211:22122
[2017-10-09 16:45:22] ERROR - file: connection_pool.c, line: 110, connect to 192.168.1.212:22122 fail, errno: 111, error info: Connection refused
[2017-10-09 16:45:23] ERROR - file: tracker_client_thread.c, line: 277, connect to tracker server 192.168.1.212:22122 fail, errno: 111, error info: Connection refused
[root@localhost logs]# 
第一行信息表示storage失去了与原来的leader192.168.1.212的连接,第二行表示leader被重新选举为了192.168.1.211。
第三行表示这台storage不能与tracker192.168.1.212连接,因为这台tracker被我们停掉了
现在我们重新恢复192.168.1.212这台tracker
在192.168.1.212上执行
service trackerd start
再次查看这台storage的日志
[2017-10-09 16:45:23] ERROR - file: tracker_client_thread.c, line: 277, connect to tracker server 192.168.1.212:22122 fail, errno: 111, error info: Connection refused
[2017-10-09 16:51:23] INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server 192.168.1.212:22122, continuous fail count: 12, as a tracker client, my ip is 192.168.1.213
[root@localhost logs]# 
最后一句已经显示,成功的连接到了192.168.1.212这台tracker,不过根据fastdfs的规则,新恢复的tracker不会抢占原有leader。
接下来我们测试上传文件
在所有tracker上操作
我们在两台tracker的/home目录下放一张ht.jpg的图片,我们测试将这张图片上传到storage上面,通过如下命令上传
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/ht.jpg
我们查看两个tracker的返回
tracker1192.168.1.211
[root@localhost home]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/ht.jpg
group1/M00/00/00/wKgB1lnbObeAOljuAATBl8xofxY969.jpg
[root@localhost home]# 
tracker2192.168.1.212
[root@localhost home]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/ht.jpg
group1/M00/00/00/wKgB1VnbObeAek4HAATBl8xofxY816.jpg
[root@localhost home]# 
从返回可以看出两台tracker各自执行了一次上传操作,并得到了storage返回的存储路径+文件名
group1/M00/00/00/wKgB1lnbObeAOljuAATBl8xofxY969.jpg
group1/M00/00/00/wKgB1VnbObeAek4HAATBl8xofxY816.jpg
现在我们去storage上查看是否有这两个图片
在所有storage上操作
ll /home/fastdfs/storage/data/00/00
storage1
[root@localhost 00]# ll /home/fastdfs/storage/data/00/00
total 616
-rw-r--r-- 1 root root 311703 Oct 9 16:56 wKgB1lnbObeAOljuAATBl8xofxY969.jpg
-rw-r--r-- 1 root root 311703 Oct 9 16:56 wKgB1VnbObeAek4HAATBl8xofxY816.jpg
[root@localhost 00]# 
storaged2
[root@localhost logs]# ll /home/fastdfs/storage/data/00/00
total 616
-rw-r--r-- 1 root root 311703 Oct 9 16:56 wKgB1lnbObeAOljuAATBl8xofxY969.jpg
-rw-r--r-- 1 root root 311703 Oct 9 16:56 wKgB1VnbObeAek4HAATBl8xofxY816.jpg
[root@localhost logs]# 
从这个可以看出,两台tracker上传的文件,分别存到了两台storage上,并且两台storage会自动实现文件同步。

因为篇幅有限,我们下一篇介绍在storage上加载nginx模块,让storage上的图片支持通过HTTP访问。

最后

以上就是动人大米为你收集整理的Keepalived+Nginx+FastDFS实现最简单的文件服务器的高可用的全部内容,希望文章能够帮你解决Keepalived+Nginx+FastDFS实现最简单的文件服务器的高可用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部