我们用四台服务器做测试,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
我们先创建一个目录专门放软件
1
2mkdir /home/software cd /home/software
1
2
3
4
5
6
7
8[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
将这几个软件复制给其他机器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[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]#
安装依赖环境
1yum install make cmake gcc gcc-c++ -y
1
2
3unzip libfastcommon-master.zip cd libfastcommon-master
1./make.sh
1
2
3
4
5
6
7
8cc -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]#
1./make.sh install
1
2
3
4
5
6
7[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]#
1cd ../
1tar -zxvf FastDFS_V5.05.tar.gz
1cd fastdfs-5.05
1
2./make.sh ./make.sh install
1
2
3
4cp -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]#
1
2
3mv /etc/init.d/fdfs_trackerd /etc/init.d/trackerd mv /etc/init.d/fdfs_storaged /etc/init.d/storaged
修改/etc/init.d/trackerd和storaged
1vim /etc/init.d/trackerd

1vim /etc/init.d/storaged
所有服务器同样的配置到此结束。接下来我们单独配置两台tracker
在所有tracker上操作
复制tracker配置文件
1cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
修改tracker配置文件
1vim /etc/fdfs/tracker.conf
修改如下内容
1base_path=/home/fastdfs/tracker
增加相应路径
1mkdir -p /home/fastdfs/tracker
1vim /etc/sysconfig/iptables
1-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
1service iptables restart
复制client配置文件
1cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
修改
1vim /etc/fdfs/client.conf
修改下面配置文件
1
2
3base_path=/home/fastdfs/tracker tracker_server=192.168.1.211:22122 tracker_server=192.168.1.212:22122
1service trackerd start
1
2
3
4
5ps -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]#
1chkconfig trackerd on
在所有storage上操作
复制storage配置文件
1cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
1vim /etc/fdfs/storage.conf
1
2
3
4base_path=/home/fastdfs/storage store_path0=/home/fastdfs/storage tracker_server=192.168.1.211:22122 tracker_server=192.168.1.212:22122
1mkdir -p /home/fastdfs/storage
1vim /etc/sysconfig/iptables
1
2-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
1service iptables restart
1service storaged start
1ps -ef|grep storaged
1chkconfig storaged on
1service trackerd restart
在所有storage服务器上重启storage
1service storaged restart
查看一下storage的日志
1
2
3
4
5
6
7cat /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
接下来我们尝试关闭掉192.168.1.212现在的leader,看192.168.1.211能不能成为新的leader
在被选举为leader的192.168.1.212上执行
1service trackerd stop
1
2
3
4
5[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不能与tracker192.168.1.212连接,因为这台tracker被我们停掉了
现在我们重新恢复192.168.1.212这台tracker
在192.168.1.212上执行
1service trackerd start
1
2
3[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]#
接下来我们测试上传文件
在所有tracker上操作
我们在两台tracker的/home目录下放一张ht.jpg的图片,我们测试将这张图片上传到storage上面,通过如下命令上传
1/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/ht.jpg
tracker1192.168.1.211
1
2
3[root@localhost home]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/ht.jpg group1/M00/00/00/wKgB1lnbObeAOljuAATBl8xofxY969.jpg [root@localhost home]#
1
2
3[root@localhost home]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /home/ht.jpg group1/M00/00/00/wKgB1VnbObeAek4HAATBl8xofxY816.jpg [root@localhost home]#
1
2group1/M00/00/00/wKgB1lnbObeAOljuAATBl8xofxY969.jpg group1/M00/00/00/wKgB1VnbObeAek4HAATBl8xofxY816.jpg
在所有storage上操作
1ll /home/fastdfs/storage/data/00/00
1
2
3
4
5[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]#
1
2
3
4
5[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]#
因为篇幅有限,我们下一篇介绍在storage上加载nginx模块,让storage上的图片支持通过HTTP访问。
最后
以上就是动人大米最近收集整理的关于Keepalived+Nginx+FastDFS实现最简单的文件服务器的高可用的全部内容,更多相关Keepalived+Nginx+FastDFS实现最简单内容请搜索靠谱客的其他文章。
发表评论 取消回复